Implanta en NVIDIA Jetson utilizando TensorRT y DeepStream SDK
馃摎 Esta gu铆a explica c贸mo desplegar un modelo entrenado en la plataforma NVIDIA Jetson y realizar la inferencia utilizando TensorRT y DeepStream SDK. Aqu铆 utilizamos TensorRT para maximizar el rendimiento de la inferencia en la plataforma Jetson.
Verificaci贸n del hardware
Hemos probado y verificado esta gu铆a en los siguientes dispositivos Jetson
- Seeed reComputer J1010 construido con el m贸dulo Jetson Nano
- Seeed reComputer J2021 construido con el m贸dulo Jetson Xavier NX
Antes de empezar
Aseg煤rate de haber instalado correctamente el SDK JetPack con todos los componentes del SDK y el SDK DeepStream en el dispositivo Jetson, ya que incluye CUDA, TensorRT y el SDK DeepStream, necesarios para esta gu铆a.
JetPack SDK proporciona un entorno de desarrollo completo para el desarrollo de IA acelerada por hardware. Todos los m贸dulos y kits de desarrollo Jetson son compatibles con JetPack SDK.
Existen dos m茅todos principales de instalaci贸n
- M茅todo de imagen de tarjeta SD
- M茅todo NVIDIA SDK Manager
Puedes encontrar una gu铆a de instalaci贸n muy detallada en el sitio web oficial de NVIDIA. Tambi茅n puedes encontrar gu铆as correspondientes a los mencionados reComputer J1010 y reComputer J2021.
Instala los paquetes necesarios
- Paso 1. Accede al terminal del dispositivo Jetson, instala pip y actual铆zalo
- Paso 2. Clona el siguiente repositorio
- Paso 3. Abre requirements.txt
- Paso 5. Edita las siguientes l铆neas. Aqu铆 tienes que pulsar primero i para entrar en el modo de edici贸n. Pulsa ESC, luego escribe :wq para guardar y salir
Nota: torch y torchvision est谩n excluidos por ahora porque se instalar谩n m谩s adelante.
- Paso 6. instala la siguiente dependencia
- Paso 7. Instala los paquetes necesarios
Instala PyTorch y Torchvision
No podemos instalar PyTorch y Torchvision desde pip porque no son compatibles para ejecutarse en la plataforma Jetson, basada en la arquitectura ARM aarch64. Por lo tanto, tenemos que instalar manualmente PyTorch pip wheel y compilar/instalar Torchvision desde el c贸digo fuente.
Visita esta p谩gina para acceder a todos los enlaces de PyTorch y Torchvision.
脡stas son algunas de las versiones compatibles con JetPack 4.6 y superiores.
PyTorch v1.10.0
Compatible con JetPack 4.4 (L4T R32.4.3) / JetPack 4.4.1 (L4T R32.4.4) / JetPack 4.5 (L4T R32.5.0) / JetPack 4.5.1 (L4T R32.5.1) / JetPack 4.6 (L4T R32.6.1) con Python 3.6
- file_name: torch-1.10.0-cp36-cp36m-linux_aarch64.whl
- URL: https://nvidia.box.com/shared/static/fjtbno0vpo676a25cgvuqc1wty0fkkg6.whl
PyTorch v1.12.0
Compatible con JetPack 5.0 (L4T R34.1.0) / JetPack 5.0.1 (L4T R34.1.1) / JetPack 5.0.2 (L4T R35.1.0) con Python 3.8
- file_name: torch-1.12.0a0+2c916ef.nv22.3-cp38-cp38-linux_aarch64.whl
-
Paso 1. Instala torch seg煤n tu versi贸n de JetPack en el siguiente formato
Por ejemplo, aqu铆 estamos ejecutando JP4.6.1, y por lo tanto elegimos PyTorch v1 .10.0
cd ~
sudo apt-get install -y libopenblas-base libopenmpi-dev
wget https://nvidia.box.com/shared/static/fjtbno0vpo676a25cgvuqc1wty0fkkg6.whl -O torch-1.10.0-cp36-cp36m-linux_aarch64.whl
pip3 install torch-1.10.0-cp36-cp36m-linux_aarch64.whl
- Paso 2. Instala Torchvision en funci贸n de la versi贸n de PyTorch que tengas instalada. Por ejemplo, hemos elegido PyTorch v1 .10.0, lo que significa que tenemos que elegir Torchvision v0.11.1
sudo apt install -y libjpeg-dev zlib1g-dev
git clone --branch v0.11.1 https://github.com/pytorch/vision torchvision
cd torchvision
sudo python3 setup.py install
Aqu铆 tienes una lista de la versi贸n correspondiente de torchvision que necesitas instalar seg煤n la versi贸n PyTorch :
- PyTorch v1.10 - torchvision v0.11.1
- PyTorch v1.12 - torchvision v0.13.0
Configuraci贸n de DeepStream para YOLOv5
- Paso 1. Clona el siguiente repositorio
- Paso 2. Copia gen_wts_yoloV5.py de DeepStream-Yolo /utils en yolov5 directorio
- Paso 3. Dentro del repo yolov5 , descarga el archivo pt de las versiones YOLOv5 (ejemplo para YOLOv5s 6.1)
- Paso 4. Genera los archivos cfg y wts
Nota: Para cambiar el tama帽o de inferencia (por defecto: 640)
- Paso 5. Copia los archivos cfg y wts generados en la carpeta DeepStream-Yolo
- Paso 6. Abre la carpeta DeepStream-Yolo y compila la biblioteca
cd ~/DeepStream-Yolo
CUDA_VER=11.4 make -C nvdsinfer_custom_impl_Yolo # for DeepStream 6.1
CUDA_VER=10.2 make -C nvdsinfer_custom_impl_Yolo # for DeepStream 6.0.1 / 6.0
- Paso 7. Edita el archivo config_infer_primary_yoloV5.txt seg煤n tu modelo
- Paso 8. Edita el archivo deepstream_app_config
- Paso 9. Cambia la fuente de v铆deo en el archivo deepstream_app_config. Aqu铆 se carga un archivo de v铆deo por defecto como puedes ver a continuaci贸n
...
[source0]
...
uri=file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4
Ejecuta la inferencia
El resultado anterior se ejecuta en Jetson Xavier NX con FP32 y YOLOv5s 640x640. Podemos ver que los FPS rondan los 30.
Calibraci贸n INT8
Si quieres utilizar la precisi贸n INT8 para la inferencia, debes seguir los siguientes pasos
- Paso 1. Instala OpenCV
- Paso 2. Compila/recompila la biblioteca nvdsinfer_custom_impl_Yolo con soporte OpenCV
cd ~/DeepStream-Yolo
CUDA_VER=11.4 OPENCV=1 make -C nvdsinfer_custom_impl_Yolo # for DeepStream 6.1
CUDA_VER=10.2 OPENCV=1 make -C nvdsinfer_custom_impl_Yolo # for DeepStream 6.0.1 / 6.0
-
Paso 3. Para el conjunto de datos COCO, descarga el val2017, extr谩elo y mu茅velo a la carpeta DeepStream-Yolo
-
Paso 4. Crea un nuevo directorio para las im谩genes de calibraci贸n
- Paso 5. Ejecuta lo siguiente para seleccionar 1000 im谩genes aleatorias del conjunto de datos COCO para realizar la calibraci贸n
Nota: NVIDIA recomienda al menos 500 im谩genes para obtener una buena precisi贸n. En este ejemplo, se han elegido 1000 im谩genes para obtener una mayor precisi贸n (m谩s im谩genes = m谩s precisi贸n). 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 la memoria de tu GPU. Puedes ajustarlo desde head -1000. Por ejemplo, para 2000 im谩genes, la cabeza -2000. Este proceso puede llevar mucho tiempo.
- Paso 6. Crea el archivo calibraci贸n.txt con todas las im谩genes seleccionadas
- Paso 7. Establece las variables de entorno
- Paso 8. Actualiza el archivo config_infer_primary_yoloV5.txt
En
A
- Paso 9. Ejecuta la inferencia
El resultado anterior se ejecuta en Jetson Xavier NX con INT8 y YOLOv5s 640x640. Podemos ver que los FPS rondan los 60.
Resultados de la evaluaci贸n comparativa
La tabla siguiente resume el rendimiento de los distintos modelos en Jetson Xavier NX.
Nombre del modelo | Precisi贸n | Tama帽o de la inferencia | Tiempo de inferencia (ms) | FPS |
---|---|---|---|---|
YOLOv5s | FP32 | 320x320 | 16.66 | 60 |
FP32 | 640x640 | 33.33 | 30 | |
INT8 | 640x640 | 16.66 | 60 | |
YOLOv5n | FP32 | 640x640 | 16.66 | 60 |
Adicional
Este tutorial est谩 escrito por nuestros amigos de seeed @lakshanthad y Elaine