本人以前编译opencv4.2版本的DNN模块支持CUDA加速成功了,后来时隔一年,编译opencv4.4版本DNN模块使用CUDA加速一直编译失败,那叫个酸爽,如果看到此博客的你也在为编译opencv4.4版本的DNN模块使用CUDA加速而痛苦时,静下心来,按照我提供的思路一步一步走下去,你会成功的。
CUDA安装与配置
根据自己的GPU选择合适的CUDA版本,我的是GeForce GTX 1080,选择CUDA10.1版本,按照默认地址安装就好,安装完之后看是否有环境变量。没有的话自己加上
CUDNN
cudnn一定要7.5版本以上,否则CMake将无法识别出cudnn路径。我使用的版本是cudnn7.6.5,将cudnn中bin、include、lib文件夹中的文件放入对应的cuda路径(我的路径为“C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA”)下的文件夹中
CMake编译
打开CMake(我的版本是CMake 3.18.4),选择源码路径,以及生成路径吗,选择对应的VS版本,本人编译成功了VS2015和VS2017两个版本。
开始第一次Configue
其中会下载一些第三方文件,可以自行下载,否则速度较慢。该版本的第三方文件我这边费尽九牛二虎之力下载完了,为opencv/sources/.cache/ffmpeg和ippicv。
第一次configure完成之后,勾选BUILD_opencv_world以及勾选OPENCV_DNN_CUDA,
选择解压好的opencv_contrib中的modules路径添加进来。勾选WITH_CUDA
第二次configure,cinfigure完成之后可能会报错,此时不管它,根据GPU算力表选择合适的CUDA_ARCH_BIN值,如我的是GeForce GTX 1080,则将CUDA_ARCH_BIN其余值删除,只留下6.1。
然后勾选CUDA_FAST_MATCH,点击configure。
等待configure完成之后,查看是否检测到了CUDA和cudnn,都出现YES之后,说明没有问题。这里有至少两个坑:
(1)如果没有检测到的话,需要确认是否CUDA和cudnn版本正确,否则后面编译将不会编译CUDA模块,白白浪费时间
(2)即便出现了YES后续也有可能编译不出opencv_world.lib,导致整个编译失败,本人在这块折腾了许久,后来发现是因为有几个模型文件没有下载成功,影响了整个编译。为opencv/sources/.cache/xfeature2d下的boostdesc和vgg的模型文件。
以上问题都解决后,点击generate
generate done之后点击Open Project打开工程,在Release模式下右键点击ALL_BUILD,生成时间较长
生成之后,点击INSTALL->仅用于项目->仅生成INSTALL,至此编译完成。