Saltar al contenido

Ultralytics YOLOv8 en NVIDIA Jetson utilizando DeepStream SDK y TensorRT

Esta completa gu铆a proporciona un recorrido detallado para desplegar Ultralytics YOLOv8 en NVIDIA dispositivos Jetson utilizando DeepStream SDK y TensorRT. Aqu铆 utilizamos TensorRT para maximizar el rendimiento de la inferencia en la plataforma Jetson.

DeepStream en NVIDIA Jetson

Nota

Esta gu铆a ha sido probada tanto con el Seeed Studio reComputer J4012, basado en NVIDIA Jetson Orin NX 16GB con JetPack JP5.1.3, como con el Seeed Studio reComputer J1020 v2, basado en NVIDIA Jetson Nano 4GB con JetPack JP4.6.4. Se espera que funcione en toda la gama de hardware Jetson de NVIDIA , tanto la m谩s reciente como la heredada.

驴Qu茅 es NVIDIA DeepStream?

NVIDIADeepStream SDK es un completo kit de herramientas de an谩lisis de streaming basado en GStreamer para el procesamiento multisensor basado en IA y la comprensi贸n de v铆deo, audio e im谩genes. Es ideal para desarrolladores de IA de visi贸n, socios de software, empresas emergentes 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:

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 de GitHub que incluye NVIDIA SDK DeepStream compatible con los modelos YOLO . 隆Agradecemos los esfuerzos de marcoslucianops por sus contribuciones!

  1. Instalar dependencias

    pip install cmake
    pip install onnxsim
    
  2. Clonar el siguiente repositorio

    git clone https://github.com/marcoslucianops/DeepStream-Yolo
    cd DeepStream-Yolo
    
  3. Descarga Ultralytics YOLOv8 modelo de detecci贸n (.pt) que elijas de las versiones deYOLOv8 . Aqu铆 utilizamos yolov8s.pt.

    wget https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8s.pt
    

    Nota

    Tambi茅n puedes utilizar un modelo YOLOv8 entrenado a medida.

  4. Convertir modelo en ONNX

    python3 utils/export_yoloV8.py -w yolov8s.pt
    

    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.

    --opset 12
    

    Para cambiar el tama帽o de inferencia (valor predeterminado: 640)

    -s SIZE
    --size SIZE
    -s HEIGHT WIDTH
    --size HEIGHT WIDTH
    

    Ejemplo para 1280:

    -s 1280
    or
    -s 1280 1280
    

    Para simplificar el ONNX modelo (DeepStream >= 6.0)

    --simplify
    

    Para utilizar el tama帽o de lote din谩mico (DeepStream >= 6.1)

    --dynamic
    

    Para utilizar el tama帽o de lote est谩tico (ejemplo para el tama帽o de lote = 4)

    --batch 4
    
  5. Configura 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
    
  6. Compilar la biblioteca

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
    
  7. Edite el archivo config_infer_primary_yoloV8.txt de acuerdo con su modelo (para YOLOv8s con 80 clases)

    [property]
    ...
    onnx-file=yolov8s.onnx
    ...
    num-detected-classes=80
    ...
    
  8. Edite el archivo deepstream_app_config archivo

    ...
    [primary-gie]
    ...
    config-file=config_infer_primary_yoloV8.txt
    
  9. Tambi茅n puede cambiar la fuente de v铆deo en deepstream_app_config archivo. Aqu铆 se carga un archivo de v铆deo 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 TensorRT engine antes de iniciar la inferencia. As铆 que, por favor, ten paciencia.

YOLOv8 con deepstream

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

  1. Poner OPENCV Variable de entorno

    export OPENCV=1
    
  2. Compilar la biblioteca

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
    
  3. Para el conjunto de datos COCO, descarga el val2017, extraer, y pasar a DeepStream-Yolo carpeta

  4. Crear un nuevo directorio para las im谩genes de calibraci贸n

    mkdir calibration
    
  5. 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 mayor precisi贸n (m谩s im谩genes = m谩s precisi贸n). Puedes ajustarlo desde la cabeza -1000. Por ejemplo, para 2000 im谩genes, la cabeza -2000. Este proceso puede llevar mucho tiempo.

  6. Cree el archivo calibration.txt Archivo con todas las im谩genes seleccionadas

    realpath calibration/*jpg > calibration.txt
    
  7. Establecer 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 m谩s precisi贸n y mayor velocidad de calibraci贸n. Aj煤stalo en funci贸n de tu memoria GPU .

  8. Actualice el archivo config_infer_primary_yoloV8.txt archivo

    En

    ...
    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 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

  1. 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.

    [tiled-display]
    rows=2
    columns=2
    
  2. Poner num-sources=4 y a帽ade uri de las 4 corrientes

    [source0]
    enable=1
    type=3
    uri=<path_to_video>
    uri=<path_to_video>
    uri=<path_to_video>
    uri=<path_to_video>
    num-sources=4
    

Ejecutar inferencia

deepstream-app -c deepstream_app_config.txt
Configuraci贸n multisecuencia

Resultados de referencia

La tabla siguiente resume el rendimiento de los modelos YOLOv8s a diferentes niveles de precisi贸n TensorRT con un tama帽o de entrada de 640x640 en NVIDIA Jetson Orin NX 16GB.

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.

PREGUNTAS FRECUENTES

驴C贸mo configuro Ultralytics YOLOv8 en un dispositivo NVIDIA Jetson?

Para configurar Ultralytics YOLOv8 en un dispositivo NVIDIA Jetson, primero tienes que instalar el SDK DeepStream 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 el despliegue de YOLOv8 .

驴Cu谩l es la ventaja de utilizar TensorRT con YOLOv8 en NVIDIA Jetson?

El uso de TensorRT con YOLOv8 optimiza el modelo para la inferencia, reduciendo significativamente la latencia y mejorando el rendimiento en los dispositivos Jetson NVIDIA . 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 autoajuste del n煤cleo. Esto conduce a una ejecuci贸n m谩s r谩pida y eficiente, especialmente 煤til para aplicaciones en tiempo real como la anal铆tica de v铆deo y las m谩quinas aut贸nomas.

驴Puedo ejecutar Ultralytics YOLOv8 con el SDK DeepStream en distintos equipos Jetson de NVIDIA ?

S铆, la gu铆a para desplegar Ultralytics YOLOv8 con el SDK DeepStream y TensorRT es compatible con toda la gama Jetson de NVIDIA . 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 YOLOv8 para conocer los pasos detallados.

驴C贸mo puedo convertir un modelo YOLOv8 a ONNX para DeepStream?

Para convertir un modelo YOLOv8 al formato ONNX para su despliegue con DeepStream, utiliza utils/export_yoloV8.py script del DeepStream-Yolo repositorio.

Aqu铆 tienes un comando de ejemplo:

python3 utils/export_yoloV8.py -w yolov8s.pt --opset 12 --simplify

Para 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 de YOLOv8 en NVIDIA Jetson Orin NX?

El rendimiento de los modelos YOLOv8 en NVIDIA Jetson Orin NX 16GB var铆a en funci贸n de los niveles de precisi贸n TensorRT . Por ejemplo, los modelos YOLOv8s alcanzan:

  • FP32 Precisi贸n: 15,63 ms/im, 64 FPS
  • FP16 Precisi贸n: 7,94 ms/im, 126 FPS
  • INT8 Precisi贸n: 5,53 ms/im, 181 FPS

Estas pruebas ponen de manifiesto la eficacia y la capacidad de utilizar modelos YOLOv8 optimizados para TensorRT en el hardware NVIDIA Jetson. Para m谩s detalles, consulta nuestra secci贸n Resultados de las pruebas comparativas.



Creado 2024-07-01, Actualizado 2024-07-05
Autores: glenn-jocher (1), lakshanthad (1)

Comentarios