Ultralytics YOLOv8 su NVIDIA Jetson utilizzando DeepStream SDK e TensorRT
Questa guida completa fornisce una procedura dettagliata per l'implementazione di Ultralytics YOLOv8 sui dispositivi NVIDIA Jetson utilizzando DeepStream SDK e TensorRT. Qui utilizziamo TensorRT per massimizzare le prestazioni di inferenza sulla piattaforma Jetson.
Nota
Questa guida è stata testata sia con Seeed Studio reComputer J4012, che è basato su NVIDIA Jetson Orin NX 16GB e che esegue la release di JetPack JP5.1.3, sia con Seeed Studio reComputer J1020 v2, che è basato su NVIDIA Jetson Nano 4GB e che esegue la release di JetPack JP4.6.4. Si prevede che funzionerà su tutta la gamma di hardware NVIDIA Jetson, compresi gli ultimi e i precedenti.
Che cos'è NVIDIA DeepStream?
DeepStream SDK di NVIDIA è un toolkit completo per l'analisi in streaming basato su GStreamer per l'elaborazione multisensore basata sull'intelligenza artificiale, la comprensione di video, audio e immagini. È ideale per gli sviluppatori di AI vision, i partner software, le startup e gli OEM che realizzano applicazioni e servizi IVA (Intelligent Video Analytics). Ora puoi creare pipeline di elaborazione dei flussi che incorporano reti neurali e altre attività di elaborazione complesse come il tracking, la codifica/decodifica video e il rendering video. Queste pipeline consentono di effettuare analisi in tempo reale su dati video, immagini e sensori. Il supporto multipiattaforma di DeepStream ti offre un modo più rapido e semplice per sviluppare applicazioni e servizi di AI vision on-premise, edge e cloud.
Prerequisiti
Prima di iniziare a seguire questa guida:
- Visita la nostra documentazione, Guida rapida: NVIDIA Jetson con Ultralytics YOLOv8 per configurare il tuo dispositivo NVIDIA Jetson con Ultralytics YOLOv8
-
Installa DeepStream SDK secondo la versione di JetPack
- Per JetPack 4.6.4, installa DeepStream 6.0.1
- Per JetPack 5.1.3, installa DeepStream 6.3
Suggerimento
In questa guida abbiamo utilizzato il metodo del pacchetto Debian per installare DeepStream SDK sul dispositivo Jetson. Puoi anche visitare la pagina DeepStream SDK su Jetson (Archiviato) per accedere alle versioni precedenti di DeepStream.
Configurazione DeepStream per YOLOv8
Qui stiamo usando il repository GitHub di marcoslucianops/DeepStream-Yolo che include il supporto dell'SDK NVIDIA DeepStream per i modelli YOLO . Apprezziamo gli sforzi di marcoslucianops per i suoi contributi!
-
Installare le dipendenze
-
Clonare il seguente repository
-
Scarica il modello di rilevamento Ultralytics YOLOv8 (.pt) di tua scelta tra le release diYOLOv8 . Qui utilizziamo yolov8s.pt.
Nota
Puoi anche utilizzare un modello YOLOv8 addestrato in modo personalizzato.
-
Converti il modello in ONNX
Passare gli argomenti seguenti al comando precedente
Per DeepStream 6.0.1, utilizzare opset 12 o inferiore. L'opset predefinito è 16.
Per modificare la dimensione dell'inferenza (default: 640)
Esempio per 1280:
Per semplificare il ONNX modello (DeepStream >= 6.0)
Per utilizzare la dimensione batch dinamica (DeepStream >= 6.1)
Per utilizzare batch size statico (esempio per batch-size = 4)
-
Impostare la versione CUDA in base alla versione di JetPack installata
Per JetPack 4.6.4:
Per JetPack 5.1.3:
-
Compilare la libreria
-
Modificare il file
config_infer_primary_yoloV8.txt
file in base al tuo modello (per YOLOv8s con 80 classi) -
Modificare il file
deepstream_app_config
file -
È inoltre possibile modificare la sorgente video in
deepstream_app_config
file. Qui viene caricato un file video predefinito
Eseguire l'inferenza
Nota
Ci vorrà molto tempo per generare il file TensorRT motore prima di avviare l'inferenza. Quindi, per favore, sii paziente.
Suggerimento
Se si desidera convertire il modello in precisione FP16, è sufficiente impostare model-engine-file=model_b1_gpu0_fp16.engine
e network-mode=2
all'interno config_infer_primary_yoloV8.txt
Calibrazione INT8
Se vuoi utilizzare la precisione INT8 per l'inferenza, devi seguire i seguenti passaggi
-
Mettere
OPENCV
variabile d'ambiente -
Compilare la libreria
-
Per il set di dati COCO, scarica il file val2017, estrarre e spostare in
DeepStream-Yolo
cartella -
Creare una nuova directory per le immagini di calibrazione
-
Eseguire quanto segue per selezionare 1000 immagini casuali dal set di dati COCO per eseguire la calibrazione
Nota
NVIDIA raccomanda almeno 500 immagini per ottenere una buona precisione. In questo esempio, sono state scelte 1000 immagini per ottenere una maggiore precisione (più immagini = maggiore precisione). Puoi impostarlo a partire da testa -1000. Ad esempio, per 2000 immagini, scegli -2000. Questo processo può richiedere molto tempo.
-
Creare il file
calibration.txt
file con tutte le immagini selezionate -
Impostare le variabili di ambiente
Nota
Valori di INT8_CALIB_BATCH_SIZE più elevati si tradurranno in una maggiore precisione e velocità di calibrazione. Impostalo in base alla memoria della tua GPU.
-
Aggiorna il file
config_infer_primary_yoloV8.txt
fileDa
A
Eseguire l'inferenza
Configurazione MultiStream
Per configurare più flussi in un'unica applicazione deepstream, è possibile apportare le seguenti modifiche al file deepstream_app_config.txt
file
-
Modificare le righe e le colonne per creare una visualizzazione a griglia in base al numero di flussi che si desidera avere. Ad esempio, per 4 flussi, possiamo aggiungere 2 righe e 2 colonne.
-
Mettere
num-sources=4
e aggiungiuri
di tutti e 4 i corsi d'acqua
Eseguire l'inferenza
Risultati del benchmark
La tabella seguente riepiloga come YOLOv8s i modelli si comportano a diversi TensorRT livelli di precisione con una dimensione di input di 640x640 su NVIDIA Jetson Orin NX 16GB.
Nome del modello | Precisione | Tempo di inferenza (ms/im) | FPS |
---|---|---|---|
YOLOv8s | FP32 | 15.63 | 64 |
FP16 | 7.94 | 126 | |
INT8 | 5.53 | 181 |
Riconoscimenti
Questa guida è stata inizialmente creata dai nostri amici di Seeed Studio, Lakshantha ed Elaine.