4

YOLOv5 在最新 OpenVINO 2021R02 版本的部署与代码演示详解

 3 years ago
source link: https://segmentfault.com/a/1190000039108701
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

YOLOv5 在最新 OpenVINO 2021R02 版本的部署与代码演示详解

发布于 1 月 27 日

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

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

模型转换主要是把原始的 YOLOv5 的 pytorch 模型文件转换为通用的开放模型格式 ONNX 与 OpenVIN 特有的文件格式IR(.xml与.bin)。

OpenVINO 从 2020R02 以后版本开始支持直接读取 ONNX 格式文件,所以我们既可以通过脚本直接导出 onnx 格式文件,直接给 OpenVINO 调用,也远程桌面可以对得到 ONNX 文件通过 OpenVINO 的模型转换脚本做进一步转换生成IR中间格式(.bin文件与.xml文件)。

导出ONNX格式文件的脚本

Pytorch 的 YOLOv5 项目本身已经提供了转换脚本,命令行运行方式如下:

export at 640x640 with batch size 1python models/export.py --weights yolov5s.pt --img 640 --batch 1

然后循环每个输出层,解析每个特征点对应的3个框与相关数据。由于在导出的时候 ONNX 格式文件时模型的推理得到的三个输出层原始结果,所以还需要对每个数据先完成 sigmoid 归一化,然后再计算相关值,这部分的代码实现我参考了项目中的 yolo.py 中的 Detection 部分,得到初始每个对象的检测框之后,采用 OpenVINO 中自带非最大抑制函数,完成非最大抑制,就得到了最终的预测框,然后绘制显示。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK