Ir al contenido

Ultralytics YOLO26 en NVIDIA Jetson utilizando DeepStream SDK y TensorRT



Ver: Cómo usar los modelos Ultralytics YOLO26 con NVIDIA Deepstream en Jetson Orin NX 🚀

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

SDK NVIDIA en la plataforma Jetson

Nota

Esta guía se ha probado con NVIDIA Jetson Orin Nano Super Developer Kit ejecutando la última versión estable de JetPack de JP6.1, Seeed Studio reComputer J4012 que se basa en NVIDIA Jetson Orin NX 16GB ejecutando la versión de JetPack JP5.1.3 y Seeed Studio reComputer J1020 v2 que se basa en NVIDIA Jetson Nano 4GB ejecutando la versión de JetPack JP4.6.4. Se espera que funcione en toda la línea de hardware NVIDIA Jetson, incluyendo las versiones más recientes y las heredadas.

¿Qué es NVIDIA DeepStream?

El SDK DeepStream de NVIDIA es un completo kit de herramientas de análisis de streaming basado en GStreamer para el procesamiento multisensor basado en IA, vídeo, audio y comprensión de imágenes. Es ideal para desarrolladores de visión artificial, socios de software, startups y OEM que crean aplicaciones y servicios IVA (Intelligent Video Analytics). Ahora puedes crear pipelines de procesamiento de flujos que incorporen redes neuronales y otras tareas de procesamiento complejas como el seguimiento, la codificación/descodificación de vídeo y el renderizado de vídeo. Estos pipelines permiten el análisis en tiempo real de datos de vídeo, imagen y sensores. La compatibilidad multiplataforma de DeepStream te ofrece una forma más rápida y sencilla de desarrollar aplicaciones y servicios de visión artificial on-premise, en el edge y en la nube.

Prerrequisitos

Antes de comenzar a seguir esta guía:

Consejo

En esta guía, hemos utilizado el método de paquete Debian para instalar DeepStream SDK en el dispositivo Jetson. También puede visitar DeepStream SDK en Jetson (Archivado) para acceder a versiones heredadas de DeepStream.

Configuración de DeepStream para YOLO26

Aquí estamos utilizando el repositorio de GitHub marcoslucianops/DeepStream-Yolo, que incluye soporte del SDK NVIDIA DeepStream para modelos YOLO. ¡Agradecemos los esfuerzos de marcoslucianops por sus contribuciones!

  1. Instale Ultralytics con las dependencias necesarias

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

    cd ~
    git clone https://github.com/marcoslucianops/DeepStream-Yolo
    
  3. Copiar el export_yolo26.py archivo de DeepStream-Yolo/utils directorio al ultralytics carpeta

    cp ~/DeepStream-Yolo/utils/export_yolo26.py ~/ultralytics
    cd ultralytics
    
  4. Descargue el modelo de detección Ultralytics YOLO26 (.pt) de su elección desde YOLO26 releases. Aquí utilizamos yolo26s.pt.

    wget https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo26s.pt
    

    Nota

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

  5. Convertir el modelo a ONNX

    python3 export_yolo26.py -w yolo26s.pt
    

    Pase los siguientes argumentos al comando anterior

    Para DeepStream 5.1, elimina el --dynamic arg y usar opset 12 o inferior. El valor por defecto opset es 17.

    --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 usar un tamaño de lote estático (ejemplo para tamaño de lote = 4)

    --batch 4
    
  6. Copiar el generado .onnx archivo de modelo y labels.txt archivo al DeepStream-Yolo carpeta

    cp yolo26s.pt.onnx labels.txt ~/DeepStream-Yolo
    cd ~/DeepStream-Yolo
    
  7. Establezca 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
    

    Para 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_yolo26.txt archivo según su modelo (para YOLO26s con 80 clases)

    [property]
    ...
    onnx-file=yolo26s.pt.onnx
    ...
    num-detected-classes=80
    ...
    
  10. Editar el deepstream_app_config archivo

    ...
    [primary-gie]
    ...
    config-file=config_infer_primary_yolo26.txt
    
  11. 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 del motor TensorRT antes de comenzar la inferencia. Por favor, sea paciente.

YOLO26 con deepstream

Consejo

Si quieres convertir el modelo a precisión FP16, simplemente establece model-engine-file=model_b1_gpu0_fp16.engine y network-mode=2 dentro de config_infer_primary_yolo26.txt

Calibración INT8

Si desea utilizar la precisión INT8 para la inferencia, debe seguir los pasos que se indican a continuación:

Nota

Actualmente, INT8 no funciona con TensorRT 10.x. Esta sección de la guía se ha probado con TensorRT 8.x, que se espera que funcione.

  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, descarga el val2017, extraiga y mueva 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 eligen 1000 imágenes para obtener una mejor precisión (más imágenes = más precisión). Puede configurarlo desde head -1000. Por ejemplo, para 2000 imágenes, head -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

    Los valores más altos de INT8_CALIB_BATCH_SIZE darán como resultado una mayor precisión y una calibración más rápida. Ajústelo de acuerdo con la memoria de su GPU.

  8. Actualizar el config_infer_primary_yolo26.txt archivo

    De

    ...
    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



Ver: Cómo ejecutar múltiples flujos con DeepStream SDK en Jetson Nano utilizando Ultralytics YOLO26 🎉

Para configurar múltiples flujos en una sola aplicación DeepStream, realiza los siguientes cambios en el 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ñade el uri entradas para los cuatro flujos.

    [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
    

Ejecutar Inferencia

deepstream-app -c deepstream_app_config.txt
Configuración de transmisión multicámara DeepStream

Resultados de las pruebas de rendimiento

Los siguientes benchmarks resumen cómo se desempeñan los modelos YOLO26 en diferentes niveles de precisión de TensorRT con un tamaño de entrada de 640x640 en NVIDIA Jetson Orin NX 16GB.

Gráfico comparativo

Pruebas de rendimiento NVIDIA DeepStream

Tabla de comparación detallada

Rendimiento

FormatoEstadoTiempo de inferencia (ms/im)
TensorRT (FP32)8.64
TensorRT (FP16)5.27
TensorRT (INT8)4.54
FormatoEstadoTiempo de inferencia (ms/im)
TensorRT (FP32)14.53
TensorRT (FP16)7.91
TensorRT (INT8)6.05
FormatoEstadoTiempo de inferencia (ms/im)
TensorRT (FP32)32.05
TensorRT (FP16)15.55
TensorRT (INT8)10.43
FormatoEstadoTiempo de inferencia (ms/im)
TensorRT (FP32)39.68
TensorRT (FP16)19.88
TensorRT (INT8)13.64
FormatoEstadoTiempo 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 configuro Ultralytics YOLO26 en un dispositivo NVIDIA Jetson?

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

¿Cuál es el beneficio de usar TensorRT con YOLO26 en NVIDIA Jetson?

El uso de TensorRT con YOLO26 optimiza el modelo para la inferencia, reduciendo significativamente la latencia y mejorando el rendimiento en dispositivos NVIDIA Jetson. TensorRT proporciona inferencia de deep learning de alto rendimiento y baja latencia mediante la fusión de capas, la calibración de precisión y el autoajuste del kernel. 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 YOLO26 con DeepStream SDK en diferentes hardware NVIDIA Jetson?

Sí, la guía para desplegar Ultralytics YOLO26 con el SDK de DeepStream y TensorRT es compatible con toda la línea NVIDIA Jetson. 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 YOLO26 para obtener los pasos detallados.

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

Para convertir un modelo YOLO26 al formato ONNX para su despliegue con DeepStream, utilice el utils/export_yolo26.py script del DeepStream-Yolo repositorio.

Aquí tiene un comando de ejemplo:

python3 utils/export_yolo26.py -w yolo26s.pt --opset 12 --simplify

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

¿Cuáles son los puntos de referencia de rendimiento para YOLO en NVIDIA Jetson Orin NX?

El rendimiento de los modelos YOLO26 en NVIDIA Jetson Orin NX 16GB varía según los niveles de precisión de TensorRT. Por ejemplo, los modelos YOLO26s logran:

  • Precisión FP32: 14.6 ms/im, 68.5 FPS
  • Precisión FP16: 7.94 ms/im, 126 FPS
  • Precisión INT8: 5.95 ms/im, 168 FPS

Estos puntos de referencia subrayan la eficiencia y capacidad de utilizar modelos YOLO26 optimizados con TensorRT en hardware NVIDIA Jetson. Para más detalles, consulte nuestra sección de Resultados de Benchmarking.



📅 Creado hace 1 año ✏️ Actualizado hace 7 días
glenn-jocherRizwanMunawarlakshanthadpderrengermiles-deans-ultralyticsY-T-GUltralyticsAssistantMatthewNoyce

Comentarios