来源丨https://learnopencv.com/how-to-use-opencv-dnn-module-with-nvidia-gpu-on-windows
翻译整理丨OpenCV与AI深度学习
导读
这篇文章将介绍如何在 Windows 操作系统上使用带有 Nvidia GPU 的 OpenCV DNN 模块。
前 言
如果你使用的是 Ubuntu 系统,你可以参考下面链接:https://learnopencv.com/opencv-dnn-with-gpu-support/。
我们常常在人脸检测、姿态估计、物体检测等领域看到OpenCV DNN 模块的运用。但是,该模块有一个明显的缺点——它只能使用 CPU 内存进行推理。这导致应用程序缓慢。
在 Google Summer of Code 2019 期间,Yashas Samaga 向 OpenCV DNN 模块添加了 Nvidia GPU 支持,这些更改从 4.2.0 版本开始公开。对模块所做的更改允许使用 Nvidia GPU 来加速推理。
具体步骤
一、 准备环境
1. 下载安装Visual Studio
从https://visualstudio.microsoft.com/downloads/下载并安装 Visual Studio 。运行安装程序,选择使用 C 进行桌面开发,然后单击安装。
2. 安装Python环境,可以单独安装,也可以用Anaconda;
3. 安装CMake(本文使用3.19.5)
CMake下载地址:https://cmake.org/download/.
4. 安装Git(本文使用2.30.1),下载Windows版本:
Git下载地址: https://git-scm.com/downloads/.
5. CUDA下载安装:
从https://developer.nvidia.com/cuda-downloads下载并安装最新版本的 CUDA 。您还可以从https://developer.nvidia.com/cuda-toolkit-archive获取存档的 CUDA 版本。
按照https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html上的 Windows CUDA 安装指南进行操作。
6. CUDA下载安装:
在https://developer.nvidia.com/cudnn-download-survey上回答 cuDNN 调查并下载您喜欢的 cuDNN 版本。
按照https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#install-windows上的 Windows cuDNN 安装指南进行操作。在这篇文章中,我们使用了 cuDNN 11.2,但您也可以使用其他 cuDNN 版本。
二、 获取OpenCV源码
1. 我们将使用 git 从 Github 获取 OpenCV 源代码。优点是我们可以构建我们想要的任何版本的 OpenCV。我们指定%opencv-version%during git checkout。
三、 使用 CUDA 支持构建 OpenCV
第一步是使用 CMake 配置 OpenCV 构建。我们将几个选项传递给 CMake CLI。这些是:
- -G:它指定用于构建的 Visual Studio 编译器
- -T:指定主机工具架构
- CMAKE_BUILD_TYPE:它指定RELEASE或DEBUG安装模式
- CMAKE_INSTALL_PREFIX:指定安装目录
- OPENCV_EXTRA_MODULES_PATH:设置为 opencv_contrib 模块的位置
- PYTHON_EXECUTABLE:设置为 python3 可执行文件,用于构建。
- PYTHON3_LIBRARY:它指向 python3 库。
- WITH_CUDA:使用 CUDA 构建 OpenCV
- WITH_CUDNN:使用 cuDNN 构建 OpenCV
- OPENCV_DNN_CUDA:启用此项以构建具有 CUDA 支持的 DNN 模块
- WITH_CUBLAS:启用优化。
此外,还有两个优化标志ENABLE_FAST_MATH和CUDA_FAST_MATH,用于优化和加速数学运算。但是,当您启用这些标志时,不能保证浮点计算的结果符合 IEEE。如果您想要快速计算并且精度不是问题,您可以继续使用这些选项。此链接详细解释了准确性问题。
如果 CMake 可以找到安装在您的系统上的 CUDA 和 cuDNN,您应该会看到此输出。
现在可以构建 OpenCV。运行以下命令来构建它。
四、 在 Windows 上使用 Nvidia GPU 测试 OpenCV DNN 模块
我们将测试 OpenPose 代码,该代码可在帖子https://learnopencv.com/deep-learning-based-human-pose-estimation-using-opencv-cpp-python/中找到。
让我们测试这段代码并比较性能。我的系统配置是:
- 处理器:AMD 锐龙 7 4800H、2900Mhz
- 核心数:8
- 显卡:英伟达 GeForce GTX 1650 4GB
- 内存:16GB
要使用 CUDA 后端运行代码,我们对 C 和 Python 代码做一个简单的添加:
在 Windows 上使用和不使用 GPU 的 CPP 和 Python 执行 OpenPose 代码
该视频加快了速度,以帮助我们轻松可视化。实际上,CPU 版本的渲染速度比 GPU 慢得多。
使用 GPU,我们得到 7.48 fps,使用 CPU,我们得到 1.04 fps。
概括
OpenCV DNN 模块允许使用 Nvidia GPU 来加速推理。在本文中,我们学习了如何在 Windows 操作系统上构建具有 CUDA 支持的 OpenCV DNN 模块。我们讨论了安装(使用适当的设置)、构建 OpenCV DNN 模块所需的各种包、在安装过程中初始化变量以便于安装、创建和配置 Python 虚拟环境以及使用 CMake 配置 OpenCV 构建。完成所有这些步骤和程序后,我们构建了 OpenCV 下载。最后,我们通过运行此处提供的 OpenPose 代码使用 GPU 测试了 DNN 。