yolov5.6出来那么久了竟没有OpenVINO的C++实现,又因为树莓派不支持OpenVINO,所以入手NCS2,NCS2又仅支持FP16....
中间踩了不少坑, 在此记录一下最简单的复现方式,代码Windows通用,直接使用onnx模型文件即可。
生成IR文件
1.openvino部署(Windows跳过)
需要注意的是,之前opencv dnn实现yolov5.6转成了onnx模型文件,OpenVINO是可以直接读取onnx,但由于树莓派使用NCS2仅支持FP16,因此我们需要在Windows将yolov5.6的深度学习模型转换为支持FP16的IR文件。如果是在windows下实现,无需转成IR文件。
(树莓派的OpenVINO工具套件不包含模型优化器Model Optimizer,IR文件包含一个*.xml文件用来描述网络结构,还包含一个*.bin文件用来存储网络的权重和偏置量)
树莓派安装openvino:树莓派安装部署OpenVINO
yolov5.6中export.py可以直接转成openvino的IR模型文件,但没有FP16的参数
需要将export.py中165行:
cmd = f"mo --input_model {file.with_suffix('.onnx')} --output_dir {f}"
改为:
cmd = f"mo --input_model {file.with_suffix('.onnx')} --output_dir {f} --scale=255 --data_type=FP16"
安装openvino-dev,因为树莓派中安装的是2021.4.689版本,所以这里openvino选择2021.4.2版本。(版本不同存在模型文件读取失败的问题)
2.模型转换
export.py中修改参数
imgsz这里是自己训练的数据,大小为320
--include加入openvino:
运行export.py,生成openvino模型文件
代码
代码中有模型文件可以直接使用,如果自己的数据的话将模型文件和classes.txt换成自己的就可以了。
GitHub - snail0614/yolov5.6_openvino_cpp
运行结果:
用的yolov5n模型,输入320X320,推理用时45ms左右,速度可以,比单纯树莓派强多了。