跳转至内容

在 NVIDIA Jetson 上使用 DeepStream SDK 和 TensorRT 的 Ultralytics YOLO11



观看: 如何在 Jetson Orin NX 上将 Ultralytics YOLO11 模型与 NVIDIA Deepstream 结合使用 🚀

本综合指南详细介绍了如何使用 DeepStream SDK 和 TensorRT 在 NVIDIA Jetson 设备上部署 Ultralytics YOLO11。在此,我们使用 TensorRT 来最大限度地提高 Jetson 平台上的推理性能。

NVIDIA Jetson 上的 DeepStream

注意

本指南已经过以下测试:运行最新稳定 JetPack 版本的 NVIDIA Jetson Orin Nano Super Developer KitJP6.1)、基于 NVIDIA Jetson Orin NX 16GB 且运行 JetPack 版本的 Seeed Studio reComputer J4012JP5.1.3)以及基于 NVIDIA Jetson Nano 4GB 且运行 JetPack 版本的 Seeed Studio reComputer J1020 v2JP4.6.4)。预计它可以在包括最新和旧版在内的所有 NVIDIA Jetson 硬件系列上运行。

什么是 NVIDIA DeepStream?

NVIDIA 的 DeepStream SDK 是一个完整的流分析工具包,基于 GStreamer,用于基于 AI 的多传感器处理、视频、音频和图像理解。它非常适合视觉 AI 开发人员、软件合作伙伴、初创公司和构建 IVA(智能视频分析)应用程序和 OEM。现在,您可以创建包含 神经网络 和其他复杂处理任务(如跟踪、视频编码/解码和视频渲染)的流处理管道。这些管道支持对视频、图像和传感器数据进行实时分析。DeepStream 的多平台支持使您可以更快、更轻松地在本地、边缘和云中开发视觉 AI 应用程序和服务。

准备工作

在开始遵循本指南之前:

提示

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

YOLO11 的 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_yolo11.py 文件来自 DeepStream-Yolo/utils 目录到 ultralytics 文件夹

    cp ~/DeepStream-Yolo/utils/export_yolo11.py ~/ultralytics
    cd ultralytics
    
  4. YOLO11 发布版 下载您选择的 Ultralytics YOLO11 检测模型 (.pt)。这里我们使用 yolo11s.pt

    wget https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s.pt
    

    注意

    您还可以使用自定义训练的 YOLO11 模型

  5. 将模型转换为 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
    
  6. 复制生成的 .onnx 模型文件和 labels.txt 文件到 DeepStream-Yolo 文件夹

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

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
    
  9. 编辑 config_infer_primary_yolo11.txt 根据您的模型(对于具有 80 个类别的 YOLO11)的文件

    [property]
    ...
    onnx-file=yolo11s.pt.onnx
    ...
    num-detected-classes=80
    ...
    
  10. 编辑 deepstream_app_config 文件

    ...
    [primary-gie]
    ...
    config-file=config_infer_primary_yolo11.txt
    
  11. 您还可以更改视频源。 deepstream_app_config 文件。这里加载了一个默认视频文件

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

运行推理

deepstream-app -c deepstream_app_config.txt

注意

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

YOLO11 与 deepstream

提示

如果您想将模型转换为 FP16 精度,只需设置 model-engine-file=model_b1_gpu0_fp16.enginenetwork-mode=2 在...里面 config_infer_primary_yolo11.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。此过程可能需要很长时间。

  6. 创建 calibration.txt 文件,其中包含所有选定的图像

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

    export INT8_CALIB_IMG_PATH=calibration.txt
    export INT8_CALIB_BATCH_SIZE=1
    

    注意

    更高的 INT8_CALIB_BATCH_SIZE 值将带来更高的准确性和更快的校准速度。根据您的 GPU 内存进行设置。

  8. 更新 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 文件

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

    [tiled-display]
    rows=2
    columns=2
    
  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 精度级别下的性能表现。

对比图

Jetson DeepStream 基准测试图表

详细对比表

性能

格式 状态 推理时间 (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 模型的效率和能力。更多详情,请参阅我们的基准测试结果部分。



📅 创建于 1 年前 ✏️ 更新于 2 个月前

评论