易百纳ss928开发板移植自训练模型跑通yolov5算法

cnblogs 2024-09-11 08:13:00 阅读 64

ss928平台移植官方yolov5s算法参考文章:https://www.ebaina.com/articles/140000017418,这位大佬也开源了代码,gitee链接:https://gitee.com/apchy_ll/ss928_yolov5s

本文在参考上述文章的基础上,将官方yolov5s模型跑通,验证推理图片正确,然后移植自训练的推理模型,在移植过程中遇到了一些问题,解决后记录一下。

一、模型转换

自训练模型是在yolov5-v7.0版本下训练的,通过export.py将pt模型转为onnx模型,需要注意的是在运行export.py转出前,需要将yolo.py文件里的foward函数修改为如下:

点击查看代码

def forward(self, x):

for i in range(self.nl):

x[i] = self.m[i](x[i])

bs, _, ny, nx = x[i].shape

x[i] = x[i].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous()

return x

这样修改的目的是为了让模型推理输出三层output,进一步通过后处理解算目标检测框。目前试过yolov5_62_export_ncnn、yolov5-v6.2、yolov5-v7.0、瑞芯微rk的yolov5代码(在官方yolov5-v7.0版本上做了些优化)这些版本转出的onnx模型都相同,可以进行下一步运用atc工具转换为om模型转换om模型。

二、模型部署

在参考上述提到的文章里的代码移植自己训练好的模型,与官方yolov5s不同的是自训练模型检测8类目标,需要修改如下几个地方:

1.模型调用路径

2.模型输入图像数据路径

3.后处理代码中的检测类别数量

4.画图可视化时目标标签类型

经过以上修改编译完成得到可执行文件,就可以用自训练模型推理了。

** 三、推理验证**

采用一张测试集中的图片进行推理测试,在板端推理结果如图1所示,在PC端用python工程推理结果如图2所示。

图1 板端推理结果

图2 PC端推理结果

明显可看出PC端检测结果要比板端检测结果好很多,验证了pt、onnx模型推理结果都正常以及板端后处理代码无误后,定位问题出在om模型或输入推理模型的图像。进一步研究发现在使用act工具转om模型时会开启aipp_op配置,默认配置文件里是将YUV420SP_U8转为GRAY灰度图格式,对应代码中将输入的jpg图片转为YUV420SP_U8格式数据再输入给推理函数。这里推测自训练模型效果差是因为输入的是GRAY格式图片,训练的数据集都是jpg图片,可能不像官方yolov5s用的coco数据集那么多,导致模型推理GRAY格式图像检测精度下降。因此将代码修改如下:

1.输入图片letterbox预处理后不转为YUV420SP格式,直接保存为BGR格式的bin文件,然后再输入给推理函数。

2.此时保存的bin图像数据是BGR格式,在onnx转换om模型时,开启通道交换开关,将BGR格式转换为RGB格式。

这里配置时输入格式参数是RGB888_U8,其实应该写BGR的,但是查看了act工具手册里,该参数没有BGR合适的输入,最后验证这里写RGB888_U8,只开启通道交换功能,最后推理结果是正确的,说明BGR格式转为了RGB格式,aipp里的其它功能暂时没有使用过,不确定这样配置是否会影响其它功能正确使用。

修改后重新编译推理测试图片,推理结果如图所示。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。