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)

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

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

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

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

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

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。下面是我的路径截图:

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

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

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

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

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

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

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

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

我第二次选择的是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行代码,修改后结果为:(这也可能是我个人的情况)

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

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

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

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

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

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

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

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

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+cuda10.0+opencv455+opencv_contrib455实现yolov5(6.0,6.1版本)的GPU加速

这样,就可以跑自己的模型了。我跑的分辨率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下)文件夹直接拷贝另一台电脑上去,如图:

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

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

Original: https://blog.csdn.net/sinat_27762903/article/details/124590936
Author: sinat_27762903
Title: win10+cuda10.0+opencv455+opencv_contrib455实现yolov5(6.0,6.1版本)的GPU加速

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/702902/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球