前面我们说到了如何基于自己数据集训练,感兴趣的小伙伴可以去看下。。。
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一样的操作,没有addmul,大家可以去看我的另外一篇博客,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
【AI-训练+部署|YoloV7:基于自己训练的模型如何导出正确的ONNX】
文章图片
ok正常导出。。。
3、training导出ONNX这个其实比较麻烦的,因为它后面增加了两个操作addmul,,如果直接导出会出现很多节点,其中的节点就是mul,会给你报错,直接给你报维度不匹配。所以我们需要对yolo.py文件进行操作,
文章图片
然后我们在导出ONNX
文章图片
我们尝试下将taining文件夹下的ONNX转换为trtmodel...
3.1不更改代码导出的ONNX转换为engine模型 直接报错,原因就是MUl的维度不同。
文章图片
3.2 更改之后的ONNX转换为engine 更改之后,成功导出
文章图片
文章图片
之后进行trt部署测试。。。
文章图片
正确得到结果::::
后面有时间会更新一波,基于TensorRT7+API搭建的YoloV7网络结构的博客,当然这个搭建是失败的,,目前不太清楚什么原因。。。。。。。
推荐阅读
- 机器学习|windows环境下安装TensorRT 5.0教程(win10)
- YOLO|Ubuntu18.04配置darknet环境实现YOLOv4目标检测(五)——darknet YOLOv4和YOLOv4-tiny模型转ONNX转TensorRT部署
- TensorRT+深度学习|ONNX+TensorRT:基于ONNX+TensorRT+AlexNet+Qt+WIN10的图像分类