跳至内容

Ultralytics YOLO11 NVIDIA Jetson 上使用 DeepStream SDK 和TensorRT



观看: 如何在 Jetson Nano 上使用 DeepStream SDK 运行多个数据流?Ultralytics YOLO11

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

NVIDIA Jetson 上的 DeepStream

备注

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 是什么?

NVIDIADeepStream SDK是基于 GStreamer 的完整流分析工具包,适用于基于人工智能的多传感器处理、视频、音频和图像理解。它是视觉人工智能开发人员、软件合作伙伴、初创企业和原始设备制造商构建 IVA(智能视频分析)应用程序和服务的理想选择。现在,您可以创建包含神经网络和其他复杂处理任务(如跟踪、视频编码/解码和视频渲染)的流处理管道。这些管道可对视频、图像和传感器数据进行实时分析。DeepStream 的多平台支持让您可以更快、更轻松地在内部、边缘和云中开发视觉人工智能应用和服务。

先决条件

在开始使用本指南之前:

提示

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

DeepStream 配置用于YOLO11

这里我们使用的是marcoslucianops/DeepStream-YoloGitHub 代码库,其中包括NVIDIA DeepStream SDK 对YOLO 模型的支持。我们感谢 marcoslucianops 所做的贡献!

  1. Install Ultralytics with necessary dependencies

    cd ~
    pip install -U pip
    git clone https://github.com/ultralytics/ultralytics
    cd ultralytics
    pip install -e ".[export]" onnxslim
    
  2. Clone the DeepStream-Yolo repository

    cd ~
    git clone https://github.com/marcoslucianops/DeepStream-Yolo
    
  3. Copy the export_yoloV8.py file from DeepStream-Yolo/utils directory to the ultralytics 资料夹

    cp ~/DeepStream-Yolo/utils/export_yoloV8.py ~/ultralytics
    cd ultralytics
    

    备注

    export_yoloV8.py works for both YOLOv8 and YOLO11 models.

  4. Download Ultralytics YOLO11 detection model (.pt) of your choice from YOLO11 releases. Here we use yolo11s.pt.

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

    备注

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

  5. 将模型转换为ONNX

    python3 export_yoloV8.py -w yolo11s.pt
    

    将以下参数传递给上述命令

    对于 DeepStream 6.0.1,请使用 opset 12 或更低。默认 opset 为 16。

    --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. Copy the generated .onnx model file and labels.txt file to the 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
    

    For 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_yoloV8.txt file according to your model (for YOLO11s with 80 classes)

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

    ...
    [primary-gie]
    ...
    config-file=config_infer_primary_yoloV8.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 与深流

提示

If you want to convert the model to FP16 precision, simply set model-engine-file=model_b1_gpu0_fp16.enginenetwork-mode=2 内侧 config_infer_primary_yoloV8.txt

INT8 校准

如果要使用 INT8 精度进行推理,需要按照以下步骤操作

备注

Currently INT8 does not work with TensorRT 10.x. This section of the guide has been tested with TensorRT 8.x which is expected to work.

  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 张图片(更多图片 = 更高精度)。您可以从头-1000 开始设置。例如,对于 2000 张图像,头部为 -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_yoloV8.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

多数据流设置

要在单个 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_video>
    uri=<path_to_video>
    uri=<path_to_video>
    uri=<path_to_video>
    num-sources=4
    

运行推理

deepstream-app -c deepstream_app_config.txt
多数据流设置

基准结果

The following benchmarks summarizes how YOLO11 models perform at different TensorRT precision levels with an input size of 640x640 on NVIDIA Jetson Orin NX 16GB.

对比图表

Jetson DeepStream Benchmarks Chart

详细对照表

性能

格式 现状 推理时间(毫秒/分钟)
TensorRT (FP32) 8.64
TensorRT (FP16) 5.27
TensorRT (INT8) 4.54
格式 现状 推理时间(毫秒/分钟)
TensorRT (FP32) 14.53
TensorRT (FP16) 7.91
TensorRT (INT8) 6.05
格式 现状 推理时间(毫秒/分钟)
TensorRT (FP32) 32.05
TensorRT (FP16) 15.55
TensorRT (INT8) 10.43
格式 现状 推理时间(毫秒/分钟)
TensorRT (FP32) 39.68
TensorRT (FP16) 19.88
TensorRT (INT8) 13.64
格式 现状 推理时间(毫秒/分钟)
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。按照我们的《快速入门指南》中的分步指南,为YOLO11 部署配置NVIDIA Jetson。

在NVIDIA Jetson 上使用TensorRT 和YOLO11 有什么好处?

TensorRT YOLO11 NVIDIA TensorRT 可通过层融合、精确校准和内核自动调整提供高性能、低延迟的深度学习推理。这使得执行速度更快、效率更高,尤其适用于视频分析和自主机器等实时应用。

我能否使用 DeepStream SDK 在不同的NVIDIA Jetson 硬件上运行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_yoloV8.py 脚本中的 DeepStream-Yolo 存放处。

下面是一个命令示例:

python3 utils/export_yoloV8.py -w yolo11s.pt --opset 12 --simplify

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

NVIDIA Jetson Orin NX 上YOLO 的性能基准是什么?

The performance of YOLO11 models on NVIDIA Jetson Orin NX 16GB varies based on TensorRT precision levels. For example, YOLO11s models achieve:

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

这些基准测试强调了在NVIDIA Jetson 硬件上使用TensorRT-optimizedYOLO11 模型的效率和能力。更多详情,请参阅我们的基准测试结果部分。

📅创建于 6 个月前 ✏️已更新 1 天前

评论