文章目录
- 前言
- 一、编译环境
- 二、前期准备
- 三、CMake编译
- 四、VS编译OpenCV.sln
- 五、问题
前言
由于项目需要用上CUDA加速的OpenCV,编译时也踩了不少坑,所以这里记录一下。
一、编译环境
我的编译环境是:
Win10 + RTX4050 + CUDA-12.0 + CUDNN 8.9.6.50 + VS2019 + CMake-3.28.0 + OpenCV-4.8.0 + OpenCV_Contrib-4.8.0
额外注意的是:CUDA_ARCH_BIN=7.5;8.6;8.9;9.0
二、前期准备
- 如果你的编译环境跟我一模一样的话,你可以直接下载百度网盘,提取码:1215,里面的
include/lib/bin文件夹
直接拷贝出去用就可以了。 - 如果有不同之处,一定要重新编译,不然就会报错:
error: (-216: No CUDA support) OpenCV was not build to work with the selected device.
- 上面的链接下载下来后,里面的source包含了
OpenCV-4.8.0 + OpenCV_Contrib-4.8.0的zip文件夹
,就不用直接去官网下载了。 - 如果重新编译,记得把
source/.cache
文件夹,放到解压后的 OpenCV 4.8.0文件夹下。
三、CMake编译
接下来,就照着我的截图进行选择。
-
先按下图选择,点击Configure。
-
完成之后,会一片红
-
去除Python相关;
-
去除Java相关;
-
去除JS相关;
-
去除tests相关;
-
勾选CUDA相关
-
将 OpenCV-Contrib 加入到项目中
-
勾选 build_opencv_world
-
去除 OpenCV_ENABLE_NONFREE
-
勾选 ENABLE_FAST_MATH
-
再次点击Configure
-
完成之后,选择CUDA_ARCH_BIN并勾选 CUDA_FAST_MATH
-
再次点击Configure;
-
如果这次完成之后,没有红色,那么就直接Generate,done就结束了。
四、VS编译OpenCV.sln
- 打开
build/OpenCV.sln
- 选择
Release/x64
,右键ALL_BUILD - >生成
即可。
- 如果全部成功,那么再右键
INSTALL -> 生成
即可。这个会帮你整理生成的include/lib/bin文件夹
。
五、问题
.cache文件夹
一定要提前放到 OpenCV 4.8.0 文件夹下,不然你会在CMake的时候收获一堆Warning,就是因为下载这堆东西失败。- CuDNN下载之后,记得放到CUDA文件夹下,然后添加相应的环境变量。
- 我在使用上面的版本时,发现,对于读取同一个model进行推理,Release/cuda下GPU的利用率是30%,但是Debug/cuda的利用率只有5%左右。但是你如果说GPU没用上,其速度又比单纯使用CPU快一倍。目前还没弄懂。
- 另外,我在debug/cpu下的内存大概是200m左右,但是debug/gpu跑到了5.7G。我也没弄懂这个。