使用TensorRT 和 DeepStream SDK 在英伟达 Jetson 上部署
本指南介绍如何将训练好的模型部署到英伟达 Jetson 平台,并使用TensorRT 和 DeepStream SDK 执行推理。在这里,我们使用TensorRT 来最大限度地提高 Jetson 平台上的推理性能。
硬件验证
我们已在以下 Jetson 设备上测试并验证了本指南
开始之前
确保在 Jetson 设备上正确安装了JetPack SDK 以及所有SDK 组件和DeepStreamSDK,因为这包括本指南所需的 CUDA、TensorRT 和 DeepStream SDK。
JetPack SDK 为硬件加速的人工智能边缘开发提供了一个完整的开发环境。JetPack SDK 支持所有 Jetson 模块和开发人员工具包。
主要有两种安装方法,包括
- SD 卡图像方法
- 英伟达™ SDK 管理器方法
你可以在英伟达官方网站上找到非常详细的安装指南。你还可以找到与上述reComputer J1010和reComputer J2021 相对应的指南。
安装必要的软件包
- 步骤 1.访问 Jetson 设备终端,安装 pip 并升级
- 步骤 2.克隆以下软件仓库
- 步骤 3.打开requirements.txt
- 步骤 5.编辑以下各行。这里需要先按i键进入编辑模式。按下ESC,然后输入:wq保存并退出
注意: torch 和 torchvision 暂时不包括在内,因为它们将在稍后安装。
- 步骤 6.安装以下依赖项
- 步骤 7.安装必要的软件包
安装PyTorch 和 Torchvision
我们无法通过 pip 安装PyTorch 和 Torchvision,因为它们与基于ARM aarch64 架构的 Jetson 平台不兼容。因此,我们需要手动安装预编译的PyTorch pip wheel,并从源代码编译/安装 Torchvision。
访问此页面可访问所有PyTorch 和火炬视觉链接。
以下是 JetPack 4.6 及以上版本支持的一些版本。
PyTorch v1.10.0
JetPack 4.4 (L4T R32.4.3) / JetPack 4.4.1 (L4T R32.4.4) / JetPack 4.5 (L4T R32.5.0) / JetPack 4.5.1 (L4T R32.5.1) / JetPack 4.6 (L4T R32.6.1) 支持,Python 3.6
- file_name: torch-1.10.0-cp36-cp36m-linux_aarch64.whl
- URL: https://nvidia.box.com/shared/static/fjtbno0vpo676a25cgvuqc1wty0fkkg6.whl
PyTorch v1.12.0
受Python 3.8 的 JetPack 5.0 (L4T R34.1.0) / JetPack 5.0.1 (L4T R34.1.1) / JetPack 5.0.2 (L4T R35.1.0) 支持
- file_name: torch-1.12.0a0+2c916ef.nv22.3-cp38-cp38-linux_aarch64.whl
-
步骤 1.根据您的 JetPack 版本安装torch ,格式如下
例如,这里我们运行的是JP4.6.1,因此我们选择PyTorch v1.10.0
cd ~
sudo apt-get install -y libopenblas-base libopenmpi-dev
wget https://nvidia.box.com/shared/static/fjtbno0vpo676a25cgvuqc1wty0fkkg6.whl -O torch-1.10.0-cp36-cp36m-linux_aarch64.whl
pip3 install torch-1.10.0-cp36-cp36m-linux_aarch64.whl
- 步骤 2.根据已安装的PyTorch 版本安装 torchvision。例如,我们选择了PyTorch v1.10.0,这意味着我们需要选择Torchvision v0.11.1
sudo apt install -y libjpeg-dev zlib1g-dev
git clone --branch v0.11.1 https://github.com/pytorch/vision torchvision
cd torchvision
sudo python3 setup.py install
根据PyTorch 版本,这里列出了您需要安装的相应 torchvision 版本:
- PyTorch v1.10 - torchvision v0.11.1
- PyTorch v1.12 - torchvision v0.13.0
DeepStream 配置用于YOLOv5
- 步骤 1.克隆以下软件仓库
- 第 2 步将gen_wts_yoloV5.py从DeepStream-Yolo/utils 复制到 yolov5目录
- 第 3 步在yolov5 软件仓库中,从YOLOv5 版本中下载pt 文件(以 YOLOv5s 6.1 为例)
- 步骤 4.生成cfg和wts文件
注:要更改推理大小(默认值:640)
- 第 5 步将生成的cfg和wts文件复制到DeepStream-Yolo文件夹中
- 步骤 6.打开DeepStream-Yolo文件夹并编译库
cd ~/DeepStream-Yolo
CUDA_VER=11.4 make -C nvdsinfer_custom_impl_Yolo # for DeepStream 6.1
CUDA_VER=10.2 make -C nvdsinfer_custom_impl_Yolo # for DeepStream 6.0.1 / 6.0
- 第 7 步根据模型编辑config_infer_primary_yoloV5.txt文件
- 第 8 步编辑deepstream_app_config文件
- 第 9 步在deepstream_app_config文件中更改视频源。这里加载的是默认视频文件,如下所示
...
[source0]
...
uri=file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4
运行推理
上述结果在配备FP32和YOLOv5s 640x640 的Jetson Xavier NX上运行。我们可以看到,FPS约为30。
INT8 校准
如果要使用 INT8 精度进行推理,需要按照以下步骤操作
- 步骤 1.安装 OpenCV
- 步骤 2.编译/重新编译支持 OpenCV 的nvdsinfer_custom_impl_Yolo库
cd ~/DeepStream-Yolo
CUDA_VER=11.4 OPENCV=1 make -C nvdsinfer_custom_impl_Yolo # for DeepStream 6.1
CUDA_VER=10.2 OPENCV=1 make -C nvdsinfer_custom_impl_Yolo # for DeepStream 6.0.1 / 6.0
-
步骤 3.对于 COCO 数据集,下载val2017,解压缩并移至DeepStream-Yolo文件夹
-
步骤 4.新建校准图像目录
- 步骤 5.运行以下步骤,从 COCO 数据集中随机选择 1000 幅图像进行校准
注:NVIDIA 建议至少使用 500 张图像才能获得较高的精度。在本示例中,我们选择了 1000 张图像来获得更高的精度(更多图像 = 更高精度)。INT8_CALIB_BATCH_SIZE 值越高,精度越高,校准速度越快。请根据 GPU 内存情况进行设置。可以从头-1000 设置。例如,如果要校准 2000 张图像,则设置为-2000。这个过程可能需要很长时间。
- 步骤 6.创建包含所有选定图像的校准.txt文件
- 步骤 7.设置环境变量
- 步骤 8.更新config_infer_primary_yoloV5.txt文件
来自
至
- 步骤 9.运行推理
上述结果在配备INT8和YOLOv5s 640x640 的Jetson Xavier NX上运行。我们可以看到,FPS约为60。
基准结果
下表总结了不同型号在Jetson Xavier NX 上的性能表现。
型号名称 | 精度 | 推理大小 | 推理时间(毫秒) | FPS |
---|---|---|---|---|
YOLOv5s | FP32 | 320x320 | 16.66 | 60 |
FP32 | 640x640 | 33.33 | 30 | |
INT8 | 640x640 | 16.66 | 60 | |
YOLOv5n | FP32 | 640x640 | 16.66 | 60 |
附加
本教程由 seeed 的朋友 @lakshanthad 和 Elaine 撰写。