Ultralytics YOLO26 en NVIDIA Jetson usando DeepStream SDK y TensorRT



Watch: How to use Ultralytics YOLO26 models with NVIDIA Deepstream on Jetson Orin NX 🚀

Esta guía exhaustiva proporciona un recorrido detallado para implementar Ultralytics YOLO26 en dispositivos NVIDIA Jetson usando DeepStream SDK y TensorRT. Aquí usamos TensorRT para maximizar el rendimiento de inferencia en la plataforma Jetson.

NVIDIA DeepStream SDK on Jetson platform
Nota

Esta guía ha sido probada con NVIDIA Jetson Orin Nano Super Developer Kit ejecutando la última versión estable de JetPack JP6.1, Seeed Studio reComputer J4012 que está basado en NVIDIA Jetson Orin NX 16GB ejecutando la versión JetPack JP5.1.3 y Seeed Studio reComputer J1020 v2 que está basado en NVIDIA Jetson Nano 4GB ejecutando la versión JetPack JP4.6.4. Se espera que funcione en toda la gama de hardware de NVIDIA Jetson, incluyendo los modelos actuales y antiguos.

¿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 de paquetes 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 YOLO26

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

  1. Instala 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. Clona el repositorio DeepStream-Yolo

    cd ~
    git clone https://github.com/marcoslucianops/DeepStream-Yolo
  3. Copia el archivo export_yolo26.py del directorio DeepStream-Yolo/utils a la carpeta ultralytics

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

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

También puedes usar un modelo YOLO26 entrenado a medida.

  1. Convierte el modelo a ONNX

    python3 export_yolo26.py -w yolo26s.pt
Pasa los siguientes argumentos al comando anterior

Para DeepStream 5.1, elimina el argumento --dynamic y usa opset 12 o inferior. El opset por defecto 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 usar tamaño de lote dinámico (DeepStream >= 6.1)

--dynamic

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

--batch 4
  1. Copia el archivo del modelo .onnx generado y el archivo labels.txt a la carpeta DeepStream-Yolo

    cp yolo26s.pt.onnx labels.txt ~/DeepStream-Yolo
    cd ~/DeepStream-Yolo
  2. Configura la versión de 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

    Para JetPack 6.1:

    export CUDA_VER=12.6
  3. Compila la biblioteca

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
  4. Edita el archivo config_infer_primary_yolo26.txt de acuerdo con tu modelo (para YOLO26s con 80 clases)

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

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

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

Ejecuta la inferencia

deepstream-app -c deepstream_app_config.txt
Nota

Tardará mucho tiempo en generar el archivo del motor TensorRT antes de iniciar la inferencia. Así que por favor ten paciencia.

YOLO26 with deepstream
Consejo

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

Calibración INT8

Si quieres usar precisión INT8 para la inferencia, necesitas seguir los pasos a continuación:

Nota

Actualmente INT8 no funciona con TensorRT 10.x. Esta sección de la guía ha sido probada con TensorRT 8.x, con el cual debería funcionar.

  1. Establece la variable de entorno OPENCV

    export OPENCV=1
  2. Compila la biblioteca

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
  3. Para el conjunto de datos COCO, descarga val2017, extráelo y muévelo a la carpeta DeepStream-Yolo

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

    mkdir calibration
  5. Ejecuta 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). Puedes establecerlo desde head -1000. Por ejemplo, para 2000 imágenes, head -2000. Este proceso puede llevar mucho tiempo.

  1. Crea el archivo calibration.txt con todas las imágenes seleccionadas

    realpath calibration/*jpg > calibration.txt
  2. Establece las 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 una mayor precisión y una velocidad de calibración más rápida. Configúralo de acuerdo con la memoria de tu GPU.

  1. Actualiza el archivo config_infer_primary_yolo26.txt

    Desde

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

    Hasta

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

Ejecuta la inferencia

deepstream-app -c deepstream_app_config.txt

Configuración de MultiStream



Watch: How to Run Multi-Stream Inference with Ultralytics YOLO26 using NVIDIA DeepStream on Jetson Orin 🚀

Para configurar múltiples flujos en una sola aplicación de DeepStream, realiza los siguientes cambios en el archivo deepstream_app_config.txt:

  1. Cambia las filas y columnas para construir una visualización en cuadrícula de acuerdo con el número de flujos que quieras tener. Por ejemplo, para 4 flujos, podemos añadir 2 filas y 2 columnas.

    [tiled-display]
    rows=2
    columns=2
  2. Establece num-sources=4 y añade las entradas uri 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

Ejecuta la inferencia

deepstream-app -c deepstream_app_config.txt
DeepStream multi-camera streaming configuration

Resultados de los benchmarks

Los siguientes benchmarks resumen cómo funcionan 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

NVIDIA Jetson DeepStream performance benchmarks

Tabla comparativa detallada

Rendimiento
FormatoEstadoTiempo de inferencia (ms/im)
TensorRT (FP32)8.64
TensorRT (FP16)5.27
TensorRT (INT8)4.54

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 necesitas instalar el DeepStream SDK compatible con tu versión de JetPack. Sigue la guía paso a paso en nuestra Guía de inicio rápido para configurar tu NVIDIA Jetson para la implementación de YOLO26.

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

Usar TensorRT con YOLO26 optimiza el modelo para la inferencia, reduciendo significativamente la latencia y mejorando el rendimiento en dispositivos NVIDIA Jetson. TensorRT proporciona una inferencia de aprendizaje profundo de alto rendimiento y baja latencia mediante la fusión de capas, la calibración de precisión y el ajuste automático de kernels. Esto conduce a una ejecución más rápida y eficiente, especialmente útil para aplicaciones en tiempo real como análisis de vídeo y máquinas autónomas.

¿Puedo ejecutar Ultralytics YOLO26 con DeepStream SDK en diferentes hardware NVIDIA Jetson?

Sí, la guía para implementar Ultralytics YOLO26 con DeepStream SDK y TensorRT es compatible con toda la gama 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. Consulta la sección Configuración de DeepStream para YOLO26 para conocer los pasos detallados.

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

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

Aquí tienes 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 benchmarks 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 benchmarks subrayan la eficiencia y capacidad de usar modelos YOLO26 optimizados con TensorRT en hardware NVIDIA Jetson. Para más detalles, consulta nuestra sección Resultados de los benchmarks.

Comentarios