Ir al contenido

Ultralytics YOLO11 en NVIDIA Jetson utilizando DeepStream SDK y TensorRT



Observa: Cómo ejecutar múltiples flujos con DeepStream SDK en Jetson Nano utilizando Ultralytics YOLO11

Esta completa guía proporciona un recorrido detallado para implementar Ultralytics YOLO11 en NVIDIA dispositivos Jetson utilizando DeepStream SDK y TensorRT. Aquí utilizamos TensorRT para maximizar el rendimiento de la inferencia en la plataforma Jetson.

DeepStream en NVIDIA Jetson

Nota

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.

¿Qué es NVIDIA DeepStream?

NVIDIADeepStream SDK es un completo kit de herramientas de análisis de streaming basado en GStreamer para el procesamiento multisensor basado en IA y la comprensión de vídeo, audio e imágenes. Es ideal para desarrolladores de IA de visión, socios de software, nuevas empresas y fabricantes de equipos originales que crean aplicaciones y servicios de IVA (análisis inteligente de vídeo). Ahora puede crear canales de procesamiento de flujos que incorporen redes neuronales y otras tareas de procesamiento complejas como el seguimiento, la codificación y descodificación de vídeo y el renderizado de vídeo. Estos canales permiten el análisis en tiempo real de datos de vídeo, imágenes y sensores. La compatibilidad multiplataforma de DeepStream le ofrece una forma más rápida y sencilla de desarrollar aplicaciones y servicios de IA de visión in situ, en el perímetro y en la nube.

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 DeepStream SDK en el dispositivo Jetson. También puedes visitar DeepStream SDK on Jetson (Archived) para acceder a versiones anteriores de DeepStream.

Configuración de DeepStream para YOLO11

Aquí estamos usando marcoslucianops/DeepStream-Yolo repositorio GitHub que incluye NVIDIA DeepStream SDK soporte para YOLO modelos. Agradecemos los esfuerzos de marcoslucianops por sus contribuciones.

  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 carpeta

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

    Nota

    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
    

    Nota

    También puede utilizar un modelo YOLO11 entrenado a medida.

  5. Convertir el modelo en ONNX

    python3 export_yoloV8.py -w yolo11s.pt
    

    Pase los siguientes argumentos al comando anterior

    Para DeepStream 6.0.1, utilice opset 12 o inferior. El opset por defecto es 16.

    --opset 12
    

    Para cambiar el tamaño de inferencia (por defecto: 640)

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

    Ejemplo para 1280:

    -s 1280
    or
    -s 1280 1280
    

    Para simplificar el modelo ONNX (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 tamaño de lote = 4)

    --batch 4
    
  6. Copy the generated .onnx model file and labels.txt file to the DeepStream-Yolo carpeta

    cp yolo11s.pt.onnx labels.txt ~/DeepStream-Yolo
    cd ~/DeepStream-Yolo
    
  7. Configure la versión CUDA de acuerdo con 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
    

    For Jetpack 6.1:

    export CUDA_VER=12.6
    
  8. Compilar la biblioteca

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
    
  9. Editar el 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. Editar el deepstream_app_config archivo

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

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

Ejecutar Inferencia

deepstream-app -c deepstream_app_config.txt

Nota

Se tardará mucho tiempo en generar el archivo del motor TensorRT antes de iniciar la inferencia. Así que por favor sea paciente.

YOLO11 con 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 en config_infer_primary_yoloV8.txt

Calibración INT8

Si desea utilizar la precisión INT8 para la inferencia, debe seguir los siguientes pasos

Nota

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. Establecer 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, descargue el val2017extraer y mover 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 recomienda al menos 500 imágenes para obtener una buena precisión. En este ejemplo, se han elegido 1000 imágenes para obtener una mayor precisión (más imágenes = más precisión). Se puede ajustar desde head -1000. Por ejemplo, para 2000 imágenes, la cabeza -2000. Este proceso puede llevar mucho tiempo.

  6. Crear el 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 resultarán en mayor precisión y velocidad de calibración. Ajústelo en función de su memoria GPU .

  8. Actualizar el 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 MultiStream

Para configurar varios flujos en una única aplicación de deepstream, puedes realizar los siguientes cambios en el archivo deepstream_app_config.txt archivo

  1. Cambie las filas y columnas para construir una visualización de cuadrícula según el número de flujos que desee tener. Por ejemplo, para 4 flujos, podemos añadir 2 filas y 2 columnas.

    [tiled-display]
    rows=2
    columns=2
    
  2. Establecer num-sources=4 y añada uri de los 4 flujos

    [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

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.

Cuadro comparativo

Jetson DeepStream Benchmarks Chart

Cuadro comparativo detallado

Rendimiento

Formato Estado Tiempo de inferencia (ms/im)
TensorRT (FP32) 8.64
TensorRT (FP16) 5.27
TensorRT (INT8) 4.54
Formato Estado Tiempo de inferencia (ms/im)
TensorRT (FP32) 14.53
TensorRT (FP16) 7.91
TensorRT (INT8) 6.05
Formato Estado Tiempo de inferencia (ms/im)
TensorRT (FP32) 32.05
TensorRT (FP16) 15.55
TensorRT (INT8) 10.43
Formato Estado Tiempo de inferencia (ms/im)
TensorRT (FP32) 39.68
TensorRT (FP16) 19.88
TensorRT (INT8) 13.64
Formato Estado Tiempo de inferencia (ms/im)
TensorRT (FP32) 80.65
TensorRT (FP16) 39.06
TensorRT (INT8) 22.83

Agradecimientos

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

PREGUNTAS FRECUENTES

¿Cómo se configura Ultralytics YOLO11 en un dispositivo NVIDIA Jetson?

Para configurar Ultralytics YOLO11 en un dispositivo NVIDIA Jetson, primero debe instalar el SDK de DeepStream compatible con su versión de JetPack. Siga la guía paso a paso de nuestra Guía de inicio rápido para configurar su NVIDIA Jetson para la implementación de YOLO11 .

¿Cuál es la ventaja de utilizar TensorRT con YOLO11 en NVIDIA Jetson?

El uso de TensorRT con YOLO11 optimiza el modelo para la inferencia, lo que reduce significativamente la latencia y mejora el rendimiento en los dispositivos Jetson NVIDIA . TensorRT proporciona una inferencia de aprendizaje profundo de alto rendimiento y baja latencia a través de la fusión de capas, la calibración de precisión y el autoajuste del núcleo. Esto conduce a una ejecución más rápida y eficiente, especialmente útil para aplicaciones en tiempo real como el análisis de vídeo y las máquinas autónomas.

¿Puedo ejecutar Ultralytics YOLO11 con DeepStream SDK en diferentes equipos Jetson de NVIDIA ?

Sí, la guía para desplegar Ultralytics YOLO11 con el SDK DeepStream y TensorRT es compatible con toda la gama Jetson de NVIDIA . Esto incluye dispositivos como el Jetson Orin NX 16GB con JetPack 5.1.3 y el Jetson Nano 4GB con JetPack 4.6.4. Consulte la sección Configuración de DeepStream para YOLO11 para conocer los pasos detallados.

¿Cómo puedo convertir un modelo YOLO11 a ONNX para DeepStream?

Para convertir un modelo YOLO11 al formato ONNX para su despliegue con DeepStream, utilice la función utils/export_yoloV8.py del DeepStream-Yolo repositorio.

Aquí tienes un comando de ejemplo:

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

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

¿Cuáles son las pruebas de rendimiento de YOLO en NVIDIA Jetson Orin NX?

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 Precisión: 7,94 ms/im, 126 FPS
  • INT8 Precision: 5.95 ms/im, 168 FPS

Estas pruebas ponen de manifiesto la eficacia y capacidad de utilizar modelos YOLO11 optimizados para TensorRT en el hardware NVIDIA Jetson. Para más información, consulta nuestra sección de resultados de pruebas.

📅 Created 6 months ago ✏️ Updated 4 days ago

Comentarios