作者:RayChiu_Labloy
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
目录
准备pytorch版本的yolo环境
安装OpenVINO
首先训练好yolov5模型
然后转ONNX
用yolo提供的现成的脚本(根目录下)的export.py
yolo.py和export.py的修改
export.py修改onnx的版本号对应你自己的onnx版本
yolo.py修改forward方法
中间遇到的问题
转的时候报 No module named 'onnx'
用onnx模型测试
ONNX模型和原pt模型对比
速度上:
大小上
使用工具onnx-simplifier简化ONNX模型
onnx-simplifier安装
简化
结果:
生成IR文件
准备pytorch版本的yolo环境
时光机:win10搭建pytorch环境跑通pytorch版本的yolov5_RayChiu757374816的博客-CSDN博客
安装OpenVINO
传送门:win10 安装OpenVINO并在tensorflow环境下测试官方demo_RayChiu757374816的博客-CSDN博客
首先训练好yolov5模型
如何训练yolov5模型:labelimg制作VOC数据集并用yolov5训练目标检测模型_RayChiu757374816的博客-CSDN博客
然后转onNX
用yolo提供的现成的脚本(根目录下)的export.py
Terminal窗口输入命令 python export.py --include=onnx 回车即可导出 ONNX文件,注意加上 “--include=onnx”参数,否则导出多余的东西,其他参数还需要设置你需要转换的模型路径如图:
onnx生成路径和--weights路径一直。
yolo.py和export.py的修改
export.py修改onnx的版本号对应你自己的onnx版本
否则会在OpneVINO转IR文件的时候报错,见本文最下边的问题描述
yolo.py修改forward方法
def forward(self, x):
z = [] # inference output
for i in range(self.nl):
x[i] = self.m[i](x[i]) # conv
bs, _, ny, nx = x[i].shape # x(bs,255,20,20) to x(bs,3,20,20,85)
x[i] = x[i].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous()
if not self.training: # inference
if self.onnx_dynamic or self.grid[i].shape[2:4] != x[i].shape[2:4]:
self.grid[i], self.anchor_grid[i] = self._make_grid(nx, ny, i)
y = x[i].sigmoid()
c = (y[..., 0:2] * 2. - 0.5 + self.grid[i].to(x[i].device)) * self.stride[i] # xy
d = (y[..., 2:4] * 2) ** 2 * self.anchor_grid[i] # wh
e = y[..., 4:]
f = torch.cat((c, d, e), 4)
z.append(f.view(bs, -1, self.no))
return x if self.training else torch.cat(z, 1)
中间遇到的问题
转的时候报 No module named 'onnx'
转的时候报 No module named 'onnx'
安装命令
conda install -c conda-forge onnx
自动安装依赖:
成功生成onnx文件:
用onnx模型测试
安装onnxruntime
pip install onnxruntime
测试命令
python detect.py --source ./data/images/bus.jpg --weights=./yolov5s.onnx
结果没问题
ONNX模型和原pt模型对比
速度上:
原模型和onnx测试官方示例耗时:
onnx模型比元模型快了将近一倍
大小上
我们没有做过多的处理,onnx模型稍微大一些:
使用工具onnx-simplifier简化ONNX模型
onnx-simplifier安装
pip install -i http://pypi.douban.com/simple/ --trusted-host=pypi.douban.com/simple onnx-simplifier
简化
python -m onnxsim ./yolov5s.onnx ./yolov5s_sim.onnx
结果:
pip install -i http://pypi.douban.com/simple/ --trusted-host=pypi.douban.com/simple onnx-simplifier
简化
python -m onnxsim ./yolov5s.onnx ./yolov5s_sim.onnx
结果:
大小没怎么变,速度稍微快了一些
生成IR文件所谓的ir文件就是OpenVINO把模型(例如ONNX格式的)通过mo.py转化生成的文件,会生成两个文件,一个.bin是参数文件,一个是xml文件是描述网络结构的。
打开命令行,进入OpenVINO的mo.py所在目录:
cd C:Program Files (x86)IntelSWToolsopenvino_2020.4.287deployment_toolsmodel_optimizer
执行转换命令(记得切换一下pytorch_py37那个conda环境,因为安装了需要的onnx依赖):
python mo_onnx.py --input_model E:projectspyHomeyolov5yolov5s.onnx --output_dir E:projectspyHomeyolov5irModle
问题1:提示我没有安装networkx defusedxml,那么安装
pip install networkx defusedxml
然而还是报缺东西,提示我执行install_prerequisites_onnx.bat这个脚本,好吧到我的OpenVINO安装目录执行吧
cd C:Program Files (x86)IntelSWToolsopenvino_2020.4.287deployment_toolsmodel_optimizerinstall_prerequisites install_prerequisites_onnx.bat
问题2:后来执行转换命令报 onNX Resize operation from opset 12 is not supported
看起来是导出的onnx文件配置和自己安装的onnx版本不一致:
默认的是12:
而我安装的是10(conda list查看):
export.py改一下对应自己安装的版本重新导出onnx文件,然后再次转换成功:
参考:【深入YoloV5(开源)】基于YoloV5的模型优化技术与使用OpenVINO推理实现_cv君的博客-CSDN博客
OpenVINO部署Yolov5_洪流之源-CSDN博客_openvino yolov5
u版YOLOv5目标检测openvino实现_缘分天空的专栏-CSDN博客
当YOLOv5遇见OpenVINO!_阿木寺的博客-CSDN博客
【如果对您有帮助,交个朋友给个一键三连吧,您的肯定是我博客高质量维护的动力!!!】



