admin管理员组

文章数量:1591205

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

目录

    • step1 运行环境和前期准备
    • step2 编译OpenCV DNN模块(WITH CUDA)
    • step 3 测试
      • (1)c++
      • (2)python

step1 运行环境和前期准备

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

4、OpenCV 4.2.0、OpenCV Contrib 4.2.0
contrib下载地址:
https://github/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/download/

step2 编译OpenCV DNN模块(WITH CUDA)

1、打开cmake,设置OpenCV源码目录、编译后输出目录、第一次点击configure,设置编译平台:

2、开始第一次configure,中间会下载一些缓存文件,如果下载失败,可以至build目录下CMakeDownloadLog.txt文件中的链接自行下载后放入OpenCV源码目录下的.cache文件夹中,也可至此直接下载后放入:https://download.csdn/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/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/download/stjuliet/12688720



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

step 3 测试

程序均参考:https://blog.csdn/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之间。

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

Juliet 于 2020.8.5

本文标签: 模块系统CUDAOpenCVDNNWindows