yolov8 OpenCV DNN 部署 推理报错
yolov8是yolov5作者发布的新作品
目录
1、下载源码
2、下载权重
3、配置环境
4、导出onnx格式
5、OpenCV DNN 推理
1、下载源码
git clone https://github.com/ultralytics/ultralytics.git
2、下载权重
git clone https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n.pt
3、配置环境
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
4、导出onnx格式
项目下models/export.md有说明:
我在目录下用命令行没有反应,所以在项目目录下新建一个python文件【my_export.py】,输入:
from ultralytics import YOLO
# Load a model
model = YOLO('yolov8n.pt') # load an official model
# model = YOLO('path/to/best.pt') # load a custom trained
# Export the model
model.export(format='onnx')
然后执行:
python my_export.py
输出如下:
5、OpenCV DNN 推理
用之前博客写的代码进行推理,发现有报错:
用netron查看onnx格式模型:
再查看之前成功部署过的yolov5n.onnx:
所以部署代码可能不通用。
又在项目下examples/YOLOv8-CPP-Inference找到部署代码,运行一下依然报错:
看一下Cmakelist.txt:
项目里面的C++推理代码应该也是基于OpenCV DNN的。
然后我就在网上找原因,发现是OpenCV版本低了,yolov8 opencv-dnn部署需要4.7以上的版本,我现在用的是OpenCV 4.5.5。
如果是onnxruntime的话就不需要,应该4.0以上的版本都可以,但是之前博客写的yolov5 的onnxruntime C++推理代码还是用不了,因为yolov8的输出与yolov5的输出不一样:
1、输出维度顺序已经变了(可以从上面的netron展示图看到)
2、另外yolov8输出中的84维度是少了一个yolov5的置信度(yolov5是85维度)
写到这里头有点大,思考后选择用onnxruntime推理。因为不想再装opencv4.7了,opencv-C++编译安装起来确实有点麻烦。