共计 1158 个字符,预计需要花费 3 分钟才能阅读完成。
YOLOv5 在 OpenVINO 上的部署,网上有很多 python 版本的代码,然而根本都有个很外伤的问题,就是还在用 pytorch 的一些库做解析,C++ 的代码有个更大的外伤就是自定义解析解释的不是很分明,所以自己浏览 YOLOv5 的 pytorch 代码推理局部,从原始的三个输入层解析实现了 boxes, classes, nms 等要害 C++ 代码输入,实现了纯 OpenVINO+OpenCV 版本的 YOLOv5s 模型推理的代码演示。上面就是具体的零碎环境与各个局部解释,以及代码实现与演示图像。
零碎版本信息与依赖
Window 10 64bit
Pytorch1.7+CUDA10.0
Python3.8.5
VS2015
OpenVINO_2021.2.185
01
YOLOv5 下载与测试运行
YOLOv5 是第二个非官方的 YOLO 对象检测版本,也是第一个 Pytorch 实现的 YOLO 对象检测版本。Github 地址如下:
https://github.com/ultralytic…
须要克隆到本地
git clone https://github.com/ultralytic…
而后运行
pip install -r requirements.txt
装置所有依赖。
最初运行一段视频或者图像实现测试
python detect.py –source D:imagesvideoSungEun.avi –weights yolov5s.pt –conf 0.25
02
模型转换
模型转换次要是把原始的 YOLOv5 的 pytorch 模型文件转换为通用的凋谢模型格局 ONNX 与 OpenVIN 特有的文件格式 IR(.xml 与 .bin)。
OpenVINO 从 2020R02 当前版本开始反对间接读取 ONNX 格式文件,所以咱们既能够通过脚本间接导出 onnx 格式文件,间接给 OpenVINO 调用,也远程桌面能够对失去 ONNX 文件通过 OpenVINO 的模型转换脚本做进一步转换生成 IR 两头格局 (.bin 文件与 .xml 文件 )。
导出 ONNX 格式文件的脚本
Pytorch 的 YOLOv5 我的项目自身曾经提供了转换脚本,命令行运行形式如下:
export at 640×640 with batch size 1python models/export.py –weights yolov5s.pt –img 640 –batch 1
而后循环每个输入层,解析每个特色点对应的 3 个框与相干数据。因为在导出的时候 ONNX 格式文件时模型的推理失去的三个输入层原始后果,所以还须要对每个数据先实现 sigmoid 归一化,而后再计算相干值,这部分的代码实现我参考了我的项目中的 yolo.py 中的 Detection 局部,失去初始每个对象的检测框之后,采纳 OpenVINO 中自带非最大克制函数,实现非最大克制,就失去了最终的预测框,而后绘制显示。