最近,opencv4.5.0调用yolov4进行目标检测,需要cuda加速,按照博客上说的编译了带cuda的版本。以下是几个需要注意的问题:
一. 编译注意事项
CUDA_FAST_MATH要选中
OPENCV_GENERATE_SETUPVARS不要选
OPENCV_ENABLE_NONFREE要选中,这是扩展包
CUDA_ARCH_BIN只需留下适合自己电脑的算力,比如TITAN RTX 和RTX2080Ti都是7.5
BUILD_opencv_world要选中
BUILD_opencv_face不要选,下载不了
OPENCV_EXTRA_MODULES_PATH选opencv_contrib下的modules
TESTS的都不要选
CUDA和Cudnn的版本要看清楚
OPENCV_PYTHON3_VERSION和OPENCV_FORCE_PYTHON_LIBS要选中,才可以使用python的cuda加速
使用opencv-python时,环境要设置成编译时使用的,才能进行cuda加速
二.推理注意事项
1.在模型读入后,设置GPU加速
//模型读入
dnn::Net net = readNetFromDarknet(cfg, weight);
//使用gpu加速
net.setPreferableBackend(DNN_BACKEND_CUDA);
net.setPreferableTarget(DNN_TARGET_CUDA);
2.加入cuda后推理图片反而更慢,还会出现以下警告:
[ WARN:0] global d:\opencv450\opencv-4.5.0\modules\dnn\src\cuda4dnn/init.hpp (42) cv::dnn::cuda4dnn::checkVersions CUDART version 10000 reported by cuDNN 7605 does not match with the version reported by CUDART 10010
意思是 cudart_version != cudnn_cudart_version
我试了很久,编译了一次又一次,cuda版本也从10.0到10.1到10.2都试了个遍,还是有这种情况。后面写了个循环,发现原来是第一张图片很慢,用了1569毫秒,后面都很快,11毫秒左右,比CPU的95毫秒左右快多了(TITAN RTX -> i9-9900K)。
欢迎下载我在win10下编译好的opencv4.5.0版本,算力适配7.5, cuda10.1, cudnn7.6.5
https://download.csdn.net/download/qq_36563273/14240311