Snelstartgids: NVIDIA Jetson met Ultralytics YOLOv8
Deze uitgebreide handleiding biedt een gedetailleerde handleiding voor het implementeren van Ultralytics YOLOv8 op NVIDIA Jetson apparaten. Daarnaast worden prestatiebenchmarks getoond om de mogelijkheden van YOLOv8 op deze kleine en krachtige apparaten te demonstreren.
Opmerking
Deze handleiding is getest met Seeed Studio reComputer J4012 die is gebaseerd op NVIDIA Jetson Orin NX 16GB waarop de nieuwste stabiele JetPack-uitgave JP5.1.3 draait. Als je deze handleiding gebruikt voor oudere Jetson-apparaten zoals de Jetson Nano (die alleen ondersteuning biedt tot JP4.6.4), kan het zijn dat het niet gegarandeerd werkt. Er wordt echter verwacht dat dit werkt op alle Jetson Orin, Xavier NX, AGX Xavier apparaten met JP5.1.3.
Wat is NVIDIA Jetson?
NVIDIA Jetson is een serie embedded computing boards ontworpen om versnelde AI (artificial intelligence) computing naar randapparaten te brengen. Deze compacte en krachtige apparaten zijn gebouwd rond NVIDIA's GPU architectuur en zijn in staat om complexe AI algoritmes en deep learning modellen direct op het apparaat uit te voeren, zonder afhankelijk te zijn van cloud computing resources. Jetson kaarten worden vaak gebruikt in robotica, autonome voertuigen, industriële automatisering en andere toepassingen waarbij AI-inferentie lokaal moet worden uitgevoerd met een lage latentie en hoge efficiëntie. Bovendien zijn deze kaarten gebaseerd op de ARM64-architectuur en verbruiken ze minder stroom dan traditionele GPU-computers.
NVIDIA Jetson serie vergelijking
Jetson Orin is de nieuwste iteratie van de NVIDIA Jetson familie gebaseerd op de NVIDIA Ampere architectuur die drastisch verbeterde AI prestaties brengt in vergelijking met de vorige generaties. Onderstaande tabel vergelijkt enkele van de Jetson apparaten in het ecosysteem.
Jetson AGX Orin 64 GB | Jetson Orin NX 16 GB | Jetson Orin Nano 8GB | Jetson AGX Xavier | Jetson Xavier NX | Jetson Nano | |
---|---|---|---|---|---|---|
AI-prestaties | 275 TOPS | 100 TOPS | 40 TOP's | 32 TOPS | 21 TOPS | 472 GFLOPS |
GPU | 2048-core NVIDIA GPU met Ampère-architectuur en 64 Tensor cores | 1024-core NVIDIA GPU met Ampère-architectuur en 32 Tensor cores | 1024-core NVIDIA GPU met Ampère-architectuur en 32 Tensor cores | 512-core NVIDIA Volta architectuur GPU met 64 Tensor cores | 384-core NVIDIA Volta™ architectuur GPU met 48 Tensor cores | 128-core NVIDIA Maxwell™ architectuur GPU |
GPU Max. frequentie | 1,3 GHz | 918 MHz | 625 MHz | 1377 MHz | 1100 MHz | 921 MHz |
CPU | 12-core NVIDIA Arm® Cortex A78AE v8.2 64-bits CPU 3 MB L2 + 6 MB L3 | 8-core NVIDIA Arm® Cortex A78AE v8.2 64-bits CPU 2 MB L2 + 4 MB L3 | 6-core Arm® Cortex®-A78AE v8.2 64-bits CPU 1,5 MB L2 + 4 MB L3 | 8-core NVIDIA Carmel Arm®v8.2 64-bits CPU 8 MB L2 + 4 MB L3 | 6-core NVIDIA Carmel Arm®v8.2 64-bits CPU 6 MB L2 + 4 MB L3 | Vierkernige Arm® Cortex®-A57 MPCore-processor |
CPU Max. frequentie | 2,2 GHz | 2,0 GHz | 1,5 GHz | 2,2 GHz | 1,9 GHz | 1,43 GHz |
Geheugen | 64 GB 256-bits LPDDR5 204,8 GB/s | 16 GB 128-bits LPDDR5 102,4 GB/s | 8 GB 128-bits LPDDR5 68 GB/s | 32 GB 256-bits LPDDR4x 136,5 GB/s | 8 GB 128-bits LPDDR4x 59,7 GB/s | 4 GB 64-bits LPDDR4 25,6 GB/s". |
Ga voor een meer gedetailleerde vergelijkingstabel naar het gedeelte Technische specificaties op de officiële NVIDIA Jetson pagina.
Wat is NVIDIA JetPack?
NVIDIA JetPack SDK die de Jetson-modules aandrijft is de meest uitgebreide oplossing en biedt een volledige ontwikkelomgeving voor het bouwen van end-to-end versnelde AI-toepassingen en verkort de time-to-market. JetPack bevat Jetson Linux met bootloader, Linux kernel, Ubuntu desktop omgeving en een complete set bibliotheken voor versnelling van GPU computing, multimedia, graphics en computer vision. Het bevat ook voorbeelden, documentatie en ontwikkelaarstools voor zowel de hostcomputer als de ontwikkelaarskit, en ondersteunt SDK's op een hoger niveau zoals DeepStream voor streaming video analytics, Isaac voor robotica en Riva voor conversationele AI.
Flash JetPack naar NVIDIA Jetson
De eerste stap nadat je een NVIDIA Jetson apparaat in handen hebt gekregen, is het flashen van NVIDIA JetPack naar het apparaat. Er zijn verschillende manieren om NVIDIA Jetson apparaten te flashen.
- Als je in het bezit bent van een officiële NVIDIA Development Kit zoals de Jetson Orin Nano Developer Kit, kun je via deze link een image downloaden en een SD-kaart met JetPack voorbereiden om het apparaat op te starten.
- Als je een andere NVIDIA Development Kit bezit, kun je naar deze link gaan om JetPack naar het apparaat te flashen met behulp van SDK Manager.
- Als je een Seeed Studio reComputer J4012 apparaat hebt, kun je via deze link JetPack flashen naar de bijgeleverde SSD.
- Als je in het bezit bent van een ander apparaat van derden dat wordt aangedreven door de NVIDIA Jetson module, is het aan te raden om de opdrachtregel te volgen voor het flashen via deze link.
Opmerking
Voor methodes 3 en 4 hierboven, voer na het flashen van het systeem en het booten van het apparaat "sudo apt update && sudo apt install nvidia-jetpack -y" in op de apparaatterminal om alle resterende JetPack componenten die nodig zijn te installeren.
Opzetten Ultralytics
Er zijn twee manieren om Ultralytics pakket op NVIDIA Jetson in te stellen om je volgende Computer Vision project te bouwen. Je kunt een van beide gebruiken.
Beginnen met Docker
De snelste manier om aan de slag te gaan met Ultralytics YOLOv8 op NVIDIA Jetson is door te draaien met voorgebouwde docker image voor Jetson.
Voer het onderstaande commando uit om de Docker-container op te halen en op Jetson te draaien. Dit is gebaseerd op l4t-pytorch docker image dat PyTorch en Torchvision bevat in een Python3-omgeving.
t=ultralytics/ultralytics:latest-jetson && sudo docker pull $t && sudo docker run -it --ipc=host --runtime=nvidia $t
Nadat dit is gedaan, ga je naar het gedeelte TensorRT gebruiken op NVIDIA Jetson.
Starten zonder Docker
Installeer Ultralytics pakket
Hier zullen we ultralyics pakket installeren op de Jetson met optionele afhankelijkheden zodat we de PyTorch modellen kunnen exporteren naar andere verschillende formaten. We zullen ons voornamelijk richten op de NVIDIA TensorRT export omdat TensoRT ervoor zorgt dat we de maximale prestaties uit de Jetson apparaten kunnen halen.
-
Pakketlijst bijwerken, pip installeren en upgraden naar de nieuwste
-
Installeer
ultralytics
pip-pakket met optionele afhankelijkheden -
Herstart het apparaat
Installeer PyTorch en Torchvision
De bovenstaande ultralytics installatie zal Torch en Torchvision installeren. Deze 2 pakketten geïnstalleerd via pip zijn echter niet compatibel om te draaien op het Jetson platform dat is gebaseerd op de ARM64 architectuur. Daarom moeten we handmatig PyTorch pip wheel installeren en Torchvision vanaf de broncode compileren en installeren.
-
Verwijder de momenteel geïnstalleerde PyTorch en Torchvision
-
Installeer PyTorch 2.1.0 volgens 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
-
Installeer Torchvision v0.16.2 volgens PyTorch v2.1.0
Bezoek de paginaPyTorch voor Jetson om toegang te krijgen tot alle verschillende versies van PyTorch voor verschillende JetPack-versies. Ga voor een gedetailleerdere lijst van PyTorch, Torchvision compatibiliteit naar de PyTorch en Torchvision compatibiliteitspagina.
Installeer onnxruntime-gpu
De onnxruntime-gpu pakket gehost in PyPI heeft niet aarch64
binaries voor de Jetson. We moeten dit pakket dus handmatig installeren. Dit pakket is nodig voor sommige exports.
Allemaal verschillend onnxruntime-gpu
pakketten die corresponderen met verschillende JetPack- en Python -versies zijn opgesomd hier. Hier gaan we echter het volgende downloaden en installeren onnxruntime-gpu 1.17.0
met Python3.8
ondersteuning voor het JetPack dat we voor deze handleiding gebruiken.
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
Opmerking
onnxruntime-gpu
zal automatisch de numpy versie terugzetten naar de laatste versie. We moeten numpy dus opnieuw installeren naar 1.23.5
om een probleem op te lossen door uit te voeren:
pip install numpy==1.23.5
Gebruik TensorRT op NVIDIA Jetson
Van alle modelexportformaten die door Ultralytics worden ondersteund, levert TensorRT de beste inferentieprestaties bij het werken met NVIDIA Jetson apparaten en onze aanbeveling is dan ook om TensorRT te gebruiken met Jetson. We hebbenhier ook een gedetailleerd document over TensorRT .
Model omzetten naar TensorRT en conclusies trekken
Het YOLOv8n model in het formaat PyTorch wordt geconverteerd naar TensorRT om inferentie uit te voeren met het geëxporteerde model.
Voorbeeld
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')
Opmerking
Ga naar de pagina Exporteren voor extra argumenten bij het exporteren van modellen naar verschillende modelformaten
NVIDIA Jetson Orin YOLOv8 Benchmarks
YOLOv8 Benchmarks werden uitgevoerd door het Ultralytics team op 10 verschillende modelformaten waarbij snelheid en nauwkeurigheid werden gemeten: PyTorch, TorchScript, ONNX, OpenVINO, TensorRT, TF SavedModel , TF Graphdef , TF Lite, PaddlePaddle, NCNN. Benchmarks werden uitgevoerd op de Seeed Studio reComputer J4012, aangedreven door een Jetson Orin NX 16GB apparaat met FP32 precisie en een standaard invoergrootte van 640.
Vergelijkingstabel
Hoewel alle modelexports werken met NVIDIA Jetson, hebben we alleen PyTorch, TorchScript, TensorRT opgenomen in de onderstaande vergelijkingstabel omdat deze gebruik maken van de GPU op de Jetson en gegarandeerd de beste resultaten opleveren. Alle andere exports maken alleen gebruik van de CPU en de prestaties zijn niet zo goed als de bovenstaande drie. Je kunt benchmarks voor alle exports vinden in het gedeelte na deze grafiek.
Gedetailleerde vergelijkingstabel
De onderstaande tabel toont de benchmarkresultaten voor vijf verschillende modellen (YOLOv8n, YOLOv8s, YOLOv8m, YOLOv8l, YOLOv8x) over tien verschillende indelingen (PyTorch, TorchScript, ONNX, OpenVINO, TensorRT, TF SavedModel , TF Graphdef , TF Lite, PaddlePaddle, NCNN), met de status, grootte, mAP50-95(B) metric en inferentietijd voor elke combinatie.
Prestaties
Formaat | Status | Grootte op schijf (MB) | mAP50-95(B) | Inferentietijd (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 |
Formaat | Status | Grootte op schijf (MB) | mAP50-95(B) | Inferentietijd (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 |
Formaat | Status | Grootte op schijf (MB) | mAP50-95(B) | Inferentietijd (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 |
Formaat | Status | Grootte op schijf (MB) | mAP50-95(B) | Inferentietijd (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 |
Formaat | Status | Grootte op schijf (MB) | mAP50-95(B) | Inferentietijd (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 |
Ga naar deze link voor meer benchmarks van Seeed Studio op verschillende versies van NVIDIA Jetson hardware.
Onze resultaten reproduceren
Voer deze code uit om de bovenstaande Ultralytics benchmarks op alle exportformaten te reproduceren:
Voorbeeld
Merk op dat de benchmarkresultaten kunnen variëren op basis van de exacte hardware- en softwareconfiguratie van een systeem en de huidige werkbelasting van het systeem op het moment dat de benchmarks worden uitgevoerd. Gebruik voor de meest betrouwbare resultaten een dataset met een groot aantal afbeeldingen, d.w.z. data='coco8.yaml' (4 val images), or
data='coco.yaml'` (5000 valafbeeldingen).
Beste praktijken bij het gebruik van NVIDIA Jetson
Als je NVIDIA Jetson gebruikt, zijn er een paar best practices die je moet volgen om maximale prestaties mogelijk te maken op de NVIDIA Jetson die draait op YOLOv8.
-
MAX-modus inschakelen
Het inschakelen van de MAX Power Mode op de Jetson zorgt ervoor dat alle CPU- en GPU-kernen zijn ingeschakeld.
-
Jetson klokken inschakelen
Het inschakelen van Jetson Clocks zorgt ervoor dat alle CPU- en GPU-kernen op hun maximale frequentie worden geklokt.
-
Installeer de Jetson Stats-toepassing
We kunnen de applicatie jetson stats gebruiken om de temperaturen van de systeemonderdelen te controleren en andere systeemdetails te bekijken, zoals CPU, GPU, RAM-gebruik, energiemodi wijzigen, instellen op maximale klokken, JetPack-informatie controleren.
Volgende stappen
Gefeliciteerd met het succesvol instellen van YOLOv8 op je NVIDIA Jetson! Ga voor meer informatie en ondersteuning naar Ultralytics YOLOv8 Docs!
Gemaakt op 2024-04-02, Bijgewerkt op 2024-05-08
Auteurs: Burhan-Q (2), lakshanthad (2), glenn-jocher (2)