YoloV7:基于自己训练的模型如何导出正确的ONNX

前面我们说到了如何基于自己数据集训练,感兴趣的小伙伴可以去看下。。。

YoloV7:训练自己得数据集详细教程_Mr曲末寒的博客-CSDN博客_yolo

我们得到了pt文件之后需要将他转换为ONNX,之后在对ONNX进行相应的部署,能完整的部署的前提是我们需要导出完整的ONNX。

目录

1、training和deploy的区别

2、deploy导出ONNX

3、training导出ONNX 

3.1  不更改代码导出的ONNX转换为engine模型

3.2 更改之后的ONNX转换为engine


1、training和deploy的区别

我们可以看到基于YoloV7训练的cfg有两种yaml文件,一个是training文件夹,一个是deploy文件夹,这两种文件夹有啥不一样呢???

大家可以看下下面别人的issuse,,记住这个很关键,就是你选择哪个yaml训练对你后面导出的onnx是很关键的,后面我们会说到。

1、training中的yaml文件最后是采用IDetect,而deploy中的yaml文件采用的是Detect

2、IDetect是在最后一个C5结构输出增加一个add操作,之后在进行conv,然后在mul操作,而Detect则是和v5一样的操作,没有add  mul,大家可以去看我的另外一篇博客,yolov7-tiny的结构图,这个结构图暂时针对deploy的文件夹,后续会补充training文件夹

yolov7-tiny网络模型结构图_Mr曲末寒的博客-CSDN博客

What is the difference between yolov7.yaml in cfg/deploy and cfg/training · Issue #74 · WongKinYiu/yolov7 (github.com)

2、deploy导出ONNX

前面我们说到deploy中的yaml是基于Detect处理的和v5一样,所以大家可以直接导出ONNX,我这边是下载了u5文件夹,在u5文件夹里面进行转换,。

下载之后直接转换,

python export.py --weights weights/best_yolov7_tiny_0.1_delopy.pt --include onnx

ok  正常导出。。。

3、training导出ONNX 

这个其实比较麻烦的,因为它后面增加了两个操作add  mul,,如果直接导出会出现很多节点,其中的节点就是mul,会给你报错,直接给你报维度不匹配。所以我们需要对yolo.py文件进行操作,

然后我们在导出ONNX

 我们尝试下将taining文件夹下的ONNX转换为trtmodel…

3.1  不更改代码导出的ONNX转换为engine模型

直接报错,原因就是MUl的维度不同。

3.2 更改之后的ONNX转换为engine

更改之后,成功导出

 

之后进行trt部署测试。。。

正确得到结果::::

 后面有时间会更新一波,基于TensorRT7+API搭建的YoloV7网络结构的博客,当然这个搭建是失败的,,目前不太清楚什么原因。。。。。。。

来源:Mr曲末寒

物联沃分享整理
物联沃-IOTWORD物联网 » YoloV7:基于自己训练的模型如何导出正确的ONNX

发表评论