Saltar al contenido

Ultralytics YOLO11 on NVIDIA Jetson using DeepStream SDK and TensorRT



Observa: How to Run Multiple Streams with DeepStream SDK on Jetson Nano using Ultralytics YOLO11

This comprehensive guide provides a detailed walkthrough for deploying Ultralytics YOLO11 on NVIDIA Jetson devices using DeepStream SDK and TensorRT. Here we use TensorRT to maximize the inference performance on the Jetson platform.

DeepStream en NVIDIA Jetson

Nota

Esta guía ha sido probada tanto con el Seeed Studio reComputer J4012, basado en NVIDIA Jetson Orin NX 16GB con JetPack JP5.1.3, como con el Seeed Studio reComputer J1020 v2, basado en NVIDIA Jetson Nano 4GB con JetPack JP4.6.4. Se espera que funcione en toda la gama de hardware Jetson de NVIDIA , tanto la más reciente como la heredada.

¿Qué es 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.

Requisitos previos

Antes de empezar a seguir esta guía:

Consejo

En esta guía hemos utilizado el método del paquete Debian para instalar el SDK de DeepStream en el dispositivo Jetson. También puedes visitar DeepStream SDK on Jetson (Archivado) para acceder a las versiones anteriores de DeepStream.

DeepStream Configuration for YOLO11

Aquí estamos utilizando marcoslucianops/DeepStream-Yolo repositorio de GitHub que incluye NVIDIA SDK DeepStream compatible con los modelos YOLO . ¡Agradecemos los esfuerzos de marcoslucianops por sus contribuciones!

  1. Instalar dependencias

    pip install cmake
    pip install onnxsim
    
  2. Clonar el siguiente repositorio

    git clone https://github.com/marcoslucianops/DeepStream-Yolo
    cd DeepStream-Yolo
    
  3. Download Ultralytics YOLO11 detection model (.pt) of your choice from YOLO11 releases. Here we use yolov8s.pt.

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

    Nota

    You can also use a custom trained YOLO11 model.

  4. Convertir modelo en ONNX

    python3 utils/export_yoloV8.py -w yolov8s.pt
    

    Pase los siguientes argumentos al comando anterior

    Para DeepStream 6.0.1, utilice el opset 12 o inferior. El conjunto de operaciones predeterminado es 16.

    --opset 12
    

    Para cambiar el tamaño de inferencia (valor predeterminado: 640)

    -s SIZE
    --size SIZE
    -s HEIGHT WIDTH
    --size HEIGHT WIDTH
    

    Ejemplo para 1280:

    -s 1280
    or
    -s 1280 1280
    

    Para simplificar el ONNX modelo (DeepStream >= 6.0)

    --simplify
    

    Para utilizar el tamaño de lote dinámico (DeepStream >= 6.1)

    --dynamic
    

    Para utilizar el tamaño de lote estático (ejemplo para el tamaño de lote = 4)

    --batch 4
    
  5. Configura la versión de CUDA según la versión de JetPack instalada

    Para JetPack 4.6.4:

    export CUDA_VER=10.2
    

    Para JetPack 5.1.3:

    export CUDA_VER=11.4
    
  6. Compilar la biblioteca

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
    
  7. Edite el archivo config_infer_primary_yoloV8.txt de acuerdo con su modelo (para YOLOv8s con 80 clases)

    [property]
    ...
    onnx-file=yolov8s.onnx
    ...
    num-detected-classes=80
    ...
    
  8. Edite el archivo deepstream_app_config archivo

    ...
    [primary-gie]
    ...
    config-file=config_infer_primary_yoloV8.txt
    
  9. También puede cambiar la fuente de vídeo en deepstream_app_config archivo. Aquí se carga un archivo de vídeo predeterminado

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

Ejecutar inferencia

deepstream-app -c deepstream_app_config.txt

Nota

Tomará mucho tiempo generar el archivo TensorRT engine antes de iniciar la inferencia. Así que, por favor, ten paciencia.

YOLO11 with deepstream

Consejo

If you want to convert the model to FP16 precision, simply set model-engine-file=model_b1_gpu0_fp16.engine y network-mode=2 adentro config_infer_primary_yoloV8.txt

Calibración INT8

Si quieres utilizar la precisión INT8 para la inferencia, debes seguir los siguientes pasos

  1. Poner OPENCV Variable de entorno

    export OPENCV=1
    
  2. Compilar la biblioteca

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
    
  3. Para el conjunto de datos COCO, descarga el val2017, extraer, y pasar a DeepStream-Yolo carpeta

  4. Crear un nuevo directorio para las imágenes de calibración

    mkdir calibration
    
  5. Ejecute lo siguiente para seleccionar 1000 imágenes aleatorias del conjunto de datos COCO para ejecutar la calibración

    for jpg in $(ls -1 val2017/*.jpg | sort -R | head -1000); do \
        cp ${jpg} calibration/; \
    done
    

    Nota

    NVIDIA recommends at least 500 images to get a good accuracy. On this example, 1000 images are chosen to get better accuracy (more images = more accuracy). You can set it from head -1000. For example, for 2000 images, head -2000. This process can take a long time.

  6. Cree el archivo calibration.txt Archivo con todas las imágenes seleccionadas

    realpath calibration/*jpg > calibration.txt
    
  7. Establecer variables de entorno

    export INT8_CALIB_IMG_PATH=calibration.txt
    export INT8_CALIB_BATCH_SIZE=1
    

    Nota

    Valores más altos de INT8_CALIB_BATCH_SIZE darán como resultado más precisión y mayor velocidad de calibración. Ajústalo en función de tu memoria GPU .

  8. Actualice el archivo config_infer_primary_yoloV8.txt archivo

    En

    ...
    model-engine-file=model_b1_gpu0_fp32.engine
    #int8-calib-file=calib.table
    ...
    network-mode=0
    ...
    

    A

    ...
    model-engine-file=model_b1_gpu0_int8.engine
    int8-calib-file=calib.table
    ...
    network-mode=1
    ...
    

Ejecutar inferencia

deepstream-app -c deepstream_app_config.txt

Configuración de MultiStream

Para configurar varias secuencias en una sola aplicación de flujo profundo, puede realizar los siguientes cambios en el archivo deepstream_app_config.txt archivo

  1. Cambie las filas y columnas para crear una visualización de cuadrícula de acuerdo con el número de secuencias que desee tener. Por ejemplo, para 4 flujos, podemos agregar 2 filas y 2 columnas.

    [tiled-display]
    rows=2
    columns=2
    
  2. Poner num-sources=4 y añade uri de las 4 corrientes

    [source0]
    enable=1
    type=3
    uri=<path_to_video>
    uri=<path_to_video>
    uri=<path_to_video>
    uri=<path_to_video>
    num-sources=4
    

Ejecutar inferencia

deepstream-app -c deepstream_app_config.txt
Configuración multisecuencia

Resultados de referencia

La tabla siguiente resume el rendimiento de los modelos YOLOv8s a diferentes niveles de precisión TensorRT con un tamaño de entrada de 640x640 en NVIDIA Jetson Orin NX 16GB.

Nombre del modeloPrecisiónTiempo de inferencia (ms/im)FPS
YOLOv8sFP3215.6364
FP167.94126
INT85.53181

Agradecimientos

Esta guía fue creada inicialmente por nuestros amigos de Seeed Studio, Lakshantha y Elaine.

PREGUNTAS FRECUENTES

How do I set up Ultralytics YOLO11 on an NVIDIA Jetson device?

To set up Ultralytics YOLO11 on an NVIDIA Jetson device, you first need to install the DeepStream SDK compatible with your JetPack version. Follow the step-by-step guide in our Quick Start Guide to configure your NVIDIA Jetson for YOLO11 deployment.

What is the benefit of using TensorRT with YOLO11 on NVIDIA Jetson?

Using TensorRT with YOLO11 optimizes the model for inference, significantly reducing latency and improving throughput on NVIDIA Jetson devices. TensorRT provides high-performance, low-latency deep learning inference through layer fusion, precision calibration, and kernel auto-tuning. This leads to faster and more efficient execution, particularly useful for real-time applications like video analytics and autonomous machines.

Can I run Ultralytics YOLO11 with DeepStream SDK across different NVIDIA Jetson hardware?

Yes, the guide for deploying Ultralytics YOLO11 with the DeepStream SDK and TensorRT is compatible across the entire NVIDIA Jetson lineup. This includes devices like the Jetson Orin NX 16GB with JetPack 5.1.3 and the Jetson Nano 4GB with JetPack 4.6.4. Refer to the section DeepStream Configuration for YOLO11 for detailed steps.

How can I convert a YOLO11 model to ONNX for DeepStream?

To convert a YOLO11 model to ONNX format for deployment with DeepStream, use the utils/export_yoloV8.py script del DeepStream-Yolo repositorio.

Aquí tienes un comando de ejemplo:

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

Para más detalles sobre la conversión de modelos, consulta nuestra sección de exportación de modelos.

What are the performance benchmarks for YOLO on NVIDIA Jetson Orin NX?

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

  • FP32 Precisión: 15,63 ms/im, 64 FPS
  • FP16 Precisión: 7,94 ms/im, 126 FPS
  • INT8 Precisión: 5,53 ms/im, 181 FPS

These benchmarks underscore the efficiency and capability of using TensorRT-optimized YOLO11 models on NVIDIA Jetson hardware. For further details, see our Benchmark Results section.

📅 Created 4 months ago ✏️ Updated 1 month ago

Comentarios