Skip to content

detection and instance segmentation of yolov8,use onnxruntime and opencv

License

Notifications You must be signed in to change notification settings

Chen94yue/yolov8-opencv-onnxruntime-cpp

 
 

Repository files navigation

yolov8-opencv-onnxruntime-cpp

使用OpenCV-dnn和ONNXRuntime部署yolov8目标检测和实例分割模型

基于yolov8:https://github.com/ultralytics/ultralytics

requirements for opencv-dnn

  1. OpenCV>=4.7.0
    OpenCV>=4.7.0
    OpenCV>=4.7.0

  2. export for opencv-dnn:

yolo export model=path/to/model.pt format=onnx dynamic=False opset=12

  • Note: When exporting to opencv, it is best to set opset to 12

requirements for onnxruntime (only yolo*_onnx.h/cpp)

opencv>=4.5.0
ONNXRuntime>=1.9.0

更新说明:

2023.09.20更新

  • 0.新增模型路径检查,部分issue查了半天,发现模型路径不对。
  • 1.计算mask部分bug修复,此前如果输入大小非640的话,需要同时设置头文件和结构体才能完成检测,但是大部分人只修改了一个地方,目前优化这部分内容,只需要修头文件中的定义即可。另外将segHeight和segWidth设置为从网络输出中读取,这样如果mask-ratio不是4倍的话,可以不需要修改这两个参数值。
  • 2.修复GetMask2()中可能导致越界的问题。

2023.02.17更新

  • 0.新增加onnxruntime旧版本API接口支持
  • 1.opencv不支持动态推理,请将dymanic设置为False导出onnx,同时opset需要设置为12。
  • 2.关于换行符,windows下面需要设置为CRLF,上传到github会自动切换成LF,windows下面切换一下即可

2023.02.07 更新:

  • yolov8使用opencv-dnn推理的话,目前只支持opencv4.7.0及其以上的版本,我暂时也没找到怎么修改适应opencv4.5.0的版本( ̄へ ̄),这个版本需求和onnxruntime无关,onnxruntime只需要4.5.0的版本,4.x的版本应该都可以用,只要能正确读取,有cv::dnn::blobFromImages()这个函数即可,如果真的没有这个函数,你自己将其源码抠出来用也是可以的,或者大佬们自己实现该函数功能。
  • 而目前opencv4.7.0的版本有问题(opencv/opencv#23080) ,如果你的CPU不支持AVX2指令集,则需要在net.forward() 前面加上net.enableWinograd(false);来关闭Winograd加速,如果支持这个指令集的话可以开启加速(蚊子腿)。

依照惯例贴一张yolov8-seg.onnx在640x640下用onnxruntime运行结果图: Alt text

About

detection and instance segmentation of yolov8,use onnxruntime and opencv

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 98.4%
  • CMake 1.6%