当前位置: 代码迷 >> 综合 >> OpenCV4.4版本 DNN模块使用CUDA加速教程 VS2017 Window10
  详细解决方案

OpenCV4.4版本 DNN模块使用CUDA加速教程 VS2017 Window10

热度:43   发布时间:2024-02-02 07:54:52.0

目录

    • CUDA
    • CUDNN
    • CMake编译
    • 运行测试
    • 总结

CUDA

根据自己的GPU 选择合适的版本,我的是GTX1650,选择CUDA10.1版本,按照默认地址安装就好,安装完之后看是否有环境变量。没有的话自己加上。

环境变量
在这里插入图片描述

CUDNN

在英伟达官网能查到CUDA10.1版本对应的cudnn版本为7.6.4,由于国内对英伟达官网不友好,我已将cudnn7.6.4上传
打开下载好的cuDNN,如下图
在这里插入图片描述

将cuDNN中bin、include、lib文件夹中的文件放入对应CUDA路径下的文件夹中
在这里插入图片描述

CMake编译

打开CMake,选择源码路径,以及生成路径,选择对应VS版本。开始第一次Configue。
(由于是按照这个博主一步步来的,所以这里直接贴他的图了,改一下版本到OpenCV4.4就行了)
在这里插入图片描述
其中会下载一些第三方文件,可以自行下载,否则速度较慢。第一次configure完成之后,勾选BUILD_opencv_world.
在这里插入图片描述

以及,勾选OPENCV_DNN_CUDA,选择解压好的opencv_contrib中modules路径添加进来。
在这里插入图片描述
勾选WITH_CUDA。
在这里插入图片描述
进行第二次Configure,Configure完成之后可能会报错,此时不管他,根据GPU算力表选择合适的CUDA_ARCH_BIN值,如我的是GTX1650,则将CUDA_ARCH_BIN其余值删除,只留下7.5。然后勾选CUDA_FAST_MATH,点击Configure。
在这里插入图片描述
在这里插入图片描述
等待Configure完成之后,查看是否检测到了CUDA和cuDNN,都出现YES之后,说明没有问题。这边是一个坑,需要注意,如果没有检测到的话,需要确认是否CUDA和cuDNN版本正确,否则后面的编译将不会编译CUDA模块,白白浪费时间。确认之后,点击Generate。
在这里插入图片描述
点击Open Project打开工程,在Release模式下右键点击ALL_BUILD,生成,时间较长
在这里插入图片描述
生成之后,右击INSTALL->仅用于项目->仅生成INSTALL
在这里插入图片描述
在这里插入图片描述

到这边就编译好了,Debug版本同理

运行测试

添加环境变量
在这里插入图片描述
由于我是在Qt上直接测试,所以pro文件添加包含库

win32:CONFIG(release, debug|release): LIBS += -LD:/Software/opencv4.4/opencv_gpu/install/x64/vc15/lib/ -lopencv_world440
else:win32:CONFIG(debug, debug|release): LIBS += -LD:/Software/opencv4.4/opencv_gpu/install/x64/vc15/lib/ -lopencv_world440dINCLUDEPATH += D:/Software/opencv4.4/opencv_gpu/install/include
DEPENDPATH += D:/Software/opencv4.4/opencv_gpu/install/include

由于是训练的自己的模型进行测试,代码就不贴出了,模型为yolov3tiny
测试结果如图
在这里插入图片描述
CPU版本的推理时间为30ms,使用cudnn模块加速以后速度大概为15ms,使用海康网络摄像头能够做到实时检测

总结

opencv和opencv_contrib版本要对应

在下载部分第三方库时也要找好对应版本。

勾选WITH_CUDA 、OPENCV_DNN_CUDA。

一定要查看cuDNN版本是否正确,否则几个小时的编译将是浪费时间。

最好使用VS2017版本,VS2015测试出现异常,编译失败。