win10+cuda10.0+opencv455+opencv_contrib455实现yolov5(6.0,6.1版本)的GPU加速

本文主要是介绍win10+cuda10.0+opencv455+opencv_contrib455实现yolov5(6.0,6.1版本)的GPU加速,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

说明:本文主要实现在win10下,使用VS2015或VS2017或VS2019,使用C++控制台程序或MFC程序,结合opencv以及yolov5转化的onnx模型,实现图像的实时目标检测。记录总结一下环境部署的过程,以及部署环境过程中踩到的坑。

我的计算机配置:CPU:I5-7500,内存:8G,显卡:1050Ti(cuda10.0,cudnn7.6.5)

使用yolov5的C++代码:我在github上找到这个大佬的代码链接:

doleron · GitHub

点击下面红色框的链接下载(yolov5-opencv-cpp-python)

或者查看这个大佬的链接,里面有C++源码:

windows上yolov5 opencv dnn c++部署 cuda加速_野马AS的博客-CSDN博客

CPU版:直接使用opencv455就好了,使用VS2015或2017或2019配置好opencv环境(x64下),然后可以直接运行,release下我跑的官方yolov5s.onnx模型,大概2-3帧/s

 GPU版:

前期准备:下载好opencv455,opencv_contrib-4.5.5,CMake,cuda, cudnn,需要安装python3.7及以上版本(python在后面cmake结束后生成解决方案的时候会用到)。

参考链接:windows安装配置opencv opencv_contrib_野马AS的博客-CSDN博客_opencv_contrib

按照上面大佬的链接进行cmake就行,我第一次使用VS2019编译的(x64下),编译到最后提示我cuda10.0不适合VS2019,阿西吧。两种解决办法:1.换成cuda10.2及以上版本;2.使用VS2015或2017重新编译;注意:把先前编译失败的文件夹全部删掉,没有别的原因,主要是因为占C盘的空间太大。

在cmake,configure期间,提示我很多错误,根据上面大佬的链接在CMakeDownloadLog.txt中缺失的对应链接下载即可,大部分都需要翻墙下载,我是挨个翻墙下载的。全部都是.cache文件夹下的东西,路径为 ..../opencv455/sources/.cache。下面是我的路径截图:

.cache文件我已经上传到网盘,需要的可以下载,不过也有可能对你不适用 - -!。

链接:https://pan.baidu.com/s/1LVW1eOaJZZ9K50Guk8AfDA 
提取码:ssss

对于一些.cmake或者.prototxt结尾的文件,需要网页保存,要不然还会出错,可参考:

​​​​​​cmake编译Opencv出现ffmpeg_cmake手动下载后也无法使用问题_小MarkK的博客-CSDN博客_ffmpeg_version.cmake

好了,按照上述步骤,cmake可以全部通过了。然后点击Generate完成后点击Open Project:

我第二次选择的是VS2015(x64),第一次编译报了两个错误:第一个是已超过内部ILK大小限制,链接使用/INCREMENTAL:NO;第二个是python报错,去修改python的一行代码,修改参考链接:

opencv4.3.0 Cmake后debug模式生成不了opencv_world430d.lib_航天城拖地的的博客-CSDN博客_opencv world生成失败 python报错在OpenCV.sln解决方案下找到bindings/外部依赖项/pyconfig.h,修改第274行代码,修改后结果为:(这也可能是我个人的情况)

至此,我编译全部通过了,然后新建控制台程序,配置新编译好的opencv455(其实与正常配置opencv455方式一样,只不过我们现在用的是编译出来的 opencv_world455.lib或者opencv_world455d.lib,具体可参考上面第二条链接也行的),然后跑C++代码,我一开始跑的时候,巨卡,比CPU版还卡,经过一翻摸索,发现是这个地方有问题,如图下方的红线部分,原代码是DNN_TARGET_CUDA_FP16,我估计1050TI用不了这个,所以换成了DNN_TARGET_CUDA,然后运行立刻就跑通了,大概14帧/s。

 使用MFC开两个线程同时跑的如下图,开两个模型,显存大概占了500MB:

 ok,现在我需要跑我自己训练的模型进行检测,按照官方教程,把训练好的.pt转成.onnx。然后修改classes.txt中的类别,接着使用根据Netron,查看你自己的模型的输出:比如我自己训练的模型:

 点击output,右边最后一行会弹出数据:[1,6300,16],我训练的是11个类别,这个时候需要把C++代码中的一些参数修改掉,在detect()函数中:

 同时也要修改自己训练模型的分辨率,置信度修不修改看需要:

这样,就可以跑自己的模型了。我跑的分辨率320的 yolov5m的onnx模型,大概80MB,跑到34帧/s,我个人感觉还不错,说到底,我不太想裁剪yolov4的网络,哈哈。 

另外,经过上面的操作,我在我自己电脑上运行yolov5已经可行,我尝试换几台机器运行yolov5是否可行,答案是可行的,也无需在新的电脑重新cmake;前提是:那台电脑的显卡驱动版本号大于等于你cmake时使用的电脑(简单的方法就是用最新的驱动就好了),并且在新的电脑上你只能使用你cmake时的cuda版本对应的编译文件(比如我的版本是cuda10.0),如果想换成大于cuda10.0,需要重新安装,重新cmake才能使用。举个我尝试的例子,我现在需要在另外一台电脑使用yolov5,另外一台电脑的配置是CPU:i5-9400,内存16G,1050Ti显卡,cuda是11.0,cudnn是对应11.0的具体我没仔细查看(这些配置都是曾经几年前已经安装好的);我的做法是:把我在我自己电脑上已经cmake编译好的(我的是在bulid下)文件夹直接拷贝另一台电脑上去,如图:

我这次拷贝到了另外一台电脑的D盘,同样按照配置opencv的方法配置好VS2015的控制台或MFC程序。然后调试运行提示我少很多cuda10.0的东西,然后我就按照提示少的dll文件,从我的电脑上一个一个全部复制过去(其实主要就是缺少cuda10.0/bin/下的dll文件),直接复制到控制台或MFC程序下就行(比如我复制到了和.cpp文件放在一起,对于需要使用debug和release下.exe文件的,当然需要和.exe文件放在一起了),直到不再提示,然后运行程序,顺利跑通。

####

这篇关于win10+cuda10.0+opencv455+opencv_contrib455实现yolov5(6.0,6.1版本)的GPU加速的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/289043

相关文章

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略 1. 特权模式限制2. 宿主机资源隔离3. 用户和组管理4. 权限提升控制5. SELinux配置 💖The Begin💖点点关注,收藏不迷路💖 Kubernetes的PodSecurityPolicy(PSP)是一个关键的安全特性,它在Pod创建之前实施安全策略,确保P

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

AI Toolkit + H100 GPU,一小时内微调最新热门文生图模型 FLUX

上个月,FLUX 席卷了互联网,这并非没有原因。他们声称优于 DALLE 3、Ideogram 和 Stable Diffusion 3 等模型,而这一点已被证明是有依据的。随着越来越多的流行图像生成工具(如 Stable Diffusion Web UI Forge 和 ComyUI)开始支持这些模型,FLUX 在 Stable Diffusion 领域的扩展将会持续下去。 自 FLU