YOLO Vision 2026:

在 NVIDIA Jetson 上使用 DeepStream SDK 和 TensorRT 运行 Ultralytics YOLO26#



Watch: How to use Ultralytics YOLO26 models with NVIDIA Deepstream on Jetson Orin NX 🚀

这份综合指南详细介绍了如何使用 DeepStream SDK 和 TensorRT 在 NVIDIA Jetson 设备上部署 Ultralytics YOLO26。这里我们使用 TensorRT 来最大化 Jetson 平台上的推理性能。

本指南介绍了 DeepStream configuration for YOLO26INT8 calibrationmulti-stream setup 以及 benchmark results

NVIDIA DeepStream SDK on Jetson platform
注意

本指南已在运行最新稳定版 JetPack JP6.1NVIDIA Jetson Orin Nano Super Developer Kit、基于 NVIDIA Jetson Orin NX 16GB 且运行 JetPack JP5.1.3Seeed Studio reComputer J4012 以及基于 NVIDIA Jetson Nano 4GB 且运行 JetPack JP4.6.4Seeed Studio reComputer J1020 v2 上进行了测试。预计它适用于包括最新和旧版在内的所有 NVIDIA Jetson 硬件系列。

什么是 NVIDIA DeepStream?#

NVIDIA's DeepStream SDK 是一个基于 GStreamer 的完整流式分析工具包,用于基于 AI 的多传感器处理、视频、音频和图像理解。它是构建 IVA(智能视频分析)应用程序和服务的视觉 AI 开发者、软件合作伙伴、初创公司和 OEM 的理想选择。你现在可以创建包含神经网络以及诸如跟踪、视频编码/解码和视频渲染等其他复杂处理任务的流处理管道。这些管道能够对视频、图像和传感器数据进行实时分析。DeepStream 的多平台支持为你提供了一种在本地、边缘和云端更快、更轻松地开发视觉 AI 应用程序和服务的方法。

前提条件#

在开始学习本指南之前:

提示

在本指南中,我们使用了将 DeepStream SDK 安装到 Jetson 设备的 Debian 软件包方法。你还可以访问 DeepStream SDK on Jetson (Archived) 来访问旧版本的 DeepStream。

YOLO26 的 DeepStream 配置#

这里我们使用的是包含对 YOLO 模型 NVIDIA DeepStream SDK 支持的 marcoslucianops/DeepStream-Yolo GitHub 仓库。感谢 marcoslucianops 的贡献!

  1. 安装 Ultralytics 及其必要的依赖项

    cd ~
    pip install -U pip
    git clone https://github.com/ultralytics/ultralytics
    cd ultralytics
    pip install -e ".[export]" onnxslim
  2. 克隆 DeepStream-Yolo 仓库

    cd ~
    git clone https://github.com/marcoslucianops/DeepStream-Yolo
  3. export_yolo26.py 文件从 DeepStream-Yolo/utils 目录复制到 ultralytics 文件夹

    cp ~/DeepStream-Yolo/utils/export_yolo26.py ~/ultralytics
    cd ultralytics
  4. YOLO26 project 下载你选择的 Ultralytics YOLO26 检测模型 (.pt)。这里我们使用 yolo26s.pt

    wget https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo26s.pt
注意
  1. 将模型转换为 ONNX

    python3 export_yolo26.py -w yolo26s.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
  1. 将生成的 .onnx 模型文件和 labels.txt 文件复制到 DeepStream-Yolo 文件夹

    cp yolo26s.onnx labels.txt ~/DeepStream-Yolo
    cd ~/DeepStream-Yolo
  2. 根据已安装的 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
  3. 编译库

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
  4. 根据你的模型编辑 config_infer_primary_yolo26.txt 文件(对于具有 80 个类别的 YOLO26s)

    [property]
    ...
    onnx-file=yolo26s.onnx
    ...
    num-detected-classes=80
    ...
    parse-bbox-func-name=NvDsInferParseYolo
    ...
YOLO26 精度设置

YOLO26 使用居中填充对输入进行大小调整,并在没有 NMS 的情况下运行。为了获得最佳 accuracy,请将以下内容添加到 config_infer_primary_yolo26.txt[property] 部分:

[property]
...
maintain-aspect-ratio=1
symmetric-padding=1
cluster-mode=4
...
  1. 编辑 deepstream_app_config 文件

    ...
    [primary-gie]
    ...
    config-file=config_infer_primary_yolo26.txt
  2. 你还可以更改 deepstream_app_config 文件中的视频源。在此处加载默认视频文件

    ...
    [source0]
    ...
    uri=file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4

运行推理#

deepstream-app -c deepstream_app_config.txt
注意

在开始推理之前,生成 TensorRT 引擎文件需要较长时间,请耐心等待。

YOLO26 with deepstream
提示

如果你想将模型转换为 FP16 精度,只需在 config_infer_primary_yolo26.txt 内部设置 model-engine-file=model_b1_gpu0_fp16.enginenetwork-mode=2

INT8 校准#

如果你想使用 INT8 精度进行推理,需要遵循以下步骤:

注意

目前 INT8 无法在 TensorRT 10.x 上工作。本节指南已在 TensorRT 8.x 上进行了测试,预计可以正常工作。

  1. 设置 OPENCV 环境变量

    export OPENCV=1
  2. 编译库

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
  3. 对于 COCO 数据集,下载 val2017,解压并移动到 DeepStream-Yolo 文件夹

  4. 为校准图像创建一个新目录

    mkdir calibration
  5. 运行以下命令从 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。此过程可能需要很长时间。

  1. 使用所有选定的图像创建 calibration.txt 文件

    realpath calibration/*jpg > calibration.txt
  2. 设置环境变量

    export INT8_CALIB_IMG_PATH=calibration.txt
    export INT8_CALIB_BATCH_SIZE=1
注意

较高的 INT8_CALIB_BATCH_SIZE 值将带来更高的精度和更快的校准速度。请根据你的 GPU 内存进行设置。

  1. 更新 config_infer_primary_yolo26.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
    ...

运行 INT8 推理#

运行相同的命令来构建 INT8 引擎并开始推理:

deepstream-app -c deepstream_app_config.txt

多流设置#



Watch: How to Run Multi-Stream Inference with Ultralytics YOLO26 using NVIDIA DeepStream on Jetson Orin 🚀

要在单个 DeepStream 应用程序下设置多个流,请对 deepstream_app_config.txt 文件进行以下更改:

  1. 更改行数和列数以根据你想要的流数量构建网格显示。例如,对于 4 个流,我们可以添加 2 行和 2 列。

    [tiled-display]
    rows=2
    columns=2
  2. 为每个流添加一个单独的 [sourceN] 组,每个组都有自己的 urinum-sources=1

    [source0]
    enable=1
    type=3
    uri=file:///path/to/video1.mp4
    num-sources=1
    
    [source1]
    enable=1
    type=3
    uri=file:///path/to/video2.mp4
    num-sources=1
    
    [source2]
    enable=1
    type=3
    uri=file:///path/to/video3.mp4
    num-sources=1
    
    [source3]
    enable=1
    type=3
    uri=file:///path/to/video4.mp4
    num-sources=1

运行多路流推理#

运行相同的命令以在平铺显示器中启动所有流:

deepstream-app -c deepstream_app_config.txt
DeepStream multi-camera streaming configuration

基准测试结果#

以下基准测试总结了 YOLO11 模型在 NVIDIA Jetson Orin NX 16GB 上以 640x640 输入尺寸在不同 TensorRT 精度水平下的性能。YOLO26 使用上面描述的相同 DeepStream 导出和推理工作流。

对比图#

NVIDIA Jetson DeepStream performance benchmarks

详细对比表#

性能
格式状态推理时间 (ms/im)
TensorRT (FP32)8.64
TensorRT (FP16)5.27
TensorRT (INT8)4.54

致谢#

本指南最初由 Seeed Studio 的朋友 Lakshantha 和 Elaine 创建。

常见问题解答#

我该如何在 NVIDIA Jetson 设备上设置 Ultralytics YOLO26?#

要在NVIDIA Jetson 设备上设置 Ultralytics YOLO26,你需要首先安装与你的 JetPack 版本兼容的 DeepStream SDK。按照我们的快速入门指南中的逐步指南配置你的 NVIDIA Jetson 以进行 YOLO26 部署。

在 NVIDIA Jetson 上将 TensorRT 与 YOLO26 一起使用有什么好处?#

将 TensorRT 与 YOLO26 配合使用可针对推理优化模型,显著降低 NVIDIA Jetson 设备上的延迟并提高吞吐量。TensorRT 通过层融合、精度校准和内核自动调优提供高性能、低延迟的深度学习推理。这带来更快、更高效的执行,对视频分析和自主机器等实时应用程序特别有用。

我可以跨不同的 NVIDIA Jetson 硬件运行带有 DeepStream SDK 的 Ultralytics YOLO26 吗?#

是的,使用 DeepStream SDK 和 TensorRT 部署 Ultralytics YOLO26 的指南在整个 NVIDIA Jetson 系列中都是兼容的。这包括诸如带有 JetPack 5.1.3 的 Jetson Orin NX 16GB 和带有 JetPack 4.6.4 的 Jetson Nano 4GB 等设备。有关详细步骤,请参阅针对 YOLO26 的 DeepStream 配置部分。

我该如何将 YOLO26 模型转换为 ONNX 以供 DeepStream 使用?#

要将 YOLO26 模型转换为 ONNX 格式以便与 DeepStream 一起部署,请使用 DeepStream-Yolo 仓库中的 utils/export_yolo26.py 脚本。

以下是一个命令示例:

python3 utils/export_yolo26.py -w yolo26s.pt --opset 12 --simplify

有关模型转换的更多详细信息,请查看我们的模型导出部分

如何在 DeepStream 上使用 YOLO26 运行 INT8 推理?#

要运行 INT8 推理,请在具有代表性的图像集上对模型进行校准,并将 DeepStream 配置切换为 INT8 模式。下载 COCO val2017 图像,选择大约 1000 张校准图像,设置 INT8_CALIB_IMG_PATHINT8_CALIB_BATCH_SIZE 环境变量,然后用 model-engine-file=model_b1_gpu0_int8.engineint8-calib-file=calib.tablenetwork-mode=1 更新 config_infer_primary_yolo26.txt。有关完整步骤,请参阅INT8 Calibration部分。INT8 目前需要 TensorRT 8.x。

如何在 Jetson 上使用 DeepStream 运行多摄像头流?#

要在单个 DeepStream 应用程序中处理多个流,请编辑 deepstream_app_config.txt 文件以添加平铺显示网格并列出每个源 URI。在 [tiled-display] 下设置 rowscolumns 来构建网格,为每个流添加一个带有其专属 urinum-sources=1 的独立 [sourceN] 组,并调整网格以适应流的数量。有关完整示例,请参阅MultiStream Setup部分。

NVIDIA Jetson Orin NX 上的 YOLO 性能基准测试结果如何?#

YOLO11 模型在 NVIDIA Jetson Orin NX 16GB 上的性能会根据 TensorRT 精度级别而有所不同。例如,YOLO11s 模型可达到:

  • FP32 精度:14.53 毫秒/图像,68.8 FPS
  • FP16 精度:7.91 毫秒/图像,126 FPS
  • INT8 精度:6.05 毫秒/图像,165 FPS

这些基准测试凸显了在 NVIDIA Jetson 硬件上使用 TensorRT 优化的 YOLO11 模型的效率和能力。有关更多详细信息,请参阅我们的基准测试结果部分。

评论