Ultralytics YOLOv8 en NVIDIA Jetson usando DeepStream SDK y TensorRT
Esta completa gu铆a proporciona un recorrido detallado para implementar Ultralytics YOLOv8 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 tanto con el Seeed Studio reComputer J4012 basado en NVIDIA Jetson Orin NX 16GB ejecutando la versi贸n de JetPack JP5 .1. 3 como con el Seeed Studio reComputer J1020 v2 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 NVIDIA Jetson, incluyendo el m谩s reciente y el heredado.
驴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 IA de visi贸n, socios de software, startups y fabricantes de equipos originales que crean aplicaciones y servicios de IVA (An谩lisis Inteligente de V铆deo). Ahora puedes crear canalizaciones de procesamiento de flujos que incorporen redes neuronales y otras tareas de procesamiento complejas como el seguimiento, la codificaci贸n/decodificaci贸n de v铆deo y la renderizaci贸n de v铆deo. Estos canales permiten el 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 IA de visi贸n in situ, en el per铆metro y en la nube.
Requisitos previos
Antes de empezar a seguir esta gu铆a:
- Visita nuestra documentaci贸n, Gu铆a de inicio r谩pido: NVIDIA Jetson con Ultralytics YOLOv8 para configurar tu dispositivo NVIDIA Jetson con Ultralytics YOLOv8
-
Instala DeepStream SDK seg煤n la versi贸n de JetPack
- Para JetPack 4.6.4, instala DeepStream 6.0.1
- Para JetPack 5.1.3, instala DeepStream 6.3
Consejo
En esta gu铆a hemos utilizado el m茅todo del paquete Debian para instalar el SDK de DeepStream en el dispositivo Jetson. Tambi茅n puedes visitar DeepStream SDK on Jetson (Archivado) para acceder a las versiones anteriores de DeepStream.
Configuraci贸n de DeepStream para YOLOv8
Aqu铆 estamos utilizando marcoslucianops/DeepStream-Yolo repositorio GitHub que incluye soporte NVIDIA DeepStream SDK para modelos YOLO . 隆Agradecemos los esfuerzos de marcoslucianops por sus contribuciones!
-
Instalar dependencias
-
Clonar el siguiente repositorio
-
Descarga Ultralytics YOLOv8 modelo de detecci贸n (.pt) que elijas de las versiones deYOLOv8 . Aqu铆 utilizamos yolov8s.pt.
Nota
Tambi茅n puedes utilizar un modelo YOLOv8 entrenado a medida.
-
Convertir modelo en ONNX
Pase los siguientes argumentos al comando anterior
Para DeepStream 6.0.1, utilice el opset 12 o inferior. El conjunto de operaciones predeterminado es 16.
Para cambiar el tama帽o de inferencia (valor predeterminado: 640)
Ejemplo para 1280:
Para simplificar el ONNX modelo (DeepStream >= 6.0)
Para utilizar el tama帽o de lote din谩mico (DeepStream >= 6.1)
Para utilizar el tama帽o de lote est谩tico (ejemplo para el tama帽o de lote = 4)
-
Establezca la versi贸n de CUDA de acuerdo con la versi贸n de JetPack instalada
Para JetPack 4.6.4:
Para JetPack 5.1.3:
-
Compilar la biblioteca
-
Edite el archivo
config_infer_primary_yoloV8.txt
de acuerdo con su modelo (para YOLOv8s con 80 clases) -
Edite el archivo
deepstream_app_config
archivo -
Tambi茅n puede cambiar la fuente de v铆deo en
deepstream_app_config
archivo. Aqu铆 se carga un archivo de v铆deo predeterminado
Ejecutar inferencia
Nota
Tomar谩 mucho tiempo generar el archivo TensorRT engine antes de iniciar la inferencia. As铆 que, por favor, ten paciencia.
Consejo
Si desea convertir el modelo a la precisi贸n FP16, simplemente configure model-engine-file=model_b1_gpu0_fp16.engine
y network-mode=2
adentro config_infer_primary_yoloV8.txt
Calibraci贸n INT8
Si quieres utilizar la precisi贸n INT8 para la inferencia, debes seguir los siguientes pasos
-
Poner
OPENCV
Variable de entorno -
Compilar la biblioteca
-
Para el conjunto de datos COCO, descarga el val2017, extraer, y pasar a
DeepStream-Yolo
carpeta -
Crear un nuevo directorio para las im谩genes de calibraci贸n
-
Ejecute lo siguiente para seleccionar 1000 im谩genes aleatorias del conjunto de datos COCO para ejecutar la calibraci贸n
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 ajustarlo desde la cabeza -1000. Por ejemplo, para 2000 im谩genes, cabeza -2000. Este proceso puede llevar mucho tiempo.
-
Cree el archivo
calibration.txt
Archivo con todas las im谩genes seleccionadas -
Establecer variables de entorno
Nota
Los valores de INT8_CALIB_BATCH_SIZE m谩s altos dar谩n como resultado una mayor precisi贸n y una velocidad de calibraci贸n m谩s r谩pida. Config煤relo de acuerdo con la memoria de su GPU.
-
Actualice el archivo
config_infer_primary_yoloV8.txt
archivoEn
A
Ejecutar inferencia
Configuraci贸n de MultiStream
Para configurar varias secuencias en una sola aplicaci贸n de flujo profundo, puede realizar los siguientes cambios en el archivo deepstream_app_config.txt
archivo
-
Cambie las filas y columnas para crear una visualizaci贸n de cuadr铆cula de acuerdo con el n煤mero de secuencias que desee tener. Por ejemplo, para 4 flujos, podemos agregar 2 filas y 2 columnas.
-
Poner
num-sources=4
y a帽adeuri
de las 4 corrientes
Ejecutar inferencia
Resultados de referencia
En la tabla siguiente se resume c贸mo YOLOv8s Los modelos se comportan a diferentes TensorRT niveles de precisi贸n con un tama帽o de entrada de 640x640 en NVIDIA Jetson Orin NX de 16 GB.
Nombre del modelo | Precisi贸n | Tiempo de inferencia (ms/im) | FPS |
---|---|---|---|
YOLOv8s | FP32 | 15.63 | 64 |
FP16 | 7.94 | 126 | |
INT8 | 5.53 | 181 |
Agradecimientos
Esta gu铆a fue creada inicialmente por nuestros amigos de Seeed Studio, Lakshantha y Elaine.