YOLO v5 TensorRT C++推演快速教程

经过数天乃至数周的调试,你的神经网络模型终于在速度与精度上获得了令人满意的结果,并正式进入模型部署方案开发阶段。如何与现有的产品耦合,并在目标设备上最大化模型推演性能,成为一项重要课题。

模型推演通常是指模型接收给定输入数据、完成内部逻辑运算并输出计算结果的过程。尤其是在模型部署阶段,不再需要反向传播计算梯度,推演成为模型的唯一使命。正因如此,推演阶段大概率不会也不需要再使用TensorFlow、PyTorch这样庞杂的框架,而视情况使用专门为模型推演设计的方案。

一些较为流行的模型推演方案包括Google的TensorFlow Serving,META (FaceBook) 的 TorchServe,Microsoft的ONNX Runtme,百度的Paddle Lite,华为的CANN,腾讯的TNN,阿里的MNN等。这些推演方案面向不同的部署场景与运算设备平台,力求最小化模型推演成本。

然而,这些现成的方案并不一定能满足全部应用场景。如果你的模型推演需要运行在搭载了NVIDIA公司GPU的设备上,并且需要与已有的产品做整合,那么,更加底层的TensorRT或许是你的最佳选择。

TensorRT是由NVIDIA公司开发的一款用于在GPU上执行深度神经网络运算的代码库,专注于加速深度神经网络的运算,支持PyThon与C++。虽然在模型训练时Python被大量使用,但在产品基本定型进入最终开发阶段时,从最大化性能的角度考虑,C++是更加理想的选择。这篇文章以物体检测框架YOLO v5为例,介绍了如何使用TensorRT的C++ API实现一个完整的物体检测功能。

教程分为三部分:

  1. 搭建开发环境,安装必要的依赖项。
  2. 了解TensorRT开发涉及到的一些基本概念。
  3. 动手操作,实战YOLO v5示例代码。

作为这篇教程的读者,我假设你已经具备基本的深度神经网络知识,并且有使用Python推演神经网络模型的代码经验。这篇快速教程将重点放在TensorRT的C++ API上,你将会看到使用C++ API完成模型推演与使用Python的一些显著不同之处。

准备好了吗,让我们开始吧!

(全文约5500字)

准备工作 

工欲善其事,必先利其器

本章节,你将会验证目标机器是否已经安装了开发所需的必要依赖项目。对于不满足的依赖项,文中给出了指导性的安装教程供你参考。

本教程内容在Ubuntu Server 20.04下测试通过。使用的GPU型号为NVIDIA RTX 3090。部分关键的依赖项目与版本号如下:

  • NVIDIA驱动:470.82.01
  • CUDA:11.4.3
  • cuDNN:8.2.1
  • TensorRT:8.2.5.1
  • GCC:9.4.0
  • Cmake:3.16.3

如果你的库版本低于上述值,最好将其升级到该版本或者更高版本。

‌如何确定NVIDIA驱动版本

按下 Ctrl + Alt + T 打开终端,然后输入 nvidia-smi 即可显示驱动版本。该命令同时可以显示GPU的型号。

如果你需要安装新驱动,可参阅:

https://yinguobing.com/install-nvidia-driver-runfile-ubuntu-server-20-04/

如何确定CUDA版本

在终端中输入 nvcc --version 命令,即可显示CUDA版本号。

如果你需要安装CUDA,可参阅:

https://yinguobing.com/install-cuda11-with-runfile/

如何确定cuDNN版本

在终端中输入:

cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

即可显示cuDNN版本信息。

如果需要安装cuDNN,可参考:

https://yinguobing.com/install-cudnn8-with-tar-file/

如何确定TensorRT版本

在终端中输入 find /usr -name NvInferVersion.h 查找头文件路径,

然后解析头文件内容:

cat /usr/local/TensorRT-8.2.5.1/include/NvInferVersion.h | grep NV_TENSORRT -A 2

即可显示TensorRT版本信息。

如果需要安装TensorRT,可参考:

https://yinguobing.com/install-tensorrt-with-tar-file/

如何确定GCC版本

在终端中输入 gcc --version 即可显示版本信息。

如果需要安装 GCC,可以在终端中输入:

sudo apt install gcc

如何确定CMake版本

在终端中输入cmake --version 即可显示版本信息。

如果需要安装 cmake,可以在终端中输入:

sudo apt install cmake

上述依赖项是TensorRT开发的基本条件。除此之外,我假设你已经配置好了自己喜欢的集成开发环境。如果不确定的话,可以考虑VS Code,并记得安装C++插件。

恭喜你,可以进入下一章节了。