在本教程中,您将学习如何将 OpenCV 的“深度神经网络”(DNN) 模块与 NVIDIA GPU、CUDA 和 cuDNN 结合使用,以将推理速度提高 211-1549%。
早在 2017 年 8 月,我发表了我的第一个关于使用 OpenCV 的“深度神经网络”(DNN)模块进行图像分类的教程。
PyImageSearch 的读者非常喜欢 OpenCV 的 dnn 模块的便利性和易用性,因此我陆续发布了有关 dnn 模块的一些教程。
这些教程都使用 OpenCV 的 dnn 模块来进行下面操作:
(1) 从磁盘加载预训练的网络;
(2) 对输入图像进行预测;
(3) 显示结果,允许您构建自己的自定义计算机视觉 /deep learning 管道用于您的特定项目。
然而,OpenCV 的 dnn 模块最大的问题是缺乏 NVIDIA GPU/CUDA 支持——这些模型你不能轻易地使用 GPU 来提高管道的每秒帧数 (FPS) 处理率。
对于 Single Shot Detector (SSD) 教程来说,这并不是什么大问题,它可以轻松地在 CPU 上以 25-30+ FPS 的速度运行,但对于 YOLO 和 Mask R-CNN 来说,这是一个巨大的问题,它们很难做到在 CPU 上获得超过 1-3 FPS。
这一切在 2019 年的 Google Summer of Code (GSoC) 中发生了变化。
在 dlib 的 Davis King 的带领下,由 Yashas Samaga 实施,OpenCV 4.2 现在支持使用 OpenCV 的 dnn 模块进行推理的 NVIDIA GPU,将推理速度提高了 1549%!
在今天的教程中,我将向您展示如何编译和安装 OpenCV 以利用您的 NVIDIA GPU 进行深度神经网络推理。
然后在下周的教程中,我将为您提供 Single Shot Detector、YOLO 和 Mask R-CNN 代码,这些代码可用于使用 OpenCV 来利用您的 GPU。接着我们将对结果进行基准测试,并将它们与仅使用 CPU 的推理进行比较,以便您了解哪些模型可以从使用 GPU 中获益最多。
要了解如何使用 NVIDIA GPU、CUDA 和 cuDNN 支持编译和安装 OpenCV 的“dnn”模块,请继续阅读!
如何在 NVIDIA GPU、CUDA 和 cuDNN 中使用 OpenCV 的“dnn”模块
在本教程的其余部分,我将向您展示如何从源代码编译 OpenCV,以便您可以利用 NVIDIA GPU 加速推理来进行预训练的深度神经网络。
为 NVIDIA GPU 支持编译 OpenCV 时的假设
为了在 NVIDIA GPU 支持下编译和安装 OpenCV 的“深度神经网络”模块,我将做出以下假设:
1、你有一个 NVIDIA GPU。这应该是一个明显的假设。如果您没有 NVIDIA GPU,则无法编译具有 NVIDIA GPU 支持的 OpenCV 的“dnn”模块。
2、您正在使用 Ubuntu 18.04(或其他基于 Debian 的发行版)。说到深度学习,我强烈推荐基于 Unix 的机器而不是 Windows 系统(实际上,我在 PyImageSearch 博客上不支持 Windows)。如果您打算使用 GPU 进行深度学习,请在 macOS 或 Windows 上使用 Ubuntu——它更容易配置。
3、您知道如何使用命令行。我们将在本教程中使用命令行。如果您不熟悉命令行,我建议您先阅读此命令行介绍,然后花几个小时(甚至几天)练习。同样,本教程不适用于那些全新的命令行。
4、您能够阅读终端输出并诊断问题。如果您以前从未这样做过,从源代码编译 OpenCV 可能具有挑战性——有很多事情会让您感到困惑,包括丢失的包、不正确的库路径等。即使使用我的详细指南,您也可能会犯错误一路上。不要气馁!花点时间了解您正在执行的命令、它们的作用,最重要的是,阅读命令的输出!不要盲目复制粘贴;你只会遇到错误。
说了这么多,让我们开始为 NVIDIA GPU 推理配置 OpenCV 的“dnn”模块。
第 1 步:安装 NVIDIA CUDA 驱动程序、CUDA Toolkit 和 cuDNN
本教程假设您已经拥有:
一个英伟达 GPU
已安装该特定 GPU 的 CUDA 驱动程序
CUDA Toolkit 和 cuDNN 配置和安装
如果您的系统上有 NVIDIA GPU,但尚未安装 CUDA 驱动程序、CUDA Toolkit 和 cuDNN,则您需要先配置您的机器——我不会在本指南中介绍 CUDA 配置和安装。一旦您安装了正确的 NVIDIA 驱动程序和工具包,您就可以返回本教程。
第 2 步:安装 OpenCV 和“dnn”GPU 依赖项
为 NVIDIA GPU 推理配置 OpenCV 的“dnn”模块的第一步是安装适当的依赖项:
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install build-essential cmake unzip pkg-config
$ sudo apt-get install libjpeg-dev libpng-dev libtiff-dev
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev
$ sudo apt-get install libv4l-dev libxvidcore-dev libx264-dev
$ sudo apt-get install libgtk-3-dev
$ sudo apt-get install libatlas-base-dev gfortran
$ sudo apt-get install python3-dev
如果您遵循我的 Ubuntu 18.04 深度学习