README.md

    yolov5-seg-opencv-onnxruntime-cpp

    使用opencv-dnn部署yolov5实例分割模型 基于6.2版本的yolov5:https://github.com/ultralytics/yolov5

    OpenCV>=4.5.0
    ONNXRuntime>=1.9.0, (Maybe the earlier version of onnxruntime is also possible, but I didn't test it)

    # for oprncv
    python export.py --weights yolov5s-seg.pt --img [640,640] --include onnx --opset 12
    # for onnxruntime
    python export.py --weights yolov5s-seg.pt --img [640,640] --include onnx  #static
    python export.py --weights yolov5s-seg.pt  --batch-size bs-number --dynamic --include onnx  #dyamic

    2023.01.11 更新:

    2022.12.19 更新:

    • new: 新增加onnxruntime推理,支持onnx的动态推理和批量推理,避免opencv不支持动态的尴尬境地。
    • onnxruntime的版本最低要求目前未知,我仅仅测试了ort12.0+ort13.0这两个大版本(11.0的应该问题也不大),如果有人测试比这些更低的版本可以运行通过,可以通知我一下。
    • 为了兼容,代码结构有部分变动。

    2022.12.13 更新:

    • 如果你的显卡支持FP16推理的话,可以将模型读取代码中的DNN_TARGET_CUDA改成DNN_TARGET_CUDA_FP16提升推理速度(虽然是蚊子腿,好歹也是肉(:

    2022.11.10 更新:

    • 之前旧版本计算结果mask图像的时候,是整个特征图和特征掩码进行的矩乘法,然后切割出bounding-box区域二值化,这个速度在我看来还是太慢,特别是检测结果框多并且目标都不大的情况下,整张特征图进行乘法的开销大,而有用的就区域就一小块,类似下面的领带那样,大部分特征图区域是无效的,所以本次修改变成对特征图进行裁剪,然后进行后续的矩阵乘法,特别是小目标比较多的情况下提升比较大,而两者结果基本上基本一致,仅仅由于部分四舍五入的原因差了一个像素。如果你的小目标对于一个像素的偏移无法接受的话,那么就使用旧版本方法。
    • 这两种方法具体差距情况可以看differ-from-tow-method.bmp

    2022.10.10 更新:

    • 0.opencv不支持动态推理,请不要加--dymanic导出onnx。
    • 1.关于换行符,windows下面需要设置为CRLF,上传到github会自动切换成LF,windows下面切换一下即可
    • 2.有些小伙伴用版本为1.12.x的pytorch的时候,需要将 https://github.com/ultralytics/yolov5/blob/c98128fe71a8676037a0605ab389c7473c743d07/export.py#L155 这里的标志位改成do_constant_folding=False, ,否者opencv用dnn读取不了onnx文件
    • 4.关于mask

      原始的mask采用的是整张图片mask,即使你的box很小,整张图就一小块区域,也会是整个mask。修改之后变成了box内mask,mask跟着box的大小走(原始代码中的crop操作),提升速度的同时,内存开销也会减小。具体变换结果可以看tie-mask.bmp

    以下为yolov5-seg.onnx运行结果:

    项目简介

    yolov5 segmentation with onnxruntime and opencv

    🚀 Github 镜像仓库 🚀

    源项目地址

    https://github.com/uneedcrydear/yolov5-seg-opencv-dnn-cpp

    发行版本

    当前项目没有发行版本

    贡献者 2

    U UNeedCryDear @UNeedCryDear
    U UNeedCryDear @UNeedCryDear

    开发语言

    • C++ 100.0 %