发布时间:2022-08-19 14:09
前面我们说到了如何基于自己数据集训练,感兴趣的小伙伴可以去看下。。。
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
我们可以看到基于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)
前面我们说到deploy中的yaml是基于Detect处理的和v5一样,所以大家可以直接导出ONNX,我这边是下载了u5文件夹,在u5文件夹里面进行转换,。
下载之后直接转换,
python export.py --weights weights/best_yolov7_tiny_0.1_delopy.pt --include onnx
ok 正常导出。。。
这个其实比较麻烦的,因为它后面增加了两个操作add mul,,如果直接导出会出现很多节点,其中的节点就是mul,会给你报错,直接给你报维度不匹配。所以我们需要对yolo.py文件进行操作,
然后我们在导出ONNX
我们尝试下将taining文件夹下的ONNX转换为trtmodel...
直接报错,原因就是MUl的维度不同。
更改之后,成功导出
之后进行trt部署测试。。。
正确得到结果::::
后面有时间会更新一波,基于TensorRT7+API搭建的YoloV7网络结构的博客,当然这个搭建是失败的,,目前不太清楚什么原因。。。。。。。