Windows系统下配置OpenCV_DNN模块使用CUDA加速(Windows10、VS2017、CUDA10.1、cuDNN7.6.5、OpenCV4.2.0)

OpenCV DNN模块可加载深度学习模型用于目标检测等任务,OpenCV4.2.0之后支持模型推理使用CUDA加速,但是需要手动将CUDA模块编译进OpenCV. 本文记录了编译的全部过程,最终可用于c++/python下的opencv_dnn模块加速。

step1 运行环境和前期准备

1、Windows 10 系统
2、Visual Studio 2017 专业版(先安装
3、CUDA 10.1、cuDNN 7.6.5(后安装
cuda下载地址:
https://developer.nvidia.com/cuda-10.1-download-archive-base
cudnn下载地址(需要注册登录):
https://developer.nvidia.com/cudnn
将解压后的cuDNN压缩包中的bin、include、lib文件夹复制到CUDA安装路径下:
在这里插入图片描述

4、OpenCV 4.2.0、OpenCV Contrib 4.2.0
contrib下载地址:
https://github.com/opencv/opencv_contrib/releases
5、opencv-python 4.2系列,opencv-contrib-python 4.2系列
6、Anaconda 5.3.1 (python 3.7)
7、Cmake 3.13
https://cmake.org/download/

step2 编译OpenCV DNN模块(WITH CUDA)

1、打开cmake,设置OpenCV源码目录、编译后输出目录、第一次点击configure,设置编译平台:
在这里插入图片描述
2、开始第一次configure,中间会下载一些缓存文件,如果下载失败,可以至build目录下CMakeDownloadLog.txt文件中的链接自行下载后放入OpenCV源码目录下的.cache文件夹中,也可至此直接下载后放入:https://download.csdn.net/download/stjuliet/12688717
在这里插入图片描述

3、勾选BUILD_opencv_world、WITH_CUDA、OPENCV_DNN_CUDA、设置OPENCV_EXTRA_MODULES_PATH,再次点击configure:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
4、configure之后会报错,找到CUDA_ARCH_BIN,根据https://developer.nvidia.com/cuda-gpus此网站找到自己显卡的算力填入(我的显卡是1080ti,算力为6.1),并且勾选CUDA_FAST_MATH,将OpenCV_GENERATE_SETUPVARS的勾去掉,再次点击configure:
在这里插入图片描述
5、Configure done后,需要确认以下几个信息:
(1)OpenCV中必须包含cuda、python3
(2)必须要检测到正确版本的CUDA和cuDNN
在这里插入图片描述
在这里插入图片描述
6、步骤5的条件都满足后,可以点击Generate,generating done之后,点击Open Project,设置编译平台(Release/Debug均可)、右键ALL_BUILD-生成,生成时间较长,需要1.5小时左右:
在这里插入图片描述
7、经过一段时间的等待,共生成成功122个:在这里插入图片描述
8、生成成功后,右键INSTALL-仅用于项目-仅生成INSTALL,INSTALL生成成功后,会在build目录下看到一个install文件夹,结构和OpenCV很类似,可在此直接下载:https://download.csdn.net/download/stjuliet/12688720

在这里插入图片描述
在这里插入图片描述
至此,将CUDA编译至OpenCV DNN模块已全部成功,接下去分别以c++和python平台下的opencv dnn进行测试。

step 3 测试

程序均参考:https://blog.csdn.net/qq_27158179/article/details/81915740,需要将net类进行两处修改:

c++:
	net.setPreferableBackend(DNN_BACKEND_CUDA);
	net.setPreferableTarget(DNN_TARGET_CUDA);

python:
	net.setPreferableBackend(cv.dnn.DNN_BACKEND_CUDA)
	net.setPreferableTarget(cv.dnn.DNN_TARGET_CUDA)

(1)c++

使用cuda加速后平均帧率在35–40之间,使用之前平均帧率在3–5之间。
在这里插入图片描述

(2)python

使用cuda加速后平均帧率在13–15之间,使用之前平均帧率在3–4之间。
在这里插入图片描述

扫描二维码关注公众号,回复: 11538991 查看本文章

参考文章:
https://blog.csdn.net/hitpisces/article/details/104266030
https://blog.csdn.net/qq_43019451/article/details/105894552
https://blog.csdn.net/weixin_39928773/article/details/103709184
https://blog.csdn.net/wanggao_1990/article/details/103779760
https://zhuanlan.zhihu.com/p/100818557

Juliet 于 2020.8.5

猜你喜欢

转载自blog.csdn.net/stjuliet/article/details/107812875