2021.11.01 c++下 opencv部署yolov5-6.0版本 (四)

这篇具有很好参考价值的文章主要介绍了2021.11.01 c++下 opencv部署yolov5-6.0版本 (四)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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的6.0版本,4.0和5.0版本请看前面三篇的修改。

2022.10.13 更新

有些人使用的是最新的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)

2022.02.18更新:

最新版的代码在windows下面导出onnx可能会失败,windows10下面请保证pandas>=1.4.0,或者注释掉export.py中的import pandas as pd(pandas的功能暂时未在export.py使用,win10下直接import版本低于1.4.0其他都不干,导出onnx就会失败,原因未知)

2021.12.6更新,增加摄像头和视频检测,需要将drawPred()中的inshow和waitkey注释掉。

	VideoCapture cap(0); //视频检测将0改成视频地址
	while (true) {
		Mat fram;
		cap >> fram;
		vector<Output> result;
		if (test.Detect(fram, net, result))
			test.drawPred(fram, result, color);
		imshow("detect output", fram);
		if (waitKey(2)==27) break; //esc退出
	}
	cap.release();
	destroyAllWindows();

2021.11.04更新,对于图片长宽比过大导致目标检测失败修改,本来想偷懒直接放个图片的。

2021.11.01 c++下 opencv部署yolov5-6.0版本 (四)

此篇除了第4点修改检测的代码修改,其他代码和第三篇中的一样!

目录

0、写在最前:

一、yolov5 6.0版本新增对opencv的支持

二、导出onnx模型

三、查看网络结构。

四、修改检测代码


一、yolov5 6.0版本新增对opencv的支持

最新的项目地址可以看下https://github.com/ultralytics/yolov5

二、导出onnx模型

导出onnx的时候需要修改参数,将opset默认值改成12,原来的默认值为13,我测试了opencv4.5.0和4.5.2两个版本,opencv都报错了,将之改成12即可读取。

在export.py中修改下参数(用命令行导出的请加上--opset 12,请注意不要带上dynamic参数,opencv对动态输入支持做的不好,应该是需要opencv4.5.3以上的版本,并且需要TBB支持才行来着):

2021.11.01 c++下 opencv部署yolov5-6.0版本 (四)

三、查看网络结构。

使用netron(www.netron.app)查看下修改onnx版本之后的网络模型,可以看到现在模型有4个输出1,output是另外三个输出的总输出,而另外三个就是之前模型的三个输出口(P3,P4,P5)。所以我们只需要遍历output这个输出口就可以(另外三个输出口是可以单独遍历获取数据,如果你只需要小目标,就可以只遍历P3输出口,中目标为P4输出口,而P5位大目标,但是并不建议这么做就是了,因为大中小并没有具体的区分,只是一个概念性的,实际上小目标也有可能在P4口被检测出来,而且概率比P3口还高也是有可能的。所以如果只需要检测小目标,还不如直接修改网络只要P3出口来的好一些)。

2021.11.01 c++下 opencv部署yolov5-6.0版本 (四)

 而输出口的形状由之前的[25200,85]变成了[1,25200,85],因为是一个batch size,所以在c++下面使用指针遍历的话可以不考虑这多出来的一个维度(c++下Mat.data指针会将三维和二维按行优先展开成一维指针,所以影响不大)。

四、修改检测代码

按照我前面三篇修改过的方法来说,应为新版本不需要再修改原来的common.py和yolo.py的代码,所以需要看下原来在yolo.py中被修改的部分做了些什么,然后需要对c++源码进行一些修改。

之前在models/yolo.py中的Detect类中的修改,会将红色框的部分注释掉,所以在c++的代码中这部分需要我们自己去计算,而现在不需要修改了,就要将这部分自己的计算去掉。

2021.11.01 c++下 opencv部署yolov5-6.0版本 (四)

由于python的模型已经做了sigmoid的转换了,所以c++下面这部分去掉就可以了。按下面的位置修改下,原来的代码就可以使用了(注释部分的代码是原来的代码)。另外的代码请看

2021.09.02更新说明 c++下使用opencv部署yolov5模型 (三)_爱晚乏客游的博客-CSDN博客

2021.11.01 c++下 opencv部署yolov5-6.0版本 (四)

 测试下程序结果:

2021.11.01 c++下 opencv部署yolov5-6.0版本 (四)

完美运行!

总的来说,6.0版本完美的解决了opencv下读取onnx模型的痛点,不需要繁琐的去修改源码,将无法读取的网络层替换掉,可以很轻松的部署了。

贴个github链接吧,聊胜于无,想偷懒的同学可以直接下载文件了,不需要从上一篇复制了

https://github.com/UNeedCryDear/yolov5-opencv-dnn-cpphttps://github.com/UNeedCryDear/yolov5-opencv-dnn-cpp

onnx测试模型:yolov5s.onnx-深度学习文档类资源-CSDN下载

目前是免费的,有需要收费了说下我重新改下文章来源地址https://www.toymoban.com/news/detail-441635.html

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

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

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

相关文章

  • YOLOv5 实例分割 用 OPenCV DNN C++ 部署

    如果之前从没接触过实例分割,建议先了解一下实例分割的输出是什么。 实例分割两个关键输出是:mask系数、mask原型 本文参考自该项目(这么优秀的代码当然要给star!):GitHub - UNeedCryDear/yolov5-seg-opencv-onnxruntime-cpp: yolov5 segmentation with onnxruntime and opencv 目录 Pre: 一、代码总结

    2024年02月12日
    浏览(35)
  • 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日
    浏览(46)
  • C++模型部署:qt+yolov5/6+onnxruntime+opencv

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

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

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

    2024年02月13日
    浏览(41)
  • yolov5分割+检测c++ qt 中部署,以opencv方式(详细代码(全)+复制可用)

    1:版本说明: qt 5.12.10 opencv 4.5.3 (yolov5模型部署要求opencv4.5.0) 2:检测的代码 yolo.h yolo.cpp 检测的调用代码测试案例 这段调用的例子,只要把frame 改成你们自己的图片即可 4:分割的主要代码 YoloSeg.h YoloSeg.cpp yolov5_seg_utils.h  yolov5_seg_utils.cpp 分割的调用代码测试案例  分割的

    2024年02月03日
    浏览(43)
  • 36、RK3399Pro 环境搭建和Yolov5 c++调用opencv进行RKNN模型部署和使用

    基本思想:记录rk3399 pro配置环境和c++ npu开发记录,主要想搞一份c++代码和其它图像算法结合一下,好进行部署,淘宝链接见附录  需要的python3.7对应的aarch64的whl包:包含opencv-whl 、h5py-whl包: 链接: https://pan.baidu.com/s/1cvCAmHBa_4KgEjrcFIYnig 提取码: 5ui4 链接: https://pan.baidu.com/s/1hrc

    2024年02月07日
    浏览(42)
  • yolov5 opencv dnn部署 github代码

    源码地址 yolov5官网还提供的dnn、tensorrt推理链接 本人使用的opencv c++ github代码,代码作者非本人,也是上面作者推荐的链接之一 实现推理源码中作者的yolov5s.onnx 推理条件 实现推理code中作者的yolov5s.onnx windows 10 Visual Studio 2019 Nvidia GeForce GTX 1070 opencv 4.5.5、opencv4.7.0 (注意 4.7.0代码

    2024年01月23日
    浏览(55)
  • yolov5 opencv dnn部署自己的模型

    github开源代码地址 yolov5官网还提供的dnn、tensorrt推理链接 本人使用的opencv c++ github代码,代码作者非本人,也是上面作者推荐的链接之一 如果想要尝试直接运行源码中的yolo.cpp文件和yolov5s.pt推理sample.mp4,请参考这个链接的介绍 使用github源码结合自己导出的onnx模型推理自己的

    2024年01月23日
    浏览(47)
  • yolov5-6.0项目部署+自用Pytorch模型转换rknn模型并在RK3568 linux(Debian)平台上使用qt部署使用NPU推理加速摄像头目标识别详细新手教程

    1 我们打开yolov的官网,Tags选择6.0版本 2. 下载该压缩包并解压到工程目录下 3. 我们这里使用pycharm,专门针对python的IDE,用起来非常方便,下载方式就是官网直接下载,用的是社区版 4. 我们需要安装环境,这里我推荐安装Anaconda在电脑上,这是一个非常方便的包管理工具,可

    2024年02月05日
    浏览(68)
  • [BPU部署教程] 教你搞定YOLOV5部署 (版本: 6.2)

    最近一些人问我怎么在BPU上部署yolov5,因为之前的博客[BPU部署教程] 一文带你轻松走出模型部署新手村介绍的网络都是基于Caffe的,自己的网络都是基于pytorch的,所以遇到了很多坑。鉴于这些需求,我自己研究了下部署的方式,把自己的过程整理下来供各位参考(看我这么好

    2024年02月15日
    浏览(75)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包