Ultralytics YOLO27:

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 completa ofrece un recorrido detallado para implementar Ultralytics YOLO26 en dispositivos NVIDIA Jetson usando DeepStream SDK y TensorRT. Aquí usamos TensorRT para maximizar el rendimiento de la inferencia en la plataforma Jetson.

Esta guía explica la configuración de DeepStream para YOLO26, la calibración INT8, la configuración multistream y los resultados de las pruebas de rendimiento.

NVIDIA DeepStream SDK on Jetson platform
Nota

Esta guía se ha probado con NVIDIA Jetson Orin Nano Super Developer Kit ejecutando la versión estable más reciente de JetPack, JP6.1, Seeed Studio reComputer J4012, basado en NVIDIA Jetson Orin NX 16GB y ejecutando la versión JP5.1.3 de JetPack, y Seeed Studio reComputer J1020 v2, basado en NVIDIA Jetson Nano 4GB y ejecutando la versión JP4.6.4 de JetPack. Se espera que funcione en toda la gama de hardware NVIDIA Jetson, incluidos los modelos más recientes y los antiguos.

¿Qué es NVIDIA DeepStream?#

El DeepStream SDK de NVIDIA es un kit de herramientas completo de análisis de streaming basado en GStreamer para el procesamiento multisensor basado en IA, así como para la comprensión de vídeo, audio e imágenes. Es ideal para desarrolladores de IA para visión, socios de software, startups y OEM que crean aplicaciones y servicios de IVA (analítica de vídeo inteligente). Ahora puedes crear canalizaciones de procesamiento de streams que incorporen redes neuronales y otras tareas de procesamiento complejas, como el seguimiento, la codificación y decodificación de vídeo y la renderización de vídeo. Estas canalizaciones permiten realizar análisis en tiempo real de vídeo, imágenes y datos de sensores. La compatibilidad multiplataforma de DeepStream te ofrece una forma más rápida y sencilla de desarrollar aplicaciones y servicios de IA para visión en las instalaciones, en el edge 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 en Jetson (archivado) para acceder a versiones antiguas de DeepStream.

Configuración de DeepStream para YOLO26#

Aquí usamos el repositorio de GitHub marcoslucianops/DeepStream-Yolo, que incluye compatibilidad con NVIDIA DeepStream SDK para modelos YOLO. ¡Agradecemos el trabajo de marcoslucianops y sus contribuciones!

  1. Instala Ultralytics con las dependencias necesarias

    pip install ultralytics onnx onnxslim
  2. Clona el repositorio DeepStream-Yolo

    cd ~
    git clone https://github.com/marcoslucianops/DeepStream-Yolo
  3. Descarga el modelo de detección de Ultralytics YOLO26 (.pt) que prefieras 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 y escribe el archivo labels.txt del que DeepStream lee los nombres de las clases

    from ultralytics import YOLO
    
    model = YOLO("yolo26s.pt")
    model.export(format="onnx", nms=False, agnostic_nms=True)  # creates 'yolo26s.onnx'
    with open("labels.txt", "w") as f:
        f.write("\n".join(model.names.values()))
Argumentos de exportación

nms=False exporta la cabeza sin NMS, y agnostic_nms=True mantiene una única clase por detección para que cluster-mode=4 (sin agrupamiento) en la configuración de DeepStream no dibuje una caja dos veces. Añade imgsz=1280 para cambiar el tamaño de inferencia (predeterminado: 640), batch=4 para un tamaño de lote de 4 (el lote exportado es estático, por lo que debe coincidir con batch-size en la configuración de DeepStream), y opset=12 para TensorRT 8.2 o anterior (DeepStream 6.0.1 y versiones anteriores). Consulta los export arguments para ver la lista completa.

  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

    Para JetPack 7.1:

    export CUDA_VER=13.0
  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
    ...
Ajustes de precisión de YOLO26

YOLO26 cambia el tamaño de la entrada con relleno centrado 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

Se tardará bastante en generar el archivo del motor TensorRT antes de iniciar la inferencia. Ten paciencia.

YOLO26 with deepstream
Consejo

Si quieres convertir el modelo a precisión FP16, solo tienes que establecer 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, debes seguir los pasos siguientes:

Nota

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

  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 directorio nuevo para las imágenes de calibración

    mkdir calibration
  5. Ejecuta lo siguiente para seleccionar 1000 imágenes aleatorias del conjunto de datos COCO y 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 = mayor precisión). Puedes establecerlo mediante head -1000. Por ejemplo, para 2000 imágenes, head -2000. Este proceso puede tardar bastante.

  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

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. Establécelo 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
    ...

Ejecuta la inferencia INT8#

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

deepstream-app -c deepstream_app_config.txt

Configuración multistream#



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

Para configurar varios streams en una sola aplicación de DeepStream, realiza los cambios siguientes en el archivo deepstream_app_config.txt:

  1. Cambia las filas y columnas para crear una cuadrícula según el número de streams que quieras tener. Por ejemplo, para 4 streams, podemos añadir 2 filas y 2 columnas.

    [tiled-display]
    rows=2
    columns=2
  2. Añade un grupo [sourceN] independiente para cada stream, 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

Ejecuta la inferencia multistream#

Ejecuta el mismo comando para iniciar todos los streams en la vista en mosaico:

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

Resultados de las pruebas de rendimiento#

Las siguientes pruebas de rendimiento resumen el rendimiento de los modelos YOLO11 con distintos 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.

Preguntas frecuentes#

  • Para configurar Ultralytics YOLO26 en un dispositivo NVIDIA Jetson, primero debes instalar DeepStream SDK compatible con tu versión de JetPack. Sigue la guía paso a paso de nuestra Guía de inicio rápido para configurar tu NVIDIA Jetson para implementar YOLO26.

  • Usar TensorRT con YOLO26 optimiza el modelo para la inferencia, lo que reduce significativamente la latencia y mejora 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 ajuste automático de kernels. Esto permite 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.

  • 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 Jetson Orin NX 16GB con JetPack 5.1.3 y Jetson Nano 4GB con JetPack 4.6.4. Consulta la sección Configuración de DeepStream para YOLO26 para obtener instrucciones detalladas.

  • Exporta el modelo con la cabeza sin NMS utilizando el exportador de Ultralytics, y escribe el archivo labels.txt del que DeepStream lee los nombres de las clases:

    from ultralytics import YOLO
    
    model = YOLO("yolo26s.pt")
    model.export(format="onnx", nms=False, agnostic_nms=True)  # creates 'yolo26s.onnx'
    with open("labels.txt", "w") as f:
        f.write("\n".join(model.names.values()))

    Añade opset=12 para TensorRT 8.2 o anterior (DeepStream 6.0.1 y versiones anteriores). Para obtener más detalles sobre la conversión de modelos, consulta nuestra model export section.

  • Para ejecutar inferencia INT8, calibra el modelo con un conjunto representativo de imágenes y cambia la configuración de DeepStream al modo INT8. Descarga las imágenes val2017 de COCO, selecciona unas 1000 imágenes de calibración, establece las variables de entorno INT8_CALIB_IMG_PATH y INT8_CALIB_BATCH_SIZE y 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 todos los pasos. Actualmente, INT8 requiere TensorRT 8.x.

  • Para procesar varios streams en una sola aplicación de DeepStream, edita el archivo deepstream_app_config.txt para añadir una cuadrícula de vista en mosaico y enumerar el URI de cada fuente. Establece rows y columns dentro de [tiled-display] para crear la cuadrícula, añade un grupo [sourceN] independiente por stream con su propio uri y num-sources=1, y ajusta la cuadrícula al número de streams. Consulta la sección Configuración multistream 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 ponen de manifiesto la eficiencia y capacidad de usar modelos YOLO11 optimizados con TensorRT en hardware NVIDIA Jetson. Para obtener más información, consulta nuestra sección de Resultados de las pruebas de rendimiento.

Comentarios