YOLOv5较新版本的部署方法

该贴主要针对YOLOv5较新的版本部署过程出现的问题,除以下列举的修改,其他均可按照官方提供的方法处理。另外如果使用YOLOv5 2.0版本,请直接按照官方提供的方法处理地平线机器人平台应用系列-yolov5全流程部署_哔哩哔哩_bilibili

针对cannot reshape array of size … into shape (1,x,x,3,x)的问题解决方法,主要在模型转换为onnx类型时的区别。

对yolo.py以及export.py做如下处理(导出onnx时候修改,训练时不修改)

未作处理的之前,会对三个检测头做一些处理之后合并在一起

按以上操作之后导出onnx模型,去掉了部分处理,模型具有三个输出,与官方给出的后处理代码对应上

需注意,官方后处理代码是对应672x672的图片,80分类。这里是672x672,5分类,所以也需要修改后处理中的类别数量。

另外:

1.建议更换激活函数silu为relu,不然会因为算子限制导致一些计算跑在CPU上,model/common.py修改如下(训练前修改):

不更换激活函数的话,推理速度大概只有10帧左右。而因为新版本模型的开头处理变化,更换激活函数后所有算子都跑在BPU上,所以跑满30帧没问题,但需要根据自己的实际情况确定更换激活函数是否对模型推理精度造成影响

2.如果还是想使用一个输出头的话,可以修改对应后处理代码,但是应为BPU上不支持reshape操作,所以还需要对导出onnx模型的操作做一定调整,对性能应该会有提升,但很有限,有兴趣的话可以尝试一下。30帧基本可以满足大部分需求。

你好 ,改了激活函数后检查确实都在BPUl了,但是还是只能跑10fps-
报了个错:for dual-core models, the bpuCoreId must be 0, given: 2-
能帮忙看下这个是什么问题吗?-

您好,我更改完yolo.py和export.py后,导出的模型与您的图片不一样,我的为什么是这样的

在tag7.0的YOLOv5中,修改完yolo.py文件后export时,如果遇到以下报错:-
File “/home/hobot/01_YOLOv5_family/00_tag7.0_test/yolov5/export.py”, line 797, in run

shape = tuple((y[0] if isinstance(y, tuple) else y).shape) # model output shape

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

AttributeError: ‘list’ object has no attribute ‘shape’-

则需要在export.py文件中再注释掉以下三行即可:-

请教个问题原始pt转换后是onnx是leakyrelu,我训练后的onnx怎么成了sigmoid

您好,yolov5应该是在4.0开始使用silu,您可以确定一下pt模型的版本。另外训练前先按文章所写修改激活函数,修改完再训练一下看看。

您的版本是多少?另外可以发一下网络整体的图片看一下哈

使用的推理代码是?版本是?

把bpu——Corenumber改成1就好了

三个输出 并没有全部在图片的最下面,可以去图片中上部找找其他两个输出

为什么我的bin模型可视化与RDK中不一样呢,少的这一行是什么呢?
这是我的:

这是自带的:

我的bin文件的也是这样,你解决了吗

您好,请问后面你找到问题了吗?我使用的是YOLOv5 6.0,更换了激活函数,现在也是所有算子都可以在BPU上,但是推理速度只有5帧,远远达不到30帧,还有可能哪里出了问题呢?我使用的推理代码是官方提供的/rdk_model_zoo/demos/detect/YOLOv5/YOLOv5_Detect.py。

1 个赞

请问这个可视化文件是从哪里导出的

YOLOV5 tag7.0同问,推理延迟200+ms,所有算子在BPU上,帧数4FPS左右