栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

windows环境yolov5模型转onnx然后用openvino生成推理加速模型

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

windows环境yolov5模型转onnx然后用openvino生成推理加速模型

作者: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' 

安装命令

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

结果:

大小没怎么变,速度稍微快了一些

 生成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博客

 【如果对您有帮助,交个朋友给个一键三连吧,您的肯定是我博客高质量维护的动力!!!】 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/499216.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号