2022.09.29更新 c++下面部署yolov5实例分割模型(六)

这篇具有很好参考价值的文章主要介绍了2022.09.29更新 c++下面部署yolov5实例分割模型(六)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

零、写在最前面:

2023.01.11 更新:

新增加onnxruntime的1.13.x版本支持。

由于onnxruntime从1.12升级到1.13之后,GetOutputName()这个API变成了GetOutputNameAllocated(),坑就出现在这里,新版api的返回值是一个unique_ptr指针,这就意味着他使用一次时候就失效了,所以在循环跑模型的时候基本的第二次都报错了。目前能想到的解决方法就是将其使用std::move()转成shared_ptr,这样可以在类生命周期之内都能存在,不会出现跑第一次就挂掉的情况。

2022.12.19更新:

新增onnxruntime推理实例分割模型,支持动态推理和批次推理,避免opencv不支持动态推理的尴尬境地。

2022.11.10更新:

上次的版本更新中,抠图是在最后的mask中抠图,而如果目标多并且目标小的话,特征图中的大部分区域都是无效数据,但是却参与了特征掩码与特征图计算mask图像的过程,在最后的步骤中才抠图去掉多余的无效数据。所以新版本我做了改变,直接从特征图中抠出有效区域进行计算,可以节省一大部分的时间,特别是检测框多,并且检测框都比较小的情况下效果更明显。

2022.10.13更新:

yolov5的实例分割结果mask从原来的整张图片的mask改成检测结果框内mask,节省内存空间和计算的速度,特别是计算crop区域和分割结果大于阈值的速度,这里用整张图的话,图片越大,检测结果越多,速度下降的厉害,也就是作者讲的计算分割结果需要的资源昂贵。贴个领带的mask结果示意图就明显看出来改动了:左边是整张图的mask,可以看到大部分黑色区域都是无效区域。

yolov5 libtorch 分割 c++,渣渣的yolo踩坑记录,opencv,计算机视觉,人工智能

yolov5-seg分割模型目前已经发布了,而yolov7-mask目前由于opencv无法正确的读取问题,加上这个分支本身需要facebook的第三方库(这个库win下不好弄),所以一直没搞,opencv或者onnxruntime部署还在研究中,先开个贴占坑。

详细信息请移步:

yolov5-seg:https://github.com/ultralytics/yolov5

yolov7-mask:GitHub - WongKinYiu/yolov7 at mask

一、yolov5-seg

需要注意的是,有些人使用的是最新的torch1.12.x版本,在导出onnx的时候需要将do_constant_folding=True,这句换成false,否者dnn读取不了onnx文件,而onnxrutime可以,具体原因未知。

torch.onnx.export(
    model.cpu() if dynamic else model,  # --dynamic only compatible with cpu
    im.cpu() if dynamic else im,
    f,
    verbose=False,
    opset_version=opset,
    do_constant_folding=False,
    input_names=['images'],
    output_names=output_names,
    dynamic_axes=dynamic or None)

需要运行自己模型的小伙伴,需要跟你你自己的onnx导出情况,修改一些参数,包括,其中_segWidth和_segWidth和_segChannels可以通过https://netron.app/

	const int _netWidth = 640;   //ONNX图片输入宽度
	const int _netHeight = 640;  //ONNX图片输入高度
	const int _segWidth = 160;
	const int _segHeight = 160;
	const int _segChannels = 32;
	const int _strideSize = 3;   //stride size

其中,output0为目标检测的输出口+32通道mask的候选特征,与ouput1的mask图像proto叉乘之后得到缩小的mask图,再根据缩放情况进行缩放得到最终的mask图。

yolov5 libtorch 分割 c++,渣渣的yolo踩坑记录,opencv,计算机视觉,人工智能

最后贴一张结果图:

yolov5 libtorch 分割 c++,渣渣的yolo踩坑记录,opencv,计算机视觉,人工智能

 yolov5的实例分割模型目前已经更新,详细地址在:GitHub - UNeedCryDear/yolov5-seg-opencv-dnn-cpp: 使用opencv-dnn部署yolov5实例分割模型

测试模型可以自己导出或者用我导出的测试,建议跑自己模型的小伙伴先将demo跑通再去修改成自己的模型。

测试模型:https://download.csdn.net/download/qq_34124780/86745135文章来源地址https://www.toymoban.com/news/detail-530775.html

到了这里,关于2022.09.29更新 c++下面部署yolov5实例分割模型(六)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • yolov5目标检测多线程C++部署

    下面的代码搭建了简单的一个生产者-消费者模型,在capture()函数中进行入队操作,infer()函数中进行出队操作,为了模拟采图-推理流程,在函数中调用Sleep()函数延时。 输出结果: 现在我们把capture函数中的Sleep(1000)改成Sleep(500)来模拟生产者加速生产,再次执行程序,则输出:

    2024年02月13日
    浏览(30)
  • 【TensorRT】TensorRT 部署Yolov5模型(C++)

      该项目代码在本人GitHub代码仓库开源,本人GitHub主页为:GitHub   项目代码:   NVIDIA TensorRT™ 是用于高性能深度学习推理的 SDK,可为深度学习推理应用提供低延迟和高吞吐量。详细安装方式参考以下博客: NVIDIA TensorRT 安装 (Windows C++)   经典的一个TensorRT部署模型步骤为

    2023年04月26日
    浏览(40)
  • LibTorch实战三:C++版本YOLOV5.4的部署

    目录 一、环境配置 二、.torchscript.pt版本模型导出 三、C++版本yolov5.4实现 四、问题记录 4.1、注释 detector.h中,注释如下头文件 4.2、错误: “std”: 不明确的符号 4.3、建议常被debug版本libtorch 4.4、问题:编译成功后,运行代码,发现torch::cuda::is_available()返回false 4.5、导出模型,

    2024年02月06日
    浏览(33)
  • C++模型部署:qt+yolov5/6+onnxruntime+opencv

    作者平时主要是写 c++ 库的,界面方面了解不多,也没有发现“美”的眼镜,界面有点丑,大家多包涵。 本次介绍的项目主要是通过 cmake 构建一个 基于 c++ 语言的,以 qt 为框架的,包含 opencv 第三方库在内的,跨平台的,使用 ONNX RUNTIME 进行前向推理的 yolov5/6 演示平台。文章

    2024年02月05日
    浏览(37)
  • Opencv C++实现yolov5部署onnx模型完成目标检测

    头文件 命名空间 结构体 Net_config 里面存了三个阈值和模型地址,其中 置信度 ,顾名思义,看检测出来的物体的精准度。以测量值为中心,在一定范围内,真值出现在该范围内的几率。 endsWith()函数 判断sub是不是s的子串 anchors_640图像接收数组 根据图像大小,选择相应长度的

    2024年02月13日
    浏览(29)
  • 两百行C++代码实现yolov5车辆计数部署(通俗易懂版)

    本文是文章传统图像处理方法实现车辆计数的后续。这里用OpenCV实现了基于yolov5检测器的单向车辆计数功能,方法是撞线计数。该代码只能演示视频demo效果,一些功能未完善,离实际工程应用还有距离。 实现流程: (1)训练yolov5模型,这里就没有自己训练了,直接使用官方

    2024年02月06日
    浏览(60)
  • 2021.11.01 c++下 opencv部署yolov5-6.0版本 (四)

    ----2022.10.10 更新yolov5-seg实例分割模型: 2022.09.29更新 c++下面使用opencv部署yolov5和yolov7实例分割模型(六)_爱晚乏客游的博客-CSDN博客  -----2022.07.25 更新了下yolov7的部署,有需要的自取 2022.07.25 C++下使用opencv部署yolov7模型(五)_爱晚乏客游的博客-CSDN博客 此篇文章针对yolov5的

    2024年02月04日
    浏览(32)
  • yolov8 实例分割 onnx runtime C++部署

    如果第一次部署分割,建议先看这篇博客: YOLOv5 实例分割 用 OPenCV DNN C++ 部署_爱钓鱼的歪猴的博客-CSDN博客 目录 Pre 一、OpenCV DNN C++ 部署 二、ONNX RUNTIME C++ 部署 yolov8_seg_utils.h yolov8_seg_utils.cpp yolov8_seg_onnx.h yolov8_seg_onnx.cpp main.cpp CMakelist.txt 一定要知道,yolov8的输出与Yolov5 7.0 实例

    2024年02月11日
    浏览(63)
  • 学习记录09:快速上手简单改进yolov5目标检测网络

      这篇博客主要是简单介绍一下如何改进yolov5,但是不会讲得太深,因为我也只是运用了几个月,并没有细读每一段代码,我只是为了改而改,不会深究他的代码逻辑,python代码他确实写的很优雅,但是我不打算学习这种优雅,能毕业就行,以后又不从事python工作,也不继

    2023年04月21日
    浏览(38)
  • 在ubuntu20.04上利用tensorrt部署yolov5(C++和Python接口)

    在ubuntu20.04上利用tensorrt部署yolov5(C++和Python接口)‘下个博客是yolov7的部署’ 一、CUDA、CUDNN、TensorRT以及OpenCV安装 CUDA安装 CUDNN安装 TensorRT安装 OpenCV安装 二、YOLOv5部署 文件准备 模型文件转换 3.生成wts文件 4.生成部署引擎 5.端侧部署模型测试图片 6.视频检测 7.安卓部署 8.C+

    2024年02月02日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包