YOLO Vision 2026:

Ultralytics YOLO26 en NVIDIA Jetson utilizando DeepStream SDK y TensorRT#



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

Esta guía completa ofrece una descripción detallada para implementar Ultralytics YOLO26 en dispositivos NVIDIA Jetson utilizando el DeepStream SDK y TensorRT. Aquí usamos TensorRT para maximizar el rendimiento de inferencia en la plataforma Jetson.

Esta guía repasa la configuración de DeepStream para YOLO26, la calibración INT8, la configuración multi-flujo y los resultados de las pruebas de rendimiento.

NVIDIA DeepStream SDK on Jetson platform
Nota

Esta guía se ha probado con el kit 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 de JetPack JP5.1.3, y Seeed Studio reComputer J1020 v2, que está basado en NVIDIA Jetson Nano 4GB ejecutando la versión de JetPack JP4.6.4. Se espera que funcione en toda la gama de hardware de NVIDIA Jetson, tanto en los modelos más recientes como en los heredados.

¿Qué es NVIDIA DeepStream?#

El DeepStream SDK de NVIDIA es un kit de herramientas de análisis de transmisión completo basado en GStreamer para 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 fabricantes de equipos originales (OEM) que crean aplicaciones y servicios de IVA (análisis de vídeo inteligente). Ahora puedes crear canalizaciones de procesamiento de transmisiones que incorporan redes neuronales y otras tareas de procesamiento complejas como seguimiento, codificación/decodificación de vídeo y renderizado de vídeo. Estas canalizaciones permiten realizar análisis en tiempo real de datos de vídeo, imágenes 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 en las instalaciones, en el borde y en la nube.

Requisitos previos#

Antes de comenzar a seguir esta guía:

Consejo

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

Configuración de DeepStream para YOLO26#

Aquí utilizamos el repositorio de GitHub marcoslucianops/DeepStream-Yolo, que incluye compatibilidad con el NVIDIA DeepStream SDK para modelos YOLO. ¡Agradecemos los esfuerzos 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 un modelo de detección Ultralytics YOLO26 (.pt) de tu elección desde el proyecto YOLO26. 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 valor predeterminado de opset es 17.

--opset 12

Para cambiar el tamaño de inferencia (predeterminado: 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 tamaño de lote dinámico (DeepStream >= 6.1)

--dynamic

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

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

    cp yolo26s.onnx labels.txt ~/DeepStream-Yolo
    cd ~/DeepStream-Yolo
  2. Establece 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
  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 según tu modelo (para YOLO26s con 80 clases).

    [property]
    ...
    onnx-file=yolo26s.onnx
    ...
    num-detected-classes=80
    ...
    parse-bbox-func-name=NvDsInferParseYolo
    ...
Configuraciones de precisión de YOLO26

YOLO26 redimensiona la entrada con relleno en el centro y se ejecuta sin NMS. Para obtener la mejor precisión, añade lo siguiente a la sección [property] de config_infer_primary_yolo26.txt:

[property]
...
maintain-aspect-ratio=1
symmetric-padding=1
cluster-mode=4
...
  1. Edita el archivo deepstream_app_config.

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

    ...
    [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á un tiempo en generar el archivo del motor TensorRT antes de iniciar la inferencia. Por favor, ten paciencia.

YOLO26 with deepstream
Consejo

Si deseas 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 deseas utilizar precisión INT8 para la inferencia, debes 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 la cual debería funcionar.

  1. Configura 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 realizar 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 mayor precisión (más imágenes = más precisión). Puedes configurarlo con 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 resultarán en mayor precisión y una velocidad de calibración más rápida. Ajústalo según la memoria de tu GPU.

  1. Actualiza el archivo config_infer_primary_yolo26.txt.

    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 INT8#

Ejecuta el mismo comando para crear el motor INT8 e iniciar la inferencia:

deepstream-app -c deepstream_app_config.txt

Configuración de múltiples flujos (MultiStream)#



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

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

  1. Cambia las filas y columnas para crear una visualización en cuadrícula de acuerdo con la cantidad de flujos que desees tener. Por ejemplo, para 4 flujos, podemos añadir 2 filas y 2 columnas.

    [tiled-display]
    rows=2
    columns=2
  2. Añade un grupo [sourceN] independiente para cada flujo, cada uno con su propio uri y num-sources=1.

    [source0]
    enable=1
    type=3
    uri=file:///path/to/video1.mp4
    num-sources=1
    
    [source1]
    enable=1
    type=3
    uri=file:///path/to/video2.mp4
    num-sources=1
    
    [source2]
    enable=1
    type=3
    uri=file:///path/to/video3.mp4
    num-sources=1
    
    [source3]
    enable=1
    type=3
    uri=file:///path/to/video4.mp4
    num-sources=1

Ejecutar inferencia de múltiples flujos#

Ejecuta el mismo comando para lanzar todos los flujos en la pantalla de mosaico:

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

Resultados de los benchmarks#

Las siguientes pruebas de rendimiento resumen cómo funcionan los modelos YOLO11 en diferentes niveles de precisión de TensorRT con un tamaño de entrada de 640x640 en NVIDIA Jetson Orin NX 16GB. YOLO26 utiliza el mismo flujo de trabajo de exportación e inferencia de DeepStream descrito anteriormente.

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.

FAQ#

  • Para configurar Ultralytics YOLO26 en un dispositivo NVIDIA Jetson, primero debes 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.

  • El uso de TensorRT con YOLO26 optimiza el modelo para la inferencia, lo que reduce significativamente la latencia y mejora el rendimiento en los dispositivos NVIDIA Jetson. TensorRT proporciona 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 núcleos. Esto permite 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.

  • Sí, la guía para implementar Ultralytics YOLO26 con el DeepStream SDK y TensorRT es compatible con toda la gama de 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 ver los pasos detallados.

  • 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 ejemplo de comando:

    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.

  • Para ejecutar la inferencia INT8, calibra el modelo en un conjunto de imágenes representativo y cambia la configuración de DeepStream al modo INT8. Descarga las imágenes COCO val2017, selecciona alrededor de 1000 imágenes de calibración, configura las variables de entorno INT8_CALIB_IMG_PATH y INT8_CALIB_BATCH_SIZE, y luego actualiza config_infer_primary_yolo26.txt con model-engine-file=model_b1_gpu0_int8.engine, int8-calib-file=calib.table y network-mode=1. Consulta la sección Calibración INT8 para ver los pasos completos. INT8 requiere actualmente TensorRT 8.x.

  • Para procesar múltiples flujos en una sola aplicación de DeepStream, edita el archivo deepstream_app_config.txt para añadir una cuadrícula de visualización en mosaico y enumera cada URI de origen. Configura rows y columns bajo [tiled-display] para construir la cuadrícula, añade un grupo [sourceN] independiente por flujo con su propio uri y num-sources=1, y ajusta la cuadrícula para que se adapte al número de flujos. Consulta la sección Configuración multi-flujo para ver un ejemplo completo.

  • El rendimiento de los modelos YOLO11 en NVIDIA Jetson Orin NX 16GB varía según los niveles de precisión de TensorRT. Por ejemplo, los modelos YOLO11s alcanzan:

    • Precisión FP32: 14,53 ms/im, 68,8 FPS
    • Precisión FP16: 7,91 ms/im, 126 FPS
    • Precisión INT8: 6,05 ms/im, 165 FPS

    Estas pruebas de rendimiento subrayan la eficiencia y la capacidad de utilizar modelos YOLO11 optimizados para TensorRT en hardware de NVIDIA Jetson. Para más detalles, consulta nuestra sección de Resultados de las pruebas de rendimiento.

Comentarios