目录
精彩预告:
- 从源码编译到程序测试,详细介绍了DNN模块使用CUDA加速的具体细节;
- 本文所附链接均可一步到位获得实用资源。
部分配图来源于网络,请仔细核对,根据自己的情况修改。
1. 准备
1.1. 系统及硬件确认
此处所列仅代表测试机信息,请根据实际对照进行。
系统:Windows 10 专业版 64位
显卡型号:GTX 1660Ti
1.2. 资源下载
Tips:请根据显卡型号确定需要安装的cuda版本,根据cuda版本确认cudnn版本。
(1) 编译环境:VS2019 Community(网址:https://visualstudio.microsoft.com/zh-hans/)
(2) 编译器:CMake(最新版)(网址:https://cmake.org/)
(3) opencv源码和安装包:opencv4.3.0(网址:https://opencv.org/releases/)
(4) opencv-contrib:opencv_contrib4.3.0(网址:https://github.com/opencv/opencv_contrib/releases/tag/4.3.0)
(5) cuda:cuda 10.0.130(网址:https://developer.nvidia.com/cuda-toolkit-archive)
(6) cudnn:cudnn-10.0-windows10-x64-v7.6.4.38(网址:https://developer.nvidia.com/rdp/cudnn-archive)
1.3. 安装
以下参考安装步骤仅作为教程使用,请以“1.2资源下载”版本为准。
1.3.1. 安装VS2019
请参考:vs2019安装及简单处理(详细的很)(网址:https://blog.csdn.net/YSJ367635984/article/details/104648941/)
1.3.2. 安装CMake
请参考:Win10下安装CMake3.14.2以及CMake使用教程(网址:https://blog.csdn.net/qq_41895190/article/details/89299988)
1.3.3. 安装cuda
安装过程中会有“检查系统兼容性”,所以安装前要注意显卡与cuda版本要匹配。
请参考:Win10安装CUDA10和cuDNN(网址:https://blog.csdn.net/qq_37296487/article/details/83028394)
2. 编译OenCV
2.1. 整理文件目录
将“opencv_contrib-4.3.0”源码拷贝到“opencv-4.3.0”文件夹内,创建“OpenCV430_Build_2019"用于存放编译文件。
2.2. 设置CMake
打开CMake,选择源码路径,以及生成路径,选择对应VS版本。开始第一次Configue。
2.3. 修改下载路径
第一次configure完成之后,因一些第三方文件网络限制,无法下载,会出现提示。
此时,应该根据提示信息修改下载路径。
请参考:部分文件联网下载失败导致opencv过不了cmake解决方法(网址:https://blog.csdn.net/weixin_42386056/article/details/105576333)
2.4. 修改配置
中间需要多次点击”configure“。
(1) BUILD_opencv_world
勾选 BUILD_opencv_world:此项的目的是生成一个dll文件,比如:opencv_world430d.dll。
(2) OPENCV_DNN_CUDA
勾选OPENCV_DNN_CUDA。
(3) OPENCV_ENABLE_NOFREE
勾选 OPENCV_ENABLE_NOFREE:此项目的是编译contrib模块。
(4) OPENCV_EXTRA_MODULES_PATH
设置OPENCV_EXTRA_MODULES_PATH:设置contrib模块的目录:(注意一定到modules这个目录)。
(5) WITH_CUDA
勾选WITH_CUDA。
(6) CUDA_ARCH_BIN
将该项中版本小于5.3的都去掉。如果查不到此项,请configure一次。
(7) WITH_CUDNN
勾选 WITH_CUDNN。如果查不到此项,请configure一次。
(8) CUDA_FAST_MATH
勾选CUDA_FAST_MATH。
(9) python相关组件
如果不使用python就将如下python对应项的”√“去掉。(因版本不同,组件名称不一定一样,请根据实际选择)
(10) 其他
其他的选项就根据自己喜好设定,比如test模块等。
2.5. 生成及信息核对
以上经过多次点击”Configure“,确定没有任何错误提示信息。
等待Configure完成之后,查看是否检测到了CUDA和cuDNN,都出现YES之后,说明没有问题。如果没有检测到的话,需要确认是否CUDA和cuDNN版本正确,否则后面的编译将不会编译CUDA模块,白白浪费时间。确认之后,点击Generate。
2.6. 工程编译
2.6.1. ALL_BUILD
点击“Open Project”打开工程,在Release模式下右键点击ALL_BUILD,生成,时间较长(戴尔G3 i7处理器耗时约100分钟)。
2.6.2 INSTALL
生成之后,右击INSTALL->仅用于项目->仅生成INSTALL。
到这边就编译好了,Debug版本同理
3. 测试
3.1. 配置
将“OpenCV430_Build_2019”文件夹拷贝到一个地方。
注意:拷贝这一堆是不是觉得很大,其实只需要将“install”里面的内容拷贝、配置即可。
(1) 添加环境变量
(2) 在测试代码中配置包含目录、库目录
(3) 添加附加依赖项,opencv_world430d.lib。
(4) 拷贝opencv_videoio_ffmpeg430_64.dll和opencv_world430d.dll到“C:\Windows\System32”下。
3.2. 识别
3.2.1. 程序
以Mask R-CNN为例,对GPU加速运算效果作个对比。
只使用cpu运算对应的程序为绿框内,使用GPU加速对应的程序为红框内。
3.2.2. 识别结果对比
只使用cpu计算的耗时为10091ms(约10s)。
使用GPU加速的耗时为799ms(约0.8s)。
同样条件下,GPU加速运算耗时仅是cpu运算耗时的7.92%,满足大部分实时性要求一般的场合。