Ultralytics YOLOv8 在 NVIDIA Jetson 上使用 DeepStream SDK 和 TensorRT
本综合指南提供了使用 DeepStream SDK 和TensorRT 在英伟达 Jetson设备上部署Ultralytics YOLOv8 的详细攻略。在此,我们使用TensorRT 来最大限度地提高 Jetson 平台上的推理性能。
备注
本指南已在基于NVIDIA Jetson Orin NX 16GB运行JetPack版本JP5.1.3的Seeed Studio reComputer J4012和基于NVIDIA Jetson Nano 4GB运行JetPack版本JP4.6.4的Seeed Studio reComputer J1020 v2上进行了测试。预计它将适用于所有英伟达™(NVIDIA®)Jetson 硬件阵容,包括最新和传统硬件。
什么是 NVIDIA DeepStream?
英伟达™(NVIDIA®)的DeepStream SDK是基于GStreamer的完整流分析工具包,适用于基于人工智能的多传感器处理、视频、音频和图像理解。它是视觉 AI 开发人员、软件合作伙伴、初创企业和原始设备制造商构建 IVA(智能视频分析)应用和服务的理想选择。现在,您可以创建包含神经网络和其他复杂处理任务(如跟踪、视频编码/解码和视频渲染)的流处理管道。这些管道可对视频、图像和传感器数据进行实时分析。DeepStream 的多平台支持让您可以更快、更轻松地在内部、边缘和云中开发视觉人工智能应用和服务。
先决条件
在开始遵循本指南之前:
- 请访问我们的文档《快速入门指南》:使用 Ultralytics YOLOv8 设置 NVIDIA Jetson设备,并将其连接到 NVIDIA Jetson。Ultralytics YOLOv8
-
根据 JetPack 版本安装DeepStream SDK
- 对于 JetPack 4.6.4,安装DeepStream 6.0.1
- 对于 JetPack 5.1.3,安装DeepStream 6.3
提示
在本指南中,我们使用 Debian 软件包方法将 DeepStream SDK 安装到 Jetson 设备。您也可以访问Jetson 上的 DeepStream SDK(已存档),访问 DeepStream 的旧版本。
DeepStream 配置 YOLOv8
在这里,我们使用marcoslucianops/DeepStream-YoloGitHub 存储库,其中包含英伟达 DeepStream SDK 对YOLO 模型的支持。我们对 marcoslucianops 的贡献表示感谢!
-
安装依赖项
-
克隆以下存储库
-
下载Ultralytics YOLOv8 检测模型 (.pt) ,请从YOLOv8 版本中选择。这里我们使用yolov8s.pt。
备注
您还可以使用自定义训练的YOLOv8 模型。
-
将模型转换为 ONNX
将以下参数传递给上述命令
对于 DeepStream 6.0.1,请使用 opset 12 或更低版本。默认操作集为 16。
更改推理大小(默认:640)
1280 示例:
为了简化 ONNX 模型 (DeepStream >= 6.0)
使用动态批处理大小 (DeepStream >= 6.1)
使用静态 batch-size(batch-size = 4 的示例)
-
根据安装的 JetPack 版本设置 CUDA 版本
对于 JetPack 4.6.4:
对于 JetPack 5.1.3:
-
编译库
-
编辑
config_infer_primary_yoloV8.txt
根据您的模型提交文件(对于 YOLOv8s 有80个班级) -
编辑
deepstream_app_config
文件 -
您还可以更改视频源
deepstream_app_config
文件。这里加载了一个默认的视频文件
运行推理
备注
生成 TensorRT 引擎文件,然后开始推理。所以请耐心等待。
提示
如果要将模型转换为FP16精度,只需设置 model-engine-file=model_b1_gpu0_fp16.engine
和 network-mode=2
里面 config_infer_primary_yoloV8.txt
INT8 校准
如果要使用 INT8 精度进行推理,需要按照以下步骤操作
-
设置
OPENCV
环境变量 -
编译库
-
有关 COCO 数据集,请下载 val2017提取,并移至
DeepStream-Yolo
文件夹 -
为校准图像创建一个新目录
-
运行以下命令,从COCO数据集中随机选择1000张图像进行校准
备注
英伟达™(NVIDIA®)建议至少使用 500 张图像才能获得较高的精度。在本例中,我们选择了 1000 张图像来获得更高的精度(更多图像 = 更高精度)。您可以从头-1000 开始设置。例如,对于 2000 张图像,头部为 -2000。这个过程可能需要很长时间。
-
创建
calibration.txt
包含所有选定图像的文件 -
设置环境变量
备注
更高的INT8_CALIB_BATCH_SIZE值将带来更高的精度和更快的校准速度。根据您的GPU内存进行设置。
-
更新
config_infer_primary_yoloV8.txt
文件来自
至
运行推理
多流设置
要在单个 deepstream 应用程序下设置多个流,您可以对 deepstream_app_config.txt
文件
-
更改行和列以根据要拥有的流数构建网格显示。例如,对于 4 个流,我们可以添加 2 行和 2 列。
-
设置
num-sources=4
并添加uri
所有 4 个流
运行推理
基准测试结果
下表总结了如何 YOLOv8s 模型在不同的性能下 TensorRT 精度级别,输入大小为 640x640,在 NVIDIA Jetson Orin NX 16GB 上。
型号名称 | 精度 | 推理时间(毫秒/分钟) | FPS |
---|---|---|---|
YOLOv8s | FP32 | 15.63 | 64 |
FP16 | 7.94 | 126 | |
INT8 | 5.53 | 181 |
确认
本指南最初是由我们在 Seeed Studio、Lakshantha 和 Elaine 的朋友创建的。