Guida rapida: NVIDIA Jetson con Ultralytics YOLOv8
Questa guida completa fornisce un percorso dettagliato per l'implementazione di Ultralytics YOLOv8 sui dispositivi NVIDIA Jetson. Inoltre, mostra i benchmark delle prestazioni per dimostrare le capacità di YOLOv8 su questi piccoli e potenti dispositivi.
Nota
Questa guida è stata testata con Seeed Studio reComputer J4012 che si basa su NVIDIA Jetson Orin NX 16GB e che esegue l'ultima release stabile di JetPack, JP5.1.3. L'utilizzo di questa guida per dispositivi Jetson più vecchi, come Jetson Nano (che supporta solo fino a JP4.6.4), potrebbe non essere garantito. Tuttavia, si prevede che funzionerà su tutti i dispositivi Jetson Orin, Xavier NX, AGX Xavier con JP5.1.3.
Che cos'è NVIDIA Jetson?
NVIDIA Jetson è una serie di schede di computing embedded progettate per portare l'AI (intelligenza artificiale) accelerata sui dispositivi edge. Questi dispositivi compatti e potenti sono costruiti attorno all'architettura GPU di NVIDIA e sono in grado di eseguire complessi algoritmi di AI e modelli di deep learning direttamente sul dispositivo, senza dover ricorrere a risorse di cloud computing. Le schede Jetson sono spesso utilizzate nella robotica, nei veicoli autonomi, nell'automazione industriale e in altre applicazioni in cui l'inferenza dell'intelligenza artificiale deve essere eseguita localmente con bassa latenza ed elevata efficienza. Inoltre, queste schede si basano sull'architettura ARM64 e consumano meno rispetto ai dispositivi di GPU computing tradizionali.
Confronto tra le serie NVIDIA Jetson
Jetson Orin è l'ultima iterazione della famiglia NVIDIA Jetson basata sull'architettura NVIDIA Ampere che offre prestazioni AI drasticamente migliorate rispetto alle generazioni precedenti. La tabella seguente mette a confronto alcuni dei dispositivi Jetson presenti nell'ecosistema.
Jetson AGX Orin 64GB | Jetson Orin NX 16GB | Jetson Orin Nano 8GB | Jetson AGX Xavier | Jetson Xavier NX | Jetson Nano | |
---|---|---|---|---|---|---|
Prestazioni AI | 275 TOPS | 100 TOPS | 40 TOP | 32 TOPS | 21 TOPS | 472 GFLOPS |
GPU | GPU con architettura NVIDIA Ampere a 2048 core e 64 core Tensor | GPU con architettura NVIDIA Ampere a 1024 core e 32 core Tensor | GPU con architettura NVIDIA Ampere a 1024 core e 32 core Tensor | GPU a 512 core con architettura NVIDIA Volta e 64 core Tensor | GPU a 384 core con architettura NVIDIA Voltaâ„¢ e 48 core Tensor | GPU NVIDIA Maxwellâ„¢ a 128 core |
Frequenza massima della GPU | 1,3 GHz | 918 MHz | 625 MHz | 1377 MHz | 1100 MHz | 921MHz |
CPU | CPU a 12 core NVIDIA Arm® Cortex A78AE v8.2 a 64 bit 3MB L2 + 6MB L3 | CPU a 8 core NVIDIA Arm® Cortex A78AE v8.2 64 bit 2MB L2 + 4MB L3 | CPU a 6 core Arm® Cortex®-A78AE v8.2 a 64 bit 1.5MB L2 + 4MB L3 | CPU a 8 core NVIDIA Carmel Arm®v8.2 a 64 bit 8MB L2 + 4MB L3 | CPU a 6 core NVIDIA Carmel Arm®v8.2 a 64 bit 6MB L2 + 4MB L3 | Processore Quad-Core Arm® Cortex®-A57 MPCore |
Frequenza massima della CPU | 2,2 GHz | 2,0 GHz | 1,5 GHz | 2,2 GHz | 1,9 GHz | 1.43GHz |
Memoria | 64GB 256-bit LPDDR5 204.8GB/s | 16GB 128-bit LPDDR5 102,4GB/s | 8GB 128-bit LPDDR5 68 GB/s | 32GB 256-bit LPDDR4x 136.5GB/s | 8GB 128-bit LPDDR4x 59,7GB/s | 4GB 64-bit LPDDR4 25.6GB/s" |
Per una tabella di confronto più dettagliata, visita la sezione Specifiche tecniche della pagina ufficiale di NVIDIA Jetson.
Che cos'è NVIDIA JetPack?
L'SDK NVIDIA JetPack che alimenta i moduli Jetson è la soluzione più completa e fornisce un ambiente di sviluppo completo per la creazione di applicazioni AI accelerate end-to-end e riduce il time to market. JetPack include Jetson Linux con bootloader, kernel Linux, ambiente desktop Ubuntu e una serie completa di librerie per l'accelerazione di GPU Computing, multimedia, grafica e computer vision. Include anche esempi, documentazione e strumenti per sviluppatori sia per il computer host che per il kit di sviluppo e supporta SDK di livello superiore come DeepStream per l'analisi video in streaming, Isaac per la robotica e Riva per l'IA conversazionale.
Flash JetPack per NVIDIA Jetson
Il primo passo da compiere dopo aver messo le mani su un dispositivo NVIDIA Jetson è quello di flashare NVIDIA JetPack sul dispositivo. Esistono diversi modi per eseguire il flashing dei dispositivi NVIDIA Jetson.
- Se possiedi un kit di sviluppo ufficiale NVIDIA, come il Jetson Orin Nano Developer Kit, puoi visitare questo link per scaricare un'immagine e preparare una scheda SD con JetPack per avviare il dispositivo.
- Se possiedi un altro kit di sviluppo NVIDIA, puoi visitare questo link per flashare JetPack sul dispositivo utilizzando SDK Manager.
- Se possiedi un dispositivo Seeed Studio reComputer J4012, puoi visitare questo link per flashare JetPack sull'SSD incluso.
- Se possiedi un altro dispositivo di terze parti alimentato dal modulo NVIDIA Jetson, ti consigliamo di seguire il flashing da riga di comando visitando questo link.
Nota
Per i metodi 3 e 4, dopo aver flashato il sistema e avviato il dispositivo, inserisci "sudo apt update && sudo apt install nvidia-jetpack -y" nel terminale del dispositivo per installare tutti i restanti componenti di JetPack necessari.
Configurazione Ultralytics
Esistono due modi per impostare il pacchetto Ultralytics su NVIDIA Jetson per realizzare il tuo prossimo progetto di Computer Vision. Puoi usare uno dei due.
Iniziare con Docker
Il modo più veloce per iniziare a utilizzare Ultralytics YOLOv8 su NVIDIA Jetson è quello di eseguire un'immagine docker precostituita per Jetson.
Esegui il comando seguente per estrarre il contenitore Docker ed eseguirlo su Jetson. Questo è basato sull'immagine docker l4t-pytorch che contiene PyTorch e Torchvision in un ambiente Python3.
t=ultralytics/ultralytics:latest-jetson && sudo docker pull $t && sudo docker run -it --ipc=host --runtime=nvidia $t
Dopo aver fatto questo, passa alla sezione Utilizzare TensorRT su NVIDIA Jetson.
Iniziare senza Docker
Installa il pacchetto Ultralytics
Qui installeremo il pacchetto ultralyics su Jetson con le dipendenze opzionali in modo da poter esportare i modelli di PyTorch in altri formati diversi. Ci concentreremo principalmente sulle esportazioni di NVIDIA TensorRT perché TensoRT ci permetterà di ottenere le massime prestazioni dai dispositivi Jetson.
-
Aggiornare l'elenco dei pacchetti, installare pip e passare all'ultimo aggiornamento
-
Installa
ultralytics
pacchetto pip con dipendenze opzionali -
Riavvia il dispositivo
Installa PyTorch e Torchvision
L'installazione di ultralytics di cui sopra installerà Torch e Torchvision. Tuttavia, questi due pacchetti installati tramite pip non sono compatibili con la piattaforma Jetson, basata su architettura ARM64. Pertanto, dobbiamo installare manualmente PyTorch pip wheel e compilare/installare Torchvision dai sorgenti.
-
Disinstalla i siti PyTorch e Torchvision attualmente installati
-
Installa PyTorch 2.1.0 come da JP5.1.3
sudo apt-get install -y libopenblas-base libopenmpi-dev wget https://developer.download.nvidia.com/compute/redist/jp/v512/pytorch/torch-2.1.0a0+41361538.nv23.06-cp38-cp38-linux_aarch64.whl -O torch-2.1.0a0+41361538.nv23.06-cp38-cp38-linux_aarch64.whl pip install torch-2.1.0a0+41361538.nv23.06-cp38-cp38-linux_aarch64.whl
-
Installa Torchvision v0.16.2 secondo PyTorch v2.1.0
Visita la paginaPyTorch per Jetson per accedere a tutte le versioni di PyTorch per le diverse versioni di JetPack. Per un elenco più dettagliato della compatibilità di PyTorch e Torchvision, visita la paginaPyTorch e Torchvision.
Installa onnxruntime-gpu
Il onnxruntime-gpu il pacchetto ospitato su PyPI non ha aarch64
per Jetson. Quindi dobbiamo installare manualmente questo pacchetto. Questo pacchetto è necessario per alcune esportazioni.
Tutti diversi onnxruntime-gpu
Sono elencati i pacchetti che corrispondono alle diverse versioni di JetPack e Python . qui. Tuttavia, qui scaricheremo e installeremo onnxruntime-gpu 1.17.0
con Python3.8
supporto per il JetPack che stiamo utilizzando per questa guida.
wget https://nvidia.box.com/shared/static/zostg6agm00fb6t5uisw51qi6kpcuwzd.whl -O onnxruntime_gpu-1.17.0-cp38-cp38-linux_aarch64.whl
pip install onnxruntime_gpu-1.17.0-cp38-cp38-linux_aarch64.whl
Nota
onnxruntime-gpu
riporterà automaticamente la versione di numpy all'ultima. Quindi è necessario reinstallare numpy su 1.23.5
per risolvere un problema eseguendo:
pip install numpy==1.23.5
Usa TensorRT su NVIDIA Jetson
Tra tutti i formati di esportazione dei modelli supportati da Ultralytics, TensorRT offre le migliori prestazioni di inferenza quando si lavora con i dispositivi NVIDIA Jetson e il nostro consiglio è di utilizzare TensorRT con Jetson. Abbiamo anche un documento dettagliato su TensorRT qui.
Convertire il modello in TensorRT ed eseguire l'inferenza
Il modello YOLOv8n in formato PyTorch viene convertito in TensorRT per eseguire l'inferenza con il modello esportato.
Esempio
from ultralytics import YOLO
# Load a YOLOv8n PyTorch model
model = YOLO('yolov8n.pt')
# Export the model
model.export(format='engine') # creates 'yolov8n.engine'
# Load the exported TensorRT model
trt_model = YOLO('yolov8n.engine')
# Run inference
results = trt_model('https://ultralytics.com/images/bus.jpg')
Nota
Visita la pagina Esportazione per accedere ad argomenti aggiuntivi per l'esportazione di modelli in diversi formati.
Benchmark di NVIDIA Jetson Orin YOLOv8
YOLOv8 I benchmark sono stati eseguiti dal team di Ultralytics su 10 diversi formati di modelli che misurano la velocità e la precisione: PyTorch, TorchScript, ONNX, OpenVINO, TensorRT, TF SavedModel , TF Graphdef , TF Lite, PaddlePaddle, NCNN. I benchmark sono stati eseguiti su Seeed Studio reComputer J4012 alimentato da un dispositivo Jetson Orin NX da 16GB con precisione FP32 e con un'immagine di input di dimensioni predefinite pari a 640.
Tabella di confronto
Anche se tutti i modelli esportati funzionano con NVIDIA Jetson, abbiamo incluso solo PyTorch, TorchScript, TensorRT nella tabella di confronto qui sotto perché utilizzano la GPU di Jetson e sono garantiti per produrre i risultati migliori. Tutte le altre esportazioni utilizzano solo la CPU e le prestazioni non sono così buone come le tre precedenti. Puoi trovare i benchmark di tutte le esportazioni nella sezione successiva a questo grafico.
Tabella comparativa dettagliata
La tabella seguente rappresenta i risultati del benchmark per cinque diversi modelli (YOLOv8n, YOLOv8s, YOLOv8m, YOLOv8l, YOLOv8x) in dieci diversi formati (PyTorch, TorchScript, ONNX, OpenVINO, TensorRT, TF SavedModel , TF Graphdef , TF Lite, PaddlePaddle, NCNN), fornendo lo stato, la dimensione, la metrica mAP50-95(B) e il tempo di inferenza per ogni combinazione.
Prestazioni
Formato | Stato | Dimensione su disco (MB) | mAP50-95(B) | Tempo di inferenza (ms/im) |
---|---|---|---|---|
PyTorch | ✅ | 6.2 | 0.6381 | 14.3 |
TorchScript | ✅ | 12.4 | 0.6117 | 13.3 |
ONNX | ✅ | 12.2 | 0.6092 | 70.6 |
OpenVINO | ✅ | 12.3 | 0.6092 | 104.2 |
TensorRT | ✅ | 13.6 | 0.6117 | 8.9 |
TF SavedModel | ✅ | 30.6 | 0.6092 | 141.74 |
TF GraphDef | ✅ | 12.3 | 0.6092 | 199.93 |
TF Lite | ✅ | 12.3 | 0.6092 | 349.18 |
PaddlePaddle | ✅ | 24.4 | 0.6030 | 555 |
NCNN | ✅ | 12.2 | 0.6092 | 32 |
Formato | Stato | Dimensione su disco (MB) | mAP50-95(B) | Tempo di inferenza (ms/im) |
---|---|---|---|---|
PyTorch | ✅ | 21.5 | 0.6967 | 18 |
TorchScript | ✅ | 43.0 | 0.7136 | 23.81 |
ONNX | ✅ | 42.8 | 0.7136 | 185.55 |
OpenVINO | ✅ | 42.9 | 0.7136 | 243.97 |
TensorRT | ✅ | 44.0 | 0.7136 | 14.82 |
TF SavedModel | ✅ | 107 | 0.7136 | 260.03 |
TF GraphDef | ✅ | 42.8 | 0.7136 | 423.4 |
TF Lite | ✅ | 42.8 | 0.7136 | 1046.64 |
PaddlePaddle | ✅ | 85.5 | 0.7140 | 1464 |
NCNN | ✅ | 42.7 | 0.7200 | 63 |
Formato | Stato | Dimensione su disco (MB) | mAP50-95(B) | Tempo di inferenza (ms/im) |
---|---|---|---|---|
PyTorch | ✅ | 49.7 | 0.7370 | 36.4 |
TorchScript | ✅ | 99.2 | 0.7285 | 53.58 |
ONNX | ✅ | 99 | 0.7280 | 452.09 |
OpenVINO | ✅ | 99.1 | 0.7280 | 544.36 |
TensorRT | ✅ | 100.3 | 0.7285 | 33.21 |
TF SavedModel | ✅ | 247.5 | 0.7280 | 543.65 |
TF GraphDef | ✅ | 99 | 0.7280 | 906.63 |
TF Lite | ✅ | 99 | 0.7280 | 2758.08 |
PaddlePaddle | ✅ | 197.9 | 0.7280 | 3678 |
NCNN | ✅ | 98.9 | 0.7260 | 135 |
Formato | Stato | Dimensione su disco (MB) | mAP50-95(B) | Tempo di inferenza (ms/im) |
---|---|---|---|---|
PyTorch | ✅ | 83.7 | 0.7768 | 61.3 |
TorchScript | ✅ | 167.2 | 0.7554 | 87.9 |
ONNX | ✅ | 166.8 | 0.7551 | 852.29 |
OpenVINO | ✅ | 167 | 0.7551 | 1012.6 |
TensorRT | ✅ | 168.4 | 0.7554 | 51.23 |
TF SavedModel | ✅ | 417.2 | 0.7551 | 990.45 |
TF GraphDef | ✅ | 166.9 | 0.7551 | 1649.86 |
TF Lite | ✅ | 166.9 | 0.7551 | 5652.37 |
PaddlePaddle | ✅ | 333.6 | 0.7551 | 7114.67 |
NCNN | ✅ | 166.8 | 0.7685 | 231.9 |
Formato | Stato | Dimensione su disco (MB) | mAP50-95(B) | Tempo di inferenza (ms/im) |
---|---|---|---|---|
PyTorch | ✅ | 130.5 | 0.7759 | 93 |
TorchScript | ✅ | 260.7 | 0.7472 | 135.1 |
ONNX | ✅ | 260.4 | 0.7479 | 1296.13 |
OpenVINO | ✅ | 260.6 | 0.7479 | 1502.15 |
TensorRT | ✅ | 261.8 | 0.7469 | 84.53 |
TF SavedModel | ✅ | 651.1 | 0.7479 | 1451.76 |
TF GraphDef | ✅ | 260.5 | 0.7479 | 4029.36 |
TF Lite | ✅ | 260.4 | 0.7479 | 8772.86 |
PaddlePaddle | ✅ | 520.8 | 0.7479 | 10619.53 |
NCNN | ✅ | 260.4 | 0.7646 | 376.38 |
Visita questo link per esplorare altri benchmark effettuati da Seeed Studio su diverse versioni di hardware NVIDIA Jetson.
Riprodurre i nostri risultati
Per riprodurre i benchmark di Ultralytics su tutti i formati di esportazione, esegui questo codice:
Esempio
Si noti che i risultati dei benchmark possono variare in base all'esatta configurazione hardware e software di un sistema, nonché al carico di lavoro corrente del sistema al momento dell'esecuzione dei benchmark. Per ottenere i risultati più affidabili, usa un set di dati con un gran numero di immagini, ad es. data='coco8.yaml' (4 val images), or
data='coco.yaml'` (5000 immagini val).
Migliori pratiche per l'utilizzo di NVIDIA Jetson
Quando si utilizza NVIDIA Jetson, ci sono un paio di buone pratiche da seguire per ottenere le massime prestazioni su NVIDIA Jetson che esegue YOLOv8.
-
Abilita la modalità MAX Power
Abilitando la modalità MAX Power su Jetson, tutti i core della CPU e della GPU saranno attivi.
-
Abilita gli orologi Jetson
Abilitando Jetson Clocks, tutti i core della CPU e della GPU saranno clockati alla loro frequenza massima.
-
Installa l'applicazione Jetson Stats
Possiamo utilizzare l'applicazione jetson stats per monitorare le temperature dei componenti del sistema e controllare altri dettagli del sistema, come ad esempio visualizzare l'utilizzo di CPU, GPU, RAM, modificare le modalità di alimentazione, impostare i clock massimi, controllare le informazioni di JetPack.
I prossimi passi
Congratulazioni per aver configurato con successo YOLOv8 sul tuo NVIDIA Jetson! Per ulteriori informazioni e supporto, visita la guida Ultralytics YOLOv8 Docs!