Ultralytics YOLO11 en NVIDIA Jetson utilizando DeepStream SDK y TensorRT
Ver: Cómo usar modelos Ultralytics YOLO11 con NVIDIA Deepstream en Jetson Orin NX 🚀
Esta guía completa proporciona un tutorial detallado para implementar Ultralytics YOLO11 en dispositivos NVIDIA Jetson utilizando DeepStream SDK y TensorRT. Aquí utilizamos TensorRT para maximizar el rendimiento de la inferencia 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:
- Visita nuestra documentación, Guía de inicio rápido: NVIDIA Jetson con Ultralytics YOLO11 para configurar tu dispositivo NVIDIA Jetson con Ultralytics YOLO11
- Instalar DeepStream SDK de acuerdo con la versión de JetPack
- Para JetPack 4.6.4, instala DeepStream 6.0.1
- Para JetPack 5.1.3, instala DeepStream 6.3
- Para JetPack 6.1, instala DeepStream 7.1
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 YOLO11
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!
-
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
-
Clonar el repositorio DeepStream-Yolo
cd ~ git clone https://github.com/marcoslucianops/DeepStream-Yolo
-
Copiar el
export_yolo11.py
archivo deDeepStream-Yolo/utils
directorio alultralytics
carpetacp ~/DeepStream-Yolo/utils/export_yolo11.py ~/ultralytics cd ultralytics
-
Descargue el modelo de detección Ultralytics YOLO11 (.pt) de su elección desde lanzamientos de YOLO11. Aquí usamos 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.
-
Convertir el modelo a ONNX
python3 export_yolo11.py -w yolo11s.pt
Pase los siguientes argumentos al comando anterior
Para DeepStream 5.1, elimina el
--dynamic
arg y usaropset
12 o inferior. El valor por defectoopset
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
-
Copiar el generado
.onnx
archivo de modelo ylabels.txt
archivo alDeepStream-Yolo
carpetacp yolo11s.pt.onnx labels.txt ~/DeepStream-Yolo cd ~/DeepStream-Yolo
-
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
-
Compilar la biblioteca
make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
-
Editar el
config_infer_primary_yolo11.txt
archivo según su modelo (para YOLO11s con 80 clases)[property] ... onnx-file=yolo11s.pt.onnx ... num-detected-classes=80 ...
-
Editar el
deepstream_app_config
archivo... [primary-gie] ... config-file=config_infer_primary_yolo11.txt
-
También puede cambiar la fuente de vídeo en
deepstream_app_config
archivo. Aquí se carga un archivo de video 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.

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_yolo11.txt
Calibración INT8
Si quieres utilizar la precisión INT8 para la inferencia, debes seguir los siguientes pasos
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.
-
Establecer
OPENCV
variable de entornoexport OPENCV=1
-
Compilar la biblioteca
make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
-
Para el conjunto de datos COCO, descargue el val2017, extraiga y mueva a
DeepStream-Yolo
carpeta -
Crear un nuevo directorio para las imágenes de calibración
mkdir calibration
-
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.
-
Crear el
calibration.txt
archivo con todas las imágenes seleccionadasrealpath calibration/*jpg > calibration.txt
-
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 resultarán en más precisión y una velocidad de calibración más rápida. Ajústelo de acuerdo con la memoria de su GPU.
-
Actualizar el
config_infer_primary_yolo11.txt
archivoDe
... 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 usando Ultralytics YOLO11 🎉
Para configurar múltiples flujos bajo una sola aplicación deepstream, puedes realizar los siguientes cambios en el deepstream_app_config.txt
archivo
-
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
-
Establecer
num-sources=4
y añadiruri
de los 4 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

Resultados de las pruebas de rendimiento
Los siguientes benchmarks resumen el rendimiento de los modelos YOLO11 en diferentes niveles de precisión de TensorRT con un tamaño de entrada de 640x640 en NVIDIA Jetson Orin NX de 16 GB.
Gráfico comparativo

Tabla de comparación detallada
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 configuro Ultralytics YOLO11 en un dispositivo NVIDIA Jetson?
Para configurar Ultralytics YOLO11 en un dispositivo NVIDIA Jetson, primero debes instalar el SDK de DeepStream 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 YOLO11.
¿Cuál es el beneficio de usar 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 NVIDIA Jetson. 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 ajuste automático del kernel. Esto conduce a una ejecución más rápida y eficiente, particularmente útil para aplicaciones en tiempo real como el análisis de video y las máquinas autónomas.
¿Puedo ejecutar Ultralytics YOLO11 con DeepStream SDK en diferentes hardware NVIDIA Jetson?
Sí, la guía para implementar Ultralytics YOLO11 con el DeepStream SDK 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 YOLO11 para obtener 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, utiliza el utils/export_yolo11.py
script del DeepStream-Yolo repositorio.
Aquí tiene un comando de ejemplo:
python3 utils/export_yolo11.py -w yolo11s.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 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.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 la capacidad de utilizar modelos YOLO11 optimizados para TensorRT en hardware NVIDIA Jetson. Para obtener más detalles, consulte nuestra sección de Resultados de referencia.