Overslaan naar inhoud

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.

NVIDIA Jetson ecosysteem

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.

  1. 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.
  2. 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.
  3. Als je een Seeed Studio reComputer J4012 apparaat hebt, kun je via deze link JetPack flashen naar de bijgeleverde SSD.
  4. 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.

  1. Pakketlijst bijwerken, pip installeren en upgraden naar de nieuwste

    sudo apt update
    sudo apt install python3-pip -y
    pip install -U pip
    
  2. Installeer ultralytics pip-pakket met optionele afhankelijkheden

    pip install ultralytics[export]
    
  3. Herstart het apparaat

    sudo reboot
    

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.

  1. Verwijder de momenteel geïnstalleerde PyTorch en Torchvision

    pip uninstall torch torchvision
    
  2. 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
    
  3. Installeer Torchvision v0.16.2 volgens PyTorch v2.1.0

    sudo apt install -y libjpeg-dev zlib1g-dev
    git clone https://github.com/pytorch/vision torchvision
    cd torchvision
    git checkout v0.16.2
    python3 setup.py install --user
    

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')
# Export a YOLOv8n PyTorch model to TensorRT format
yolo export model=yolov8n.pt format=engine  # creates 'yolov8n.engine'

# Run inference with the exported model
yolo predict model=yolov8n.engine source='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.

NVIDIA Jetson ecosysteem

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

from ultralytics import YOLO

# Load a YOLOv8n PyTorch model
model = YOLO('yolov8n.pt')

# Benchmark YOLOv8n speed and accuracy on the COCO8 dataset for all all export formats
results = model.benchmarks(data='coco8.yaml', imgsz=640)
# Benchmark YOLOv8n speed and accuracy on the COCO8 dataset for all all export formats
yolo benchmark model=yolov8n.pt data=coco8.yaml imgsz=640

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), ordata='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.

  1. MAX-modus inschakelen

    Het inschakelen van de MAX Power Mode op de Jetson zorgt ervoor dat alle CPU- en GPU-kernen zijn ingeschakeld.

    sudo nvpmodel -m 0
    
  2. Jetson klokken inschakelen

    Het inschakelen van Jetson Clocks zorgt ervoor dat alle CPU- en GPU-kernen op hun maximale frequentie worden geklokt.

    sudo jetson_clocks
    
  3. 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.

    sudo apt update
    sudo pip install jetson-stats
    sudo reboot
    jtop
    

Jetson statistieken

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)

Reacties