在 NVIDIA Jetson 上使用 DeepStream SDK 和 TensorRT 的 Ultralytics YOLO11
观看: 如何在 Jetson Orin NX 上将 Ultralytics YOLO11 模型与 NVIDIA Deepstream 结合使用 🚀
本综合指南详细介绍了如何使用 DeepStream SDK 和 TensorRT 在 NVIDIA Jetson 设备上部署 Ultralytics YOLO11。在此,我们使用 TensorRT 来最大限度地提高 Jetson 平台上的推理性能。
注意
本指南已经过以下测试:运行最新稳定 JetPack 版本的 NVIDIA Jetson Orin Nano Super Developer Kit(JP6.1)、基于 NVIDIA Jetson Orin NX 16GB 且运行 JetPack 版本的 Seeed Studio reComputer J4012(JP5.1.3)以及基于 NVIDIA Jetson Nano 4GB 且运行 JetPack 版本的 Seeed Studio reComputer J1020 v2(JP4.6.4)。预计它可以在包括最新和旧版在内的所有 NVIDIA Jetson 硬件系列上运行。
什么是 NVIDIA DeepStream?
NVIDIA 的 DeepStream SDK 是一个完整的流分析工具包,基于 GStreamer,用于基于 AI 的多传感器处理、视频、音频和图像理解。它非常适合视觉 AI 开发人员、软件合作伙伴、初创公司和构建 IVA(智能视频分析)应用程序和 OEM。现在,您可以创建包含 神经网络 和其他复杂处理任务(如跟踪、视频编码/解码和视频渲染)的流处理管道。这些管道支持对视频、图像和传感器数据进行实时分析。DeepStream 的多平台支持使您可以更快、更轻松地在本地、边缘和云中开发视觉 AI 应用程序和服务。
准备工作
在开始遵循本指南之前:
- 请访问我们的文档快速入门指南:带有 Ultralytics YOLO11 的 NVIDIA Jetson,以设置带有 Ultralytics YOLO11 的 NVIDIA Jetson 设备
- 安装 DeepStream SDK 根据 JetPack 版本
- 对于 JetPack 4.6.4,安装 DeepStream 6.0.1
- 对于 JetPack 5.1.3,请安装 DeepStream 6.3
- 对于 JetPack 6.1,请安装 DeepStream 7.1
提示
在本指南中,我们使用了 Debian 软件包方法将 DeepStream SDK 安装到 Jetson 设备。您还可以访问 Jetson 上的 DeepStream SDK(已存档) 以访问 DeepStream 的旧版本。
YOLO11 的 DeepStream 配置
这里我们使用 marcoslucianops/DeepStream-Yolo GitHub 仓库,它包括 NVIDIA DeepStream SDK 对 YOLO 模型 的支持。感谢 marcoslucianops 的贡献!
-
安装 Ultralytics 以及必要的依赖项
cd ~ pip install -U pip git clone https://github.com/ultralytics/ultralytics cd ultralytics pip install -e ".[export]" onnxslim
-
克隆 DeepStream-Yolo 仓库
cd ~ git clone https://github.com/marcoslucianops/DeepStream-Yolo
-
复制
export_yolo11.py
文件来自DeepStream-Yolo/utils
目录到ultralytics
文件夹cp ~/DeepStream-Yolo/utils/export_yolo11.py ~/ultralytics cd ultralytics
-
从 YOLO11 发布版 下载您选择的 Ultralytics YOLO11 检测模型 (.pt)。这里我们使用 yolo11s.pt。
wget https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s.pt
注意
您还可以使用自定义训练的 YOLO11 模型。
-
将模型转换为 ONNX
python3 export_yolo11.py -w yolo11s.pt
将以下参数传递给上述命令
对于 DeepStream 5.1,请移除
--dynamic
参数并使用opset
12 或更低。默认值为opset
是 17。--opset 12
要更改推理大小(默认值:640)
-s SIZE --size SIZE -s HEIGHT WIDTH --size HEIGHT WIDTH
1280 示例:
-s 1280 or -s 1280 1280
简化 ONNX 模型 (DeepStream >= 6.0)
--simplify
要使用动态批量大小 (DeepStream >= 6.1)
--dynamic
要使用静态批次大小(例如,批次大小 = 4)。
--batch 4
-
复制生成的
.onnx
模型文件和labels.txt
文件到DeepStream-Yolo
文件夹cp yolo11s.pt.onnx labels.txt ~/DeepStream-Yolo cd ~/DeepStream-Yolo
-
根据已安装的 JetPack 版本设置 CUDA 版本
对于 JetPack 4.6.4:
export CUDA_VER=10.2
对于 JetPack 5.1.3:
export CUDA_VER=11.4
对于 Jetpack 6.1:
export CUDA_VER=12.6
-
编译库
make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
-
编辑
config_infer_primary_yolo11.txt
根据您的模型(对于具有 80 个类别的 YOLO11)的文件[property] ... onnx-file=yolo11s.pt.onnx ... num-detected-classes=80 ...
-
编辑
deepstream_app_config
文件... [primary-gie] ... config-file=config_infer_primary_yolo11.txt
-
您还可以更改视频源。
deepstream_app_config
文件。这里加载了一个默认视频文件... [source0] ... uri=file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4
运行推理
deepstream-app -c deepstream_app_config.txt
注意
在开始推理之前,生成 TensorRT 引擎文件需要很长时间。请耐心等待。

提示
如果您想将模型转换为 FP16 精度,只需设置 model-engine-file=model_b1_gpu0_fp16.engine
和 network-mode=2
在...里面 config_infer_primary_yolo11.txt
INT8 校准
如果您想使用 INT8 精度进行推理,您需要按照以下步骤操作
注意
目前,INT8 不适用于 TensorRT 10.x。本指南的这一部分已使用 TensorRT 8.x 进行了测试,预计可以正常工作。
-
设置
OPENCV
环境变量export OPENCV=1
-
编译库
make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
-
对于 COCO 数据集,请下载 val2017,提取,然后移动到
DeepStream-Yolo
文件夹 -
创建一个新的目录来存放校准图像。
mkdir calibration
-
运行以下命令以从 COCO 数据集中选择 1000 张随机图像以运行校准
for jpg in $(ls -1 val2017/*.jpg | sort -R | head -1000); do cp ${jpg} calibration/ done
注意
NVIDIA 建议至少使用 500 张图像以获得良好的 准确率。在此示例中,选择 1000 张图像是为了获得更好的准确率(图像越多 = 准确率越高)。您可以从 head -1000 进行设置。例如,对于 2000 张图像,使用 head -2000。此过程可能需要很长时间。
-
创建
calibration.txt
文件,其中包含所有选定的图像realpath calibration/*jpg > calibration.txt
-
设置环境变量
export INT8_CALIB_IMG_PATH=calibration.txt export INT8_CALIB_BATCH_SIZE=1
注意
更高的 INT8_CALIB_BATCH_SIZE 值将带来更高的准确性和更快的校准速度。根据您的 GPU 内存进行设置。
-
更新
config_infer_primary_yolo11.txt
文件从
... model-engine-file=model_b1_gpu0_fp32.engine #int8-calib-file=calib.table ... network-mode=0 ...
要
... model-engine-file=model_b1_gpu0_int8.engine int8-calib-file=calib.table ... network-mode=1 ...
运行推理
deepstream-app -c deepstream_app_config.txt
多流设置
观看: 如何使用 Ultralytics YOLO11 在 Jetson Nano 上通过 DeepStream SDK 运行多个流 🎉
要在单个 deepstream 应用程序下设置多个流,您可以对以下内容进行更改 deepstream_app_config.txt
文件
-
根据所需的视频流数量,更改行和列以构建网格显示。例如,对于 4 个视频流,我们可以添加 2 行和 2 列。
[tiled-display] rows=2 columns=2
-
设置
num-sources=4
并添加uri
所有 4 个流[source0] enable=1 type=3 uri=path/to/video1.jpg uri=path/to/video2.jpg uri=path/to/video3.jpg uri=path/to/video4.jpg num-sources=4
运行推理
deepstream-app -c deepstream_app_config.txt

基准测试结果
以下基准测试总结了 YOLO11 模型在 NVIDIA Jetson Orin NX 16GB 上以 640x640 的输入尺寸在不同 TensorRT 精度级别下的性能表现。
对比图

详细对比表
性能
格式 | 状态 | 推理时间 (ms/im) |
---|---|---|
TensorRT (FP32) | ✅ | 8.64 |
TensorRT (FP16) | ✅ | 5.27 |
TensorRT (INT8) | ✅ | 4.54 |
格式 | 状态 | 推理时间 (ms/im) |
---|---|---|
TensorRT (FP32) | ✅ | 14.53 |
TensorRT (FP16) | ✅ | 7.91 |
TensorRT (INT8) | ✅ | 6.05 |
格式 | 状态 | 推理时间 (ms/im) |
---|---|---|
TensorRT (FP32) | ✅ | 32.05 |
TensorRT (FP16) | ✅ | 15.55 |
TensorRT (INT8) | ✅ | 10.43 |
格式 | 状态 | 推理时间 (ms/im) |
---|---|---|
TensorRT (FP32) | ✅ | 39.68 |
TensorRT (FP16) | ✅ | 19.88 |
TensorRT (INT8) | ✅ | 13.64 |
格式 | 状态 | 推理时间 (ms/im) |
---|---|---|
TensorRT (FP32) | ✅ | 80.65 |
TensorRT (FP16) | ✅ | 39.06 |
TensorRT (INT8) | ✅ | 22.83 |
致谢
本指南最初由我们在 Seeed Studio 的朋友 Lakshantha 和 Elaine 创建。
常见问题
如何在 NVIDIA Jetson 设备上设置 Ultralytics YOLO11?
要在 NVIDIA Jetson 设备上设置 Ultralytics YOLO11,您首先需要安装与您的 JetPack 版本兼容的 DeepStream SDK。请按照我们的快速入门指南中的分步指南配置您的 NVIDIA Jetson 以进行 YOLO11 部署。
在 NVIDIA Jetson 上将 TensorRT 与 YOLO11 结合使用有什么好处?
将 TensorRT 与 YOLO11 结合使用可优化模型以进行推理,从而显著减少 NVIDIA Jetson 设备上的延迟并提高吞吐量。 TensorRT 通过层融合、精度校准和内核自动调整提供高性能、低延迟的 深度学习 推理。 这可以实现更快、更高效的执行,对于视频分析和自主机器等实时应用尤其有用。
是否可以在不同的 NVIDIA Jetson 硬件上使用 DeepStream SDK 运行 Ultralytics YOLO11?
是的,使用 DeepStream SDK 和 TensorRT 部署 Ultralytics YOLO11 的指南与整个 NVIDIA Jetson 系列兼容。这包括诸如带有 JetPack 5.1.3 的 Jetson Orin NX 16GB 和带有 JetPack 4.6.4 的 Jetson Nano 4GB 之类的设备。有关详细步骤,请参阅 YOLO11 的 DeepStream 配置部分。
如何将 YOLO11 模型转换为 DeepStream 的 ONNX 格式?
要将 YOLO11 模型转换为 ONNX 格式以便使用 DeepStream 进行部署,请使用 utils/export_yolo11.py
脚本来自 DeepStream-Yolo 仓库。
这是一个示例命令:
python3 utils/export_yolo11.py -w yolo11s.pt --opset 12 --simplify
有关模型转换的更多详细信息,请查看我们的模型导出部分。
YOLO 在 NVIDIA Jetson Orin NX 上的性能基准是什么?
YOLO11 模型在 NVIDIA Jetson Orin NX 16GB 上的性能因 TensorRT 精度级别而异。例如,YOLO11s 模型实现了:
- FP32 精度: 14.6 毫秒/帧, 68.5 FPS
- FP16 精度: 7.94 毫秒/帧, 126 FPS
- INT8 精度:5.95 毫秒/帧,168 FPS
这些基准测试突显了在 NVIDIA Jetson 硬件上使用 TensorRT 优化的 YOLO11 模型的效率和能力。更多详情,请参阅我们的基准测试结果部分。