如何在windows系统下将yolov5的pt模型导出为onnx模型

目录

  • 前言
    • 第一个问题
    • 第二个问题
    • 第三个问题
    • 第四个问题
    • 总结

前言

最近在做本科毕业设计,要求是在树莓派上部署yolo算法来实现火灾检测,在网上查了很多资料,最后选择用yolov5s模型先试着在树莓派上部署,看下效果如何,由于从大佬那里拿到了yolov5火灾检测模型,但想要将它移植到树莓派上第一步要把pt模型转换成onnx模型,原因我想大概是因为树莓派算力不如pc,因此要转换成合适的模型进行部署。一开始我觉得转换模型应该是很简单的一个事情,但是在进行的过程中踩了很多坑,走了很多弯路,因此在这里总结一下,也希望有相同需求的朋友能从这里获得帮助,ps:因为本人水平有限所以能帮到大家很高兴。

第一个问题

在进行模型转化时从网上找的代码是这样:

python export.py --weights ‘weights/last.pt’ --batch-size 1 --img_size 320

大概内容是调用export.py这个文件来进行模型的转化,但是将代码复制到项目命令行里运行后产生如下报错:
在这里插入图片描述
我看了下报错的原因大概是语法错误,后来在网上查找后发现其实这个命令可以不带后面的–batch-size和–img-size,如果要带的话这里的–img_size应该改为–img-size。

第二个问题

将后面的参数删掉以后发现还是不能正常运行,后来经过分析后发现是因为这里的’weights/last.pt’应该是你项目里这个.pt模型的相对地址,因此将代买修改为以下形式:

python export.py --weights ‘runs/train/exp_yolov5s/weights/best.pt’

运行后发现还是不行,报错如下:
如何在windows系统下将yolov5的pt模型导出为onnx模型_第1张图片
在网上查找详细步骤后发现是由于之前并没有安装好onnx的包导致,于是又输入了这样一行代码安装缺少的onnx包:

pip install onnx

很快就安装好了:
在这里插入图片描述
安装好了以后运行还是和上面一样的报错,于是在网上查找资料发现是因为pytorch的版本太高导致包不兼容,所以又重新安装了1.9.0版本的pytorch,因为之前安装了conda虚拟环境,所以安装过程很顺利,不过因为我家网速原因下载速度有些慢…

conda install pytorch1.9.0 torchvision0.10.0 torchaudio==0.9.0 cudatoolkit=10.2 -c pytorch

第三个问题

安装好之后又运行了一编export的文件,结果还是报错,不过所幸这次报错的原因不一样了,这也说明之前那个问题已经解决了,虽然不清楚里面的原理不过对于我这个小白来说能用就已经是一件令人激动的事情了,如果有大佬的话希望可以帮忙分析一下。这次的报错是这样的:
如何在windows系统下将yolov5的pt模型导出为onnx模型_第2张图片
这个问题我在网上搜了很多,大部分都是说是conda的环境变量配的有问题,然而我的conda早就安装好了而且可以正常运行,之前也配置过环境变量所以应该不是这个原因,后来偶然间看到有人说可能是因为pillow版本的问题,于是我卸载然后重新装了pillow:

pip uninstall pillow

如何在windows系统下将yolov5的pt模型导出为onnx模型_第3张图片

pip install pillow==8.4

如何在windows系统下将yolov5的pt模型导出为onnx模型_第4张图片

第四个问题

经过上面踩过许多次坑之后,这次,终于!它提示成功运行了:
如何在windows系统下将yolov5的pt模型导出为onnx模型_第5张图片
但是,我还没来得及高兴又来了当头一棒:我发现在我存放.pt模型的文件夹里面并没有成功出现导出的onnx文件,后来我发现在上面:
在这里插入图片描述
运行了很多次都是相同的结果,然后当时我心态就快崩溃了,后来又重振旗鼓去网上找解决方法,然后找到了一个看起来很靠谱的博客,按照大佬的办法修改了export.py的代码:
如何在windows系统下将yolov5的pt模型导出为onnx模型_第6张图片
在这里修改data和weight的默认路径为你数据源data.yaml的路径和模型的权重文件里的best.pt的路径,在修改之后,在命令行输入这行代码:

python export.py --include torchscript onnx

终于,程序正常运行,我在模型best.pt所在文件夹内看到了导出的.onnx文件和.torchscript文件,如果只想导出onnx文件可以把前面的去掉,直接输入:

python export.py --include onnx

到此,将模型部署到树莓派上的第一步总算完成了。

总结

这是本人第一次在csdn上尝试写这种总结类的博客,目的也很简单,想把这个过程中自己遇到的坑和尝试的经历记录下来,方便后面开发过程中有需要的时候回来翻看,同时发布到csdn上也希望能够得到大佬们的批评指正,如果某些内容能够帮到大家那再好不过了。
作为一个机械专业的大四学生,第一次做毕设就拿到这么有挑战性的题目其实对我来说是很恐惧的,因为自己之前并没有识别算法这方面的基础知识储备,研究生想做的方向是嵌入式,不过因为做毕设需要用到深度学习图像识别所以尝试将它部署到树莓派上,现在工作才刚刚开始就遇到这么多的困难其实是超出我的预期的,不过经历了这些之后我对于开发应用这类工作有了新的认识,其实有时候这个东西真的没有你想象中的那么难,只是你要做到心平气和,不要浮躁,多学多问多尝试,总会有新的收获,加油!

你可能感兴趣的:(windows,python,深度学习)