Schnellstartanleitung: NVIDIA Jetson mit Ultralytics YOLOv8
Dieser umfassende Leitfaden bietet eine detaillierte Anleitung für den Einsatz von Ultralytics YOLOv8 auf NVIDIA Jetson-Geräten. Außerdem zeigt er anhand von Leistungsbenchmarks die Möglichkeiten von YOLOv8 auf diesen kleinen und leistungsstarken Geräten.
Hinweis
Diese Anleitung wurde mit dem Seeed Studio reComputer J4012 getestet, der auf dem NVIDIA Jetson Orin NX 16GB basiert und auf dem die neueste stabile JetPack-Version JP5.1.3 läuft. Wenn du diese Anleitung für ältere Jetson-Geräte wie den Jetson Nano verwendest (dieser wird nur bis JP4.6.4 unterstützt), kann nicht garantiert werden, dass sie funktioniert. Es wird jedoch erwartet, dass sie auf allen Jetson Orin, Xavier NX und AGX Xavier Geräten mit JP5.1.3 funktioniert.
Was ist NVIDIA Jetson?
NVIDIA Jetson ist eine Reihe von Embedded Computing Boards, die beschleunigte KI (künstliche Intelligenz) auf Edge Devices bringen sollen. Diese kompakten und leistungsstarken Geräte basieren auf der GPU-Architektur von NVIDIA und sind in der Lage, komplexe KI-Algorithmen und Deep-Learning-Modelle direkt auf dem Gerät auszuführen, ohne auf Cloud-Computing-Ressourcen angewiesen zu sein. Jetson Boards werden häufig in der Robotik, in autonomen Fahrzeugen, in der Industrieautomatisierung und in anderen Anwendungen eingesetzt, bei denen KI-Inferenzen lokal mit geringer Latenz und hoher Effizienz ausgeführt werden müssen. Außerdem basieren diese Boards auf der ARM64-Architektur und verbrauchen im Vergleich zu herkömmlichen GPU-Computing-Geräten weniger Strom.
NVIDIA Jetson Serie Vergleich
Jetson Orin ist die neueste Iteration der NVIDIA Jetson-Familie, die auf der NVIDIA Ampere-Architektur basiert und im Vergleich zu den vorherigen Generationen eine drastisch verbesserte KI-Leistung bietet. In der folgenden Tabelle werden einige der Jetson-Geräte im Ökosystem verglichen.
Jetson AGX Orin 64GB | Jetson Orin NX 16GB | Jetson Orin Nano 8GB | Jetson AGX Xavier | Jetson Xavier NX | Jetson Nano | |
---|---|---|---|---|---|---|
KI Leistung | 275 TOPS | 100 TOPS | 40 TOPs | 32 TOPS | 21 TOPS | 472 GFLOPS |
GPU | 2048 Kerne NVIDIA Ampere Architektur GPU mit 64 Tensor Kernen | NVIDIA Ampere-Architektur-GPU mit 1024 Kernen und 32 Tensor Kernen | NVIDIA Ampere-Architektur-GPU mit 1024 Kernen und 32 Tensor Kernen | 512 Kerne NVIDIA Volta Architektur GPU mit 64 Tensor Kernen | 384 Kerne NVIDIA Volta™ Architektur GPU mit 48 Tensor Kernen | 128-Kern NVIDIA Maxwell™ Architektur GPU |
GPU Max Frequenz | 1,3 GHz | 918 MHz | 625 MHz | 1377 MHz | 1100 MHz | 921MHz |
CPU | 12-Kern NVIDIA Arm® Cortex A78AE v8.2 64-bit CPU 3MB L2 + 6MB L3 | 8-Kern NVIDIA Arm® Cortex A78AE v8.2 64-bit CPU 2MB L2 + 4MB L3 | 6-Kern Arm® Cortex®-A78AE v8.2 64-bit CPU 1,5MB L2 + 4MB L3 | 8-Kern NVIDIA Carmel Arm®v8.2 64-bit CPU 8MB L2 + 4MB L3 | 6-Kern NVIDIA Carmel Arm®v8.2 64-bit CPU 6MB L2 + 4MB L3 | Quad-Core Arm® Cortex®-A57 MPCore Prozessor |
CPU Max Frequenz | 2,2 GHz | 2,0 GHz | 1,5 GHz | 2,2 GHz | 1,9 GHz | 1.43GHz |
Speicher | 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" |
Eine detailliertere Vergleichstabelle findest du im Abschnitt Technische Daten auf der offiziellen NVIDIA Jetson Seite.
Was ist NVIDIA JetPack?
Das NVIDIA JetPack SDK, das die Jetson-Module antreibt, ist die umfassendste Lösung und bietet eine vollständige Entwicklungsumgebung für die Erstellung von durchgängig beschleunigten KI-Anwendungen und verkürzt die Markteinführungszeit. JetPack umfasst Jetson Linux mit Bootloader, Linux-Kernel, Ubuntu-Desktop-Umgebung und einem kompletten Satz von Bibliotheken für die Beschleunigung von GPU-Computing, Multimedia, Grafik und Computer Vision. Außerdem enthält es Beispiele, Dokumentationen und Entwickler-Tools für den Host-Computer und das Developer Kit und unterstützt SDKs auf höherer Ebene wie DeepStream für Streaming Video Analytics, Isaac für Robotik und Riva für Konversations-KI.
Flash JetPack fĂĽr NVIDIA Jetson
Der erste Schritt, nachdem du ein NVIDIA Jetson Gerät in die Hände bekommen hast, ist das Flashen des NVIDIA JetPack auf das Gerät. Es gibt verschiedene Möglichkeiten, NVIDIA Jetson-Geräte zu flashen.
- Wenn du ein offizielles NVIDIA Development Kit wie das Jetson Orin Nano Developer Kit besitzt, kannst du diesen Link besuchen, um ein Image herunterzuladen und eine SD-Karte mit JetPack zum Booten des Geräts vorzubereiten.
- Wenn du ein anderes NVIDIA Development Kit besitzt, kannst du diesen Link besuchen, um JetPack mit dem SDK Manager auf das Gerät zu flashen.
- Wenn du ein Seeed Studio reComputer J4012 Gerät besitzt, kannst du diesen Link besuchen, um JetPack auf die mitgelieferte SSD zu flashen.
- Wenn du ein anderes Gerät eines Drittanbieters besitzt, das mit dem NVIDIA Jetson Modul betrieben wird, empfehlen wir dir, das Flashen per Kommandozeile unter diesem Link durchzuführen.
Hinweis
Bei den oben genannten Methoden 3 und 4 gibst du nach dem Flashen des Systems und dem Booten des Geräts bitte "sudo apt update && sudo apt install nvidia-jetpack -y" auf dem Geräteterminal ein, um alle übrigen benötigten JetPack-Komponenten zu installieren.
Einrichten Ultralytics
Es gibt zwei Möglichkeiten, das Ultralytics Paket auf dem NVIDIA Jetson einzurichten, um dein nächstes Computer Vision Projekt zu erstellen. Du kannst eine von beiden nutzen.
Mit Docker beginnen
Der schnellste Weg, um mit Ultralytics YOLOv8 auf dem NVIDIA Jetson loszulegen, ist die Verwendung eines vorgefertigten Docker-Images fĂĽr den Jetson.
Führe den unten stehenden Befehl aus, um den Docker-Container zu ziehen und auf dem Jetson auszuführen. Dies basiert auf dem l4t-pytorch Docker-Image, das PyTorch und Torchvision in einer Python3-Umgebung enthält.
t=ultralytics/ultralytics:latest-jetson && sudo docker pull $t && sudo docker run -it --ipc=host --runtime=nvidia $t
Wenn du das getan hast, fahre mit dem Abschnitt TensorRT auf NVIDIA Jetson verwenden fort.
Start ohne Docker
Ultralytics Paket installieren
Hier werden wir das ultralyics-Paket auf dem Jetson mit optionalen Abhängigkeiten installieren, damit wir die PyTorch Modelle in andere Formate exportieren können. Wir werden uns hauptsächlich auf die Exporte von NVIDIA TensorRT konzentrieren, da TensoRT dafür sorgt, dass wir die maximale Leistung aus den Jetson-Geräten herausholen können.
-
Paketliste aktualisieren, pip installieren und auf den neuesten Stand bringen
-
Installiere
ultralytics
Pip-Paket mit optionalen Abhängigkeiten -
Das Gerät neu starten
Installiere PyTorch und Torchvision
Die obige ultralytics Installation wird Torch und Torchvision installieren. Diese beiden ĂĽber pip installierten Pakete sind jedoch nicht kompatibel mit der Jetson-Plattform, die auf der ARM64-Architektur basiert. Deshalb mĂĽssen wir PyTorch pip wheel manuell installieren und Torchvision aus dem Quellcode kompilieren und installieren.
-
Deinstalliere die aktuell installierte PyTorch und Torchvision
-
Installiere PyTorch 2.1.0 gemäß 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
-
Installiere Torchvision v0.16.2 gemäß PyTorch v2.1.0
Auf der SeitePyTorch für Jetson findest du alle verschiedenen Versionen von PyTorch für verschiedene JetPack-Versionen. Eine detailliertere Liste der PyTorch, Torchvision-Kompatibilität findest du auf der SeitePyTorch und Torchvision-Kompatibilität.
Installiere onnxruntime-gpu
Die onnxruntime-gpu Paket, das in PyPI gehostet wird, hat keine aarch64
Binärdateien für den Jetson. Wir müssen dieses Paket also manuell installieren. Dieses Paket wird für einige der Exporte benötigt.
Alle unterschiedlich onnxruntime-gpu
Pakete, die den verschiedenen JetPack- und Python -Versionen entsprechen, sind aufgelistet hier. Hier werden wir jedoch herunterladen und installieren onnxruntime-gpu 1.17.0
mit Python3.8
UnterstĂĽtzung fĂĽr das JetPack, das wir fĂĽr diesen Leitfaden verwenden.
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
Hinweis
onnxruntime-gpu
wird die Numpy-Version automatisch auf die neueste Version zurĂĽckgesetzt. Wir mĂĽssen also numpy neu installieren, um 1.23.5
um ein Problem zu beheben, indem du es ausfĂĽhrst:
pip install numpy==1.23.5
TensorRT auf NVIDIA Jetson verwenden
Von allen Modellexportformaten, die von Ultralytics unterstützt werden, liefert TensorRT die beste Inferenzleistung bei der Arbeit mit NVIDIA Jetson-Geräten und wir empfehlen, TensorRT mit Jetson zu verwenden. Wir haben auch ein ausführliches Dokument zu TensorRT hier.
Modell in TensorRT umwandeln und Inferenz durchfĂĽhren
Das Modell YOLOv8n im Format PyTorch wird in TensorRT konvertiert, um die Inferenz mit dem exportierten Modell durchzufĂĽhren.
Beispiel
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')
Hinweis
Besuche die Seite Exportieren, um zusätzliche Argumente beim Exportieren von Modellen in verschiedene Modellformate zu erhalten
NVIDIA Jetson Orin YOLOv8 Benchmarks
YOLOv8 Benchmarks wurden vom Ultralytics Team auf 10 verschiedenen Modellformaten durchgeführt, um die Geschwindigkeit und Genauigkeit zu messen: PyTorch, TorchScript, ONNX, OpenVINO, TensorRT, TF SavedModel , TF Graphdef , TF Lite, PaddlePaddle, NCNN. Die Benchmarks wurden auf dem Seeed Studio reComputer J4012 mit einem Jetson Orin NX 16GB mit FP32-Genauigkeit und einer Standard-Eingangsgröße von 640 Bildern durchgeführt.
Vergleichstabelle
Obwohl alle Modellexporte mit dem NVIDIA Jetson funktionieren, haben wir nur PyTorch, TorchScript und TensorRT in die untenstehende Vergleichstabelle aufgenommen, weil sie die GPU des Jetson nutzen und garantiert die besten Ergebnisse liefern. Alle anderen Exporte nutzen nur die CPU und die Leistung ist nicht so gut wie die der drei oben genannten. Benchmarks fĂĽr alle Exporte findest du im Abschnitt nach diesem Diagramm.
Detaillierte Vergleichstabelle
Die folgende Tabelle zeigt die Benchmark-Ergebnisse für fünf verschiedene Modelle (YOLOv8n, YOLOv8s, YOLOv8m, YOLOv8l, YOLOv8x) in zehn verschiedenen Formaten (PyTorch, TorchScript, ONNX, OpenVINO, TensorRT, TF SavedModel , TF Graphdef , TF Lite, PaddlePaddle, NCNN) und gibt den Status, die Größe, die mAP50-95(B) Metrik und die Inferenzzeit für jede Kombination an.
Leistung
Format | Status | Größe auf der Festplatte (MB) | mAP50-95(B) | Inferenzzeit (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 |
Format | Status | Größe auf der Festplatte (MB) | mAP50-95(B) | Inferenzzeit (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 |
Format | Status | Größe auf der Festplatte (MB) | mAP50-95(B) | Inferenzzeit (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 |
Format | Status | Größe auf der Festplatte (MB) | mAP50-95(B) | Inferenzzeit (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 |
Format | Status | Größe auf der Festplatte (MB) | mAP50-95(B) | Inferenzzeit (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 |
Unter diesem Link findest du weitere Benchmarking-Tests von Seeed Studio mit verschiedenen Versionen der NVIDIA Jetson Hardware.
Reproduziere unsere Ergebnisse
Um die oben genannten Ultralytics Benchmarks fĂĽr alle Exportformate zu reproduzieren, fĂĽhre diesen Code aus:
Beispiel
Beachte, dass die Benchmarking-Ergebnisse je nach der genauen Hardware- und Softwarekonfiguration eines Systems sowie der aktuellen Arbeitsbelastung des Systems zum Zeitpunkt der Durchführung der Benchmarks variieren können. Die zuverlässigsten Ergebnisse erhältst du, wenn du einen Datensatz mit einer großen Anzahl von Bildern verwendest, d. h. data='coco8.yaml' (4 val images), or
data='coco.yaml'` (5000 val-Bilder).
Best Practices bei der Verwendung von NVIDIA Jetson
Bei der Verwendung von NVIDIA Jetson gibt es einige Best Practices zu beachten, um die maximale Leistung auf dem NVIDIA Jetson mit YOLOv8 zu erreichen.
-
MAX Power Modus aktivieren
Wenn du den MAX Power Mode auf dem Jetson aktivierst, werden alle CPU- und GPU-Kerne eingeschaltet.
-
Jetson-Uhren einschalten
Wenn du Jetson Clocks aktivierst, wird sichergestellt, dass alle CPU- und GPU-Kerne mit ihrer maximalen Frequenz getaktet sind.
-
Jetson Stats Anwendung installieren
Mit der Anwendung jetson stats können wir die Temperaturen der Systemkomponenten überwachen und andere Systemdetails überprüfen, wie z. B. die CPU-, GPU- und RAM-Auslastung anzeigen, den Energiemodus ändern, die maximale Taktfrequenz einstellen und JetPack-Informationen überprüfen.
Nächste Schritte
Herzlichen GlĂĽckwunsch zur erfolgreichen Einrichtung von YOLOv8 auf deinem NVIDIA Jetson! Weitere Anleitungen und UnterstĂĽtzung findest du unter Ultralytics YOLOv8 Docs!
Erstellt am 2024-04-02, Aktualisiert am 2024-05-08
Autoren: Burhan-Q (2), lakshanthad (2), glenn-jocher (2)