OpenCV DNN模块可加载深度学习模型用于目标检测等任务,OpenCV4.2.0以后支持模型推理使用CUDA加速,可是须要手动将CUDA模块编译进OpenCV. 本文记录了编译的所有过程,最终可用于c++/python下的opencv_dnn模块加速。
python
step1 运行环境和前期准备
一、Windows 10 系统
二、Visual Studio 2017 专业版(先安装)
三、CUDA 10.一、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安装路径下:
c++
四、OpenCV 4.2.0、OpenCV Contrib 4.2.0
contrib下载地址:
https://github.com/opencv/opencv_contrib/releases
五、opencv-python 4.2系列,opencv-contrib-python 4.2系列
六、Anaconda 5.3.1 (python 3.7)
七、Cmake 3.13
https://cmake.org/download/
git
step2 编译OpenCV DNN模块(WITH CUDA)
一、打开cmake,设置OpenCV源码目录、编译后输出目录、第一次点击configure,设置编译平台:
二、开始第一次configure,中间会下载一些缓存文件,若是下载失败,能够至build目录下CMakeDownloadLog.txt文件中的连接自行下载后放入OpenCV源码目录下的.cache文件夹中,也可至此直接下载后放入:https://download.csdn.net/download/stjuliet/12688717
github
三、勾选BUILD_opencv_world、WITH_CUDA、OPENCV_DNN_CUDA、设置OPENCV_EXTRA_MODULES_PATH,再次点击configure:
缓存
四、configure以后会报错,找到CUDA_ARCH_BIN,根据https://developer.nvidia.com/cuda-gpus此网站找到本身显卡的算力填入(个人显卡是1080ti,算力为6.1),而且勾选CUDA_FAST_MATH,将OpenCV_GENERATE_SETUPVARS的勾去掉,再次点击configure:
五、Configure done后,须要确认如下几个信息:
(1)OpenCV中必须包含cuda、python3
(2)必需要检测到正确版本的CUDA和cuDNN
六、步骤5的条件都知足后,能够点击Generate,generating done以后,点击Open Project,设置编译平台(Release/Debug都可)、右键ALL_BUILD-生成,生成时间较长,须要1.5小时左右:
七、通过一段时间的等待,共生成成功122个:
八、生成成功后,右键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之间。
ui
(2)python
使用cuda加速后平均帧率在13–15之间,使用以前平均帧率在3–4之间。
spa
参考文章:
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