在 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 平台上的推理性能。

NVIDIA DeepStream SDK on Jetson platform
注意

This guide has been tested with NVIDIA Jetson Orin Nano Super Developer Kit running the latest stable JetPack release of JP6.1, Seeed Studio reComputer J4012 which is based on NVIDIA Jetson Orin NX 16GB running JetPack release of JP5.1.3 and Seeed Studio reComputer J1020 v2 which is based on NVIDIA Jetson Nano 4GB running JetPack release of JP4.6.4. It is expected to work across all the NVIDIA Jetson hardware lineup including latest and legacy.

什么是 NVIDIA DeepStream?

NVIDIA's DeepStream SDK is a complete streaming analytics toolkit based on GStreamer for AI-based multi-sensor processing, video, audio, and image understanding. It's ideal for vision AI developers, software partners, startups, and OEMs building IVA (Intelligent Video Analytics) apps and services. You can now create stream-processing pipelines that incorporate neural networks and other complex processing tasks like tracking, video encoding/decoding, and video rendering. These pipelines enable real-time analytics on video, image, and sensor data. DeepStream's multi-platform support gives you a faster, easier way to develop vision AI applications and services on-premise, at the edge, and in the cloud.

先决条件

在开始学习本指南之前:

提示

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

YOLO26 的 DeepStream 配置

在此我们使用 marcoslucianops/DeepStream-Yolo GitHub 仓库,它包含了 NVIDIA DeepStream SDK 对 YOLO 模型的支持。我们感谢 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 发布版本 中下载你选择的 Ultralytics YOLO26 检测模型 (.pt)。这里我们使用 yolo26s.pt

    wget https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo26s.pt
注意

你也可以使用 自定义训练的 YOLO26 模型

  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.pt.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.pt.onnx
    ...
    num-detected-classes=80
    ...
  5. 编辑 deepstream_app_config 文件

    ...
    [primary-gie]
    ...
    config-file=config_infer_primary_yolo26.txt
  6. 你也可以在 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
提示

If you want to convert the model to FP16 precision, simply set model-engine-file=model_b1_gpu0_fp16.engine and network-mode=2 inside config_infer_primary_yolo26.txt

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
    ...

运行推理

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. 设置 num-sources=4 并为所有四个流添加 uri 条目。

    [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
DeepStream multi-camera streaming configuration

基准测试结果

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

对比图表

NVIDIA Jetson DeepStream performance benchmarks

详细对比表

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

致谢

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

常见问题 (FAQ)

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

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

在 NVIDIA Jetson 上使用带有 YOLO26 的 TensorRT 有什么好处?

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

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

可以,使用 DeepStream SDK 和 TensorRT 部署 Ultralytics YOLO26 的指南兼容整个 NVIDIA Jetson 产品系列。这包括 Jetson Orin NX 16GB(运行 JetPack 5.1.3)和 Jetson Nano 4GB(运行 JetPack 4.6.4)等设备。有关详细步骤,请参阅 YOLO26 的 DeepStream 配置 部分。

我该如何将 YOLO26 模型转换为用于 DeepStream 的 ONNX 格式?

To convert a YOLO26 model to ONNX format for deployment with DeepStream, use the utils/export_yolo26.py script from the DeepStream-Yolo repository.

以下是一个示例命令:

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

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

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

YOLO26 模型在 NVIDIA Jetson Orin NX 16GB 上的性能会根据 TensorRT 精度水平而有所不同。例如,YOLO26s 模型可实现:

  • FP32 精度:14.6 ms/im,68.5 FPS
  • FP16 精度:7.94 ms/im,126 FPS
  • INT8 精度:5.95 ms/im,168 FPS

这些基准测试强调了在 NVIDIA Jetson 硬件上使用 TensorRT 优化版 YOLO26 模型的高效性和能力。欲了解更多详细信息,请参阅我们的 基准测试结果 部分。

评论