Ultralytics YOLO11 su NVIDIA Jetson utilizzando DeepStream SDK e TensorRT
Guarda: Come utilizzare i modelli Ultralytics YOLO11 con NVIDIA Deepstream su Jetson Orin NX 🚀
Questa guida completa fornisce una procedura dettagliata per il deployment di Ultralytics YOLO11 su dispositivi NVIDIA Jetson utilizzando DeepStream SDK e TensorRT. In questo caso, utilizziamo TensorRT per massimizzare le prestazioni di inferenza sulla piattaforma Jetson.
Nota
Questa guida è stata testata con NVIDIA Jetson Orin Nano Super Developer Kit con l'ultima versione stabile di JetPack JP6.1, Seeed Studio reComputer J4012 basato su NVIDIA Jetson Orin NX 16GB con JetPack JP5.1.3 e Seeed Studio reComputer J1020 v2 basato su NVIDIA Jetson Nano 4GB con JetPack JP4.6.4. Si prevede che funzioni su tutta la linea hardware NVIDIA Jetson, comprese le versioni più recenti e precedenti.
Cos'è NVIDIA DeepStream?
DeepStream SDK di NVIDIA è un toolkit completo di analisi di streaming basato su GStreamer per l'elaborazione multi-sensore basata su IA, video, audio e comprensione delle immagini. È ideale per sviluppatori di vision AI, partner software, startup e OEM che creano app e servizi IVA (Intelligent Video Analytics). Ora puoi creare pipeline di elaborazione di flussi che incorporano reti neurali e altre attività di elaborazione complesse come il tracciamento, la codifica/decodifica video e il rendering video. Queste pipeline consentono l'analisi in tempo reale su dati video, immagini e sensori. Il supporto multi-piattaforma di DeepStream ti offre un modo più rapido e semplice per sviluppare applicazioni e servizi di vision AI on-premise, all'edge e nel cloud.
Prerequisiti
Prima di iniziare a seguire questa guida:
- Visita la nostra documentazione, Guida rapida: NVIDIA Jetson con Ultralytics YOLO11 per configurare il tuo dispositivo NVIDIA Jetson con Ultralytics YOLO11
- Installa DeepStream SDK in base alla versione di JetPack
- Per JetPack 4.6.4, installa DeepStream 6.0.1
- Per JetPack 5.1.3, installa DeepStream 6.3
- Per JetPack 6.1, installa DeepStream 7.1
Suggerimento
In questa guida abbiamo utilizzato il metodo del pacchetto Debian per installare DeepStream SDK sul dispositivo Jetson. Puoi anche visitare DeepStream SDK su Jetson (Archiviato) per accedere alle versioni precedenti di DeepStream.
Configurazione di DeepStream per YOLO11
Qui stiamo utilizzando il repository GitHub marcoslucianops/DeepStream-Yolo che include il supporto NVIDIA DeepStream SDK per i modelli YOLO. Apprezziamo gli sforzi di marcoslucianops per i suoi contributi!
-
Installa Ultralytics con le dipendenze necessarie
cd ~ pip install -U pip git clone https://github.com/ultralytics/ultralytics cd ultralytics pip install -e ".[export]" onnxslim
-
Clona il repository DeepStream-Yolo
cd ~ git clone https://github.com/marcoslucianops/DeepStream-Yolo
-
Copia il
export_yolo11.py
file daDeepStream-Yolo/utils
directory allaultralytics
cartellacp ~/DeepStream-Yolo/utils/export_yolo11.py ~/ultralytics cd ultralytics
-
Scarica il modello di rilevamento Ultralytics YOLO11 (.pt) di tua scelta dalle release di YOLO11. Qui usiamo yolo11s.pt.
wget https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s.pt
Nota
Puoi anche utilizzare un modello YOLO11 addestrato personalizzato.
-
Converti il modello in ONNX
python3 export_yolo11.py -w yolo11s.pt
Passa gli argomenti seguenti al comando sopra
Per DeepStream 5.1, rimuovi il
--dynamic
argomento e utilizzoopset
12 o inferiore. Il valore predefinitoopset
è 17.--opset 12
Per modificare la dimensione di inferenza (predefinita: 640)
-s SIZE --size SIZE -s HEIGHT WIDTH --size HEIGHT WIDTH
Esempio per 1280:
-s 1280 or -s 1280 1280
Per semplificare il modello ONNX (DeepStream >= 6.0)
--simplify
Per utilizzare il batch-size dinamico (DeepStream >= 6.1)
--dynamic
Per utilizzare il batch-size statico (esempio per batch-size = 4)
--batch 4
-
Copia il codice generato
.onnx
file del modello elabels.txt
file alDeepStream-Yolo
cartellacp yolo11s.pt.onnx labels.txt ~/DeepStream-Yolo cd ~/DeepStream-Yolo
-
Imposta la versione di CUDA in base alla versione di JetPack installata
Per JetPack 4.6.4:
export CUDA_VER=10.2
Per JetPack 5.1.3:
export CUDA_VER=11.4
Per Jetpack 6.1:
export CUDA_VER=12.6
-
Compila la libreria
make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
-
Modifica il
config_infer_primary_yolo11.txt
file in base al tuo modello (per YOLO11 con 80 classi)[property] ... onnx-file=yolo11s.pt.onnx ... num-detected-classes=80 ...
-
Modifica il
deepstream_app_config
file... [primary-gie] ... config-file=config_infer_primary_yolo11.txt
-
Puoi anche modificare la sorgente video in
deepstream_app_config
file. Qui viene caricato un file video predefinito... [source0] ... uri=file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4
Esegui inferenza
deepstream-app -c deepstream_app_config.txt
Nota
La generazione del file del motore TensorRT richiederà molto tempo prima di avviare l'inferenza. Si prega quindi di pazientare.

Suggerimento
Se desideri convertire il modello in precisione FP16, imposta semplicemente model-engine-file=model_b1_gpu0_fp16.engine
e network-mode=2
all'interno config_infer_primary_yolo11.txt
Calibrazione INT8
Se desideri utilizzare la precisione INT8 per l'inferenza, devi seguire i passaggi seguenti
Nota
Attualmente INT8 non funziona con TensorRT 10.x. Questa sezione della guida è stata testata con TensorRT 8.x, che dovrebbe funzionare.
-
Imposta
OPENCV
variabile d'ambienteexport OPENCV=1
-
Compila la libreria
make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
-
Per il dataset COCO, scaricare il val2017, estrarre e spostare in
DeepStream-Yolo
cartella -
Crea una nuova directory per le immagini di calibrazione
mkdir calibration
-
Esegui il comando seguente per selezionare 1000 immagini casuali dal dataset COCO per eseguire la calibrazione
for jpg in $(ls -1 val2017/*.jpg | sort -R | head -1000); do cp ${jpg} calibration/ done
Nota
NVIDIA raccomanda almeno 500 immagini per ottenere una buona precisione. In questo esempio, vengono scelte 1000 immagini per ottenere una precisione migliore (più immagini = più precisione). Puoi impostarlo da head -1000. Ad esempio, per 2000 immagini, head -2000. Questo processo può richiedere molto tempo.
-
Crea il
calibration.txt
file con tutte le immagini selezionaterealpath calibration/*jpg > calibration.txt
-
Imposta le variabili d'ambiente
export INT8_CALIB_IMG_PATH=calibration.txt export INT8_CALIB_BATCH_SIZE=1
Nota
Valori più alti di INT8_CALIB_BATCH_SIZE comporteranno una maggiore accuratezza e una maggiore velocità di calibrazione. Impostalo in base alla memoria della tua GPU.
-
Aggiorna il
config_infer_primary_yolo11.txt
fileDa
... model-engine-file=model_b1_gpu0_fp32.engine #int8-calib-file=calib.table ... network-mode=0 ...
Per
... model-engine-file=model_b1_gpu0_int8.engine int8-calib-file=calib.table ... network-mode=1 ...
Esegui inferenza
deepstream-app -c deepstream_app_config.txt
Configurazione MultiStream
Guarda: Come eseguire più stream con DeepStream SDK su Jetson Nano utilizzando Ultralytics YOLO11 🎉
Per configurare più stream in una singola applicazione deepstream, puoi apportare le seguenti modifiche al deepstream_app_config.txt
file
-
Modifica le righe e le colonne per creare una visualizzazione a griglia in base al numero di stream che desideri avere. Ad esempio, per 4 stream, possiamo aggiungere 2 righe e 2 colonne.
[tiled-display] rows=2 columns=2
-
Imposta
num-sources=4
e aggiungiuri
di tutti e 4 i flussi[source0] enable=1 type=3 uri=path/to/video1.jpg uri=path/to/video2.jpg uri=path/to/video3.jpg uri=path/to/video4.jpg num-sources=4
Esegui inferenza
deepstream-app -c deepstream_app_config.txt

Risultati del Benchmark
I seguenti benchmark riassumono le prestazioni dei modelli YOLO11 a diversi livelli di precisione TensorRT con una dimensione di input di 640x640 su NVIDIA Jetson Orin NX 16GB.
Tabella comparativa

Tabella comparativa dettagliata
Prestazioni
Formato | Stato | Tempo di inferenza (ms/im) |
---|---|---|
TensorRT (FP32) | ✅ | 8.64 |
TensorRT (FP16) | ✅ | 5.27 |
TensorRT (INT8) | ✅ | 4.54 |
Formato | Stato | Tempo di inferenza (ms/im) |
---|---|---|
TensorRT (FP32) | ✅ | 14.53 |
TensorRT (FP16) | ✅ | 7.91 |
TensorRT (INT8) | ✅ | 6.05 |
Formato | Stato | Tempo di inferenza (ms/im) |
---|---|---|
TensorRT (FP32) | ✅ | 32.05 |
TensorRT (FP16) | ✅ | 15.55 |
TensorRT (INT8) | ✅ | 10.43 |
Formato | Stato | Tempo di inferenza (ms/im) |
---|---|---|
TensorRT (FP32) | ✅ | 39.68 |
TensorRT (FP16) | ✅ | 19.88 |
TensorRT (INT8) | ✅ | 13.64 |
Formato | Stato | Tempo di inferenza (ms/im) |
---|---|---|
TensorRT (FP32) | ✅ | 80.65 |
TensorRT (FP16) | ✅ | 39.06 |
TensorRT (INT8) | ✅ | 22.83 |
Ringraziamenti
Questa guida è stata inizialmente creata dai nostri amici di Seeed Studio, Lakshantha ed Elaine.
FAQ
Come posso configurare Ultralytics YOLO11 su un dispositivo NVIDIA Jetson?
Per configurare Ultralytics YOLO11 su un dispositivo NVIDIA Jetson, è necessario innanzitutto installare l'SDK DeepStream compatibile con la versione di JetPack. Segui la guida dettagliata nella nostra Guida rapida per configurare il tuo NVIDIA Jetson per l'implementazione di YOLO11.
Qual è il vantaggio di utilizzare TensorRT con YOLO11 su NVIDIA Jetson?
L'utilizzo di TensorRT con YOLO11 ottimizza il modello per l'inferenza, riducendo significativamente la latenza e migliorando il throughput sui dispositivi NVIDIA Jetson. TensorRT fornisce inferenza di deep learning a elevate prestazioni e bassa latenza attraverso la fusione di layer, la calibrazione della precisione e l'auto-tuning del kernel. Ciò porta a un'esecuzione più rapida ed efficiente, particolarmente utile per applicazioni in tempo reale come l'analisi video e le macchine autonome.
Posso eseguire Ultralytics YOLO11 con DeepStream SDK su diversi hardware NVIDIA Jetson?
Sì, la guida per l'implementazione di Ultralytics YOLO11 con DeepStream SDK e TensorRT è compatibile con l'intera linea NVIDIA Jetson. Ciò include dispositivi come Jetson Orin NX 16GB con JetPack 5.1.3 e Jetson Nano 4GB con JetPack 4.6.4. Fare riferimento alla sezione DeepStream Configuration for YOLO11 per i passaggi dettagliati.
Come posso convertire un modello YOLO11 in ONNX per DeepStream?
Per convertire un modello YOLO11 in formato ONNX per la distribuzione con DeepStream, utilizza il utils/export_yolo11.py
script dal DeepStream-Yolo repository.
Ecco un comando di esempio:
python3 utils/export_yolo11.py -w yolo11s.pt --opset 12 --simplify
Per maggiori dettagli sulla conversione del modello, consulta la nostra sezione sull'esportazione del modello.
Quali sono i benchmark di performance per YOLO su NVIDIA Jetson Orin NX?
Le prestazioni dei modelli YOLO11 su NVIDIA Jetson Orin NX 16GB variano in base ai livelli di precisione di TensorRT. Ad esempio, i modelli YOLO11s raggiungono:
- Precisione FP32: 14.6 ms/im, 68.5 FPS
- Precisione FP16: 7.94 ms/im, 126 FPS
- Precisione INT8: 5,95 ms/im, 168 FPS
Questi benchmark sottolineano l'efficienza e la capacità di utilizzare modelli YOLO11 ottimizzati per TensorRT su hardware NVIDIA Jetson. Per ulteriori dettagli, consulta la nostra sezione Risultati dei Benchmark.