• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

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

武飞扬头像
sinat_27762903
帮助1

说明:本文主要实现在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 源码:

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结束后生成解决方案的时候会用到)。

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

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

学新通

学新通

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

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

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

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

学新通

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

学新通

至此,我编译全部通过了,然后新建控制台程序,配置新编译好的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文件放在一起了),直到不再提示,然后运行程序,顺利跑通。

####

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhggebcc
系列文章
更多 icon
同类精品
更多 icon
继续加载