Skip to content

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



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

本综合指南提供了详细的步骤,指导您如何使用DeepStream SDK和TensorRT在NVIDIA Jetson设备上部署Ultralytics YOLO11。在这里,我们使用TensorRT来最大化Jetson平台上的推理性能。

NVIDIA Jetson上的DeepStream

Note

本指南已在Seeed Studio reComputer J4012(基于NVIDIA Jetson Orin NX 16GB,运行JetPack版本JP5.1.3)和Seeed Studio reComputer J1020 v2(基于NVIDIA Jetson Nano 4GB,运行JetPack版本JP4.6.4)上进行了测试。预计在所有NVIDIA Jetson硬件系列中,包括最新和旧版,都能正常工作。

什么是NVIDIA DeepStream?

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

前提条件

在开始遵循本指南之前:

Tip

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

为YOLO11配置DeepStream

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

  1. 安装依赖项

    pip install cmake
    pip install onnxsim
    
  2. 克隆以下仓库

    git clone https://github.com/marcoslucianops/DeepStream-Yolo
    cd DeepStream-Yolo
    
  3. YOLO11发布下载您选择的Ultralytics YOLO11检测模型(.pt)。这里我们使用yolov8s.pt

    wget https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8s.pt
    

    Note

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

  4. 将模型转换为ONNX

    python3 utils/export_yoloV8.py -w yolov8s.pt
    

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

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

    --opset 12
    

    更改推理尺寸(默认:640)

    ```bash
    -s SIZE
    --size SIZE
    -s HEIGHT WIDTH
    --size HEIGHT WIDTH
    ```
    
    1280 示例:
    
    ```bash
    -s 1280
    或
    -s 1280 1280
    ```
    
    简化 ONNX 模型(DeepStream >= 6.0)
    
    ```bash
    --simplify
    ```
    
    使用动态批量大小(DeepStream >= 6.1)
    
    ```bash
    --dynamic
    ```
    
    使用静态批量大小(例如批量大小 = 4)
    
    ```bash
    --batch 4
    ```
    
  5. 根据安装的 JetPack 版本设置 CUDA 版本

    对于 JetPack 4.6.4:

    export CUDA_VER=10.2
    

    对于 JetPack 5.1.3:

    export CUDA_VER=11.4
    
  6. 编译库

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
    
  7. 根据您的模型编辑 config_infer_primary_yoloV8.txt 文件(适用于具有 80 个类别的 YOLOv8s)

    [property]
    ...
    onnx-file=yolov8s.onnx
    ...
    num-detected-classes=80
    ...
    
  8. 编辑 deepstream_app_config 文件

    ...
    [primary-gie]
    ...
    config-file=config_infer_primary_yoloV8.txt
    
  9. 您还可以在 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 with deepstream

提示

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

INT8 校准

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

  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_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 并添加所有 4 个流的 uri

    [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
Multistream setup

基准测试结果

以下表格总结了在NVIDIA Jetson Orin NX 16GB上,输入尺寸为640x640时,YOLOv8s模型在不同TensorRT精度级别下的表现。

模型名称 精度 推理时间(毫秒/图像) FPS
YOLOv8s FP32 15.63 64
FP16 7.94 126
INT8 5.53 181

致谢

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

常见问题

如何在NVIDIA Jetson设备上设置Ultralytics YOLO11?

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

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

在NVIDIA Jetson上使用TensorRT与YOLO11优化了模型的推理性能,显著减少了延迟并提高了吞吐量。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模型转换为ONNX格式以用于DeepStream?

要将YOLO11模型转换为ONNX格式以用于DeepStream部署,请使用DeepStream-Yolo仓库中的utils/export_yoloV8.py脚本。

以下是一个示例命令:

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

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

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

YOLO11模型在NVIDIA Jetson Orin NX 16GB上的性能因TensorRT精度级别而异。例如,YOLOv8s模型达到:

  • FP32精度:15.63毫秒/图像,64 FPS
  • FP16精度:7.94毫秒/图像,126 FPS
  • INT8精度:5.53毫秒/图像,181 FPS

这些基准突显了在NVIDIA Jetson硬件上使用TensorRT优化的YOLO11模型的效率和能力。有关进一步详情,请参阅我们的基准测试结果部分。


📅 Created 3 months ago ✏️ Updated 13 days ago

Comments