Saltar al contenido

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.

DeepStream en NVIDIA 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:

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!

  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. Establezca la versi贸n de CUDA de acuerdo con 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, 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

    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.

  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

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.



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

Comentarios