Ultralytics YOLO27:

使用 DeepStream SDK 和 TensorRT 在 NVIDIA Jetson 上运行 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 平台上的推理性能。

本指南将介绍 YOLO26 的 DeepStream 配置INT8 校准多流设置基准测试结果

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 的 DeepStream SDK 是一套基于 GStreamer 的完整流式分析工具包,用于基于 AI 的多传感器处理,以及视频、音频和图像理解。它非常适合构建 IVA(智能视频分析)应用和服务的视觉 AI 开发者、软件合作伙伴、初创公司和 OEM。现在,你可以创建包含神经网络以及跟踪、视频编码/解码和视频渲染等复杂处理任务的流处理管道。这些管道支持对视频、图像和传感器数据进行实时分析。DeepStream 的多平台支持让你能够更快速、更轻松地在本地、边缘和云端开发视觉 AI 应用和服务。

前置条件#

开始阅读本指南前:

提示

在本指南中,我们使用 Debian 软件包方式将 DeepStream SDK 安装到 Jetson 设备上。你也可以访问 Jetson 上的 DeepStream SDK(已归档)以获取旧版 DeepStream。

YOLO26 的 DeepStream 配置#

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

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

    pip install ultralytics onnx onnxslim
  2. 克隆 DeepStream-Yolo 仓库

    cd ~
    git clone https://github.com/marcoslucianops/DeepStream-Yolo
  3. YOLO26 项目下载你选择的 Ultralytics YOLO26 检测模型(.pt)。这里我们使用 yolo26s.pt

    wget https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo26s.pt
注意
  1. 将模型转换为ONNX并写入DeepStream从中读取类名的 labels.txt 文件

    from ultralytics import YOLO
    
    model = YOLO("yolo26s.pt")
    model.export(format="onnx", nms=False, agnostic_nms=True)  # creates 'yolo26s.onnx'
    with open("labels.txt", "w") as f:
        f.write("\n".join(model.names.values()))
导出参数

nms=False 导出无NMS头部,而 agnostic_nms=True 保持每个检测只有一个类别,以便DeepStream配置中的 cluster-mode=4 (无聚类)不会重复绘制边界框。添加 imgsz=1280 来更改推理尺寸(默认:640),添加 batch=4 来设置批大小为4(导出的批大小是静态的,因此它必须与DeepStream配置中的 batch-size 匹配),并添加 opset=12 以支持TensorRT 8.2或更旧版本(DeepStream 6.0.1及更早版本)。查看export arguments获取完整列表。

  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

    对于 JetPack 7.1:

    export CUDA_VER=13.0
  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 的情况下运行。为了获得最佳精度,请将以下内容添加到 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/图像)
TensorRT (FP32)8.64
TensorRT (FP16)5.27
TensorRT (INT8)4.54

致谢#

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

常见问题#

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

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

  • 可以,本指南介绍的搭配 DeepStream SDK 和 TensorRT 部署 Ultralytics YOLO26 的方法兼容整个 NVIDIA Jetson 产品线。其中包括搭配 JetPack 5.1.3 的 Jetson Orin NX 16GB,以及搭配 JetPack 4.6.4 的 Jetson Nano 4GB。详细步骤请参阅 YOLO26 的 DeepStream 配置部分。

  • 使用Ultralytics导出器导出带有无NMS头部的模型,并写入DeepStream从中读取类名的 labels.txt 文件:

    from ultralytics import YOLO
    
    model = YOLO("yolo26s.pt")
    model.export(format="onnx", nms=False, agnostic_nms=True)  # creates 'yolo26s.onnx'
    with open("labels.txt", "w") as f:
        f.write("\n".join(model.names.values()))

    为TensorRT 8.2或更旧版本(DeepStream 6.0.1及更早版本)添加 opset=12。有关模型转换的更多详情,请查看我们的model export section

  • 要运行 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 校准部分。目前,INT8 需要 TensorRT 8.x。

  • 要在单个 DeepStream 应用中处理多个流,请编辑 deepstream_app_config.txt 文件,添加平铺显示网格并列出每个源 URI。在 [tiled-display] 下设置 rowscolumns 以构建网格;为每个流添加单独的 [sourceN] 组,并为其配置各自的 urinum-sources=1;同时调整网格以适应流的数量。完整示例请参阅多流设置部分。

  • YOLO11 模型在 NVIDIA Jetson Orin NX 16GB 上的性能取决于 TensorRT 精度级别。例如,YOLO11s 模型达到:

    • FP32 精度:14.53 ms/im,68.8 FPS
    • FP16 精度:7.91 ms/im,126 FPS
    • INT8 精度:6.05 ms/im,165 FPS

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

评论