Ultralytics YOLOv8 auf NVIDIA Jetson mit DeepStream SDK und TensorRT
Dieser umfassende Leitfaden enthält eine detaillierte exemplarische Vorgehensweise für die Bereitstellung Ultralytics YOLOv8 auf NVIDIA Jetson-Geräten mit DeepStream SDK und TensorRT. Hier verwenden wir TensorRT , um die Inferenzleistung auf der Jetson-Plattform zu maximieren.
Hinweis
Diese Anleitung wurde sowohl mit Seeed Studio reComputer J4012 getestet, das auf NVIDIA Jetson Orin NX 16 GB mit JetPack-Version von JP5.1.3 basiert, als auch mit Seeed Studio reComputer J1020 v2 , die auf NVIDIA Jetson Nano 4 GB basiert, mit JetPack-Version von JP4.6.4. Es wird erwartet, dass es in der gesamten NVIDIA Jetson-Hardware-Reihe funktioniert, einschließlich der neuesten und älteren.
Was ist NVIDIA DeepStream?
Das DeepStream SDK von NVIDIA ist ein komplettes Streaming-Analyse-Toolkit auf Basis von GStreamer für KI-basierte Multisensor-Verarbeitung, Video-, Audio- und Bildverständnis. Es ist ideal für Vision-AI-Entwickler, Softwarepartner, Startups und OEMs, die IVA-Apps und -Dienste (Intelligent Video Analytics) entwickeln. Sie können jetzt Streamverarbeitungspipelines erstellen, die neuronale Netze und andere komplexe Verarbeitungsaufgaben wie Nachverfolgung, Videocodierung/-decodierung und Videorendering enthalten. Diese Pipelines ermöglichen Echtzeitanalysen von Video-, Bild- und Sensordaten. Die Multi-Plattform-Unterstützung von DeepStream bietet Ihnen eine schnellere und einfachere Möglichkeit, Vision-KI-Anwendungen und -Dienste vor Ort, am Edge und in der Cloud zu entwickeln.
Voraussetzungen
Bevor Sie dieser Anleitung folgen:
- Besuchen Sie unsere Dokumentation, Kurzanleitung: NVIDIA Jetson mit Ultralytics YOLOv8 , um Ihr NVIDIA Jetson-Gerät mit Ultralytics YOLOv8
-
Installieren Sie das DeepStream SDK gemäß der JetPack-Version
- Installieren Sie für JetPack 4.6.4 DeepStream 6.0.1
- Installieren Sie für JetPack 5.1.3 DeepStream 6.3
Tipp
In dieser Anleitung haben wir die Debian-Paketmethode verwendet, um das DeepStream SDK auf dem Jetson-Gerät zu installieren. Sie können auch das DeepStream SDK auf Jetson (archiviert) besuchen, um auf ältere Versionen von DeepStream zuzugreifen.
DeepStream-Konfiguration für YOLOv8
Hier verwenden wir marcoslucianops/DeepStream-Yolo GitHub-Repository, das NVIDIA DeepStream SDK-Unterstützung für YOLO Modelle. Wir schätzen die Bemühungen von marcoslucianops für seine Beiträge!
-
Installieren von Abhängigkeiten
-
Klonen Sie das folgende Repository
-
Herunterladen Ultralytics YOLOv8 Detektionsmodell (.pt) Ihrer Wahl aus YOLOv8 Veröffentlichungen. Hier verwenden wir yolov8s.pt.
Hinweis
Sie können auch eine Individuell geschult YOLOv8 Modell.
-
Modell konvertieren in ONNX
Übergeben Sie die folgenden Argumente an den obigen Befehl
Verwenden Sie für DeepStream 6.0.1 opset 12 oder niedriger. Die Standardeinstellung ist 16.
So ändern Sie die Inferenzgröße (Standard: 640)
Beispiel für 1280:
Zur Vereinfachung der ONNX Modell (DeepStream >= 6.0)
So verwenden Sie die dynamische Batch-Größe (DeepStream >= 6.1)
So verwenden Sie die statische Batchgröße (Beispiel für Batchgröße = 4)
-
Stellen Sie die CUDA-Version entsprechend der installierten JetPack-Version ein
Für JetPack 4.6.4:
Für JetPack 5.1.3:
-
Kompilieren Sie die Bibliothek
-
Bearbeiten Sie die
config_infer_primary_yoloV8.txt
Datei entsprechend Ihrem Modell (für YOLOv8s mit 80 Klassen) -
Bearbeiten Sie die
deepstream_app_config
Datei -
Sie können die Videoquelle auch in
deepstream_app_config
Datei. Hier wird eine Standard-Videodatei geladen
Ausführen von Rückschlüssen
Hinweis
Es wird lange dauern, die TensorRT Engine-Datei, bevor Sie die Inferenz starten. Habt also bitte etwas Geduld.
Tipp
Wenn Sie das Modell auf FP16-Genauigkeit umstellen möchten, stellen Sie einfach model-engine-file=model_b1_gpu0_fp16.engine
und network-mode=2
innerhalb config_infer_primary_yoloV8.txt
INT8 Kalibrierung
Wenn du die INT8-Präzision für die Inferenz verwenden möchtest, musst du die folgenden Schritte ausführen
-
Garnitur
OPENCV
Umgebungsvariable -
Kompilieren Sie die Bibliothek
-
Laden Sie für das COCO-Dataset die val2017, extrahieren und nach
DeepStream-Yolo
Ordner -
Erstellen eines neuen Verzeichnisses für Kalibrierungsbilder
-
Führen Sie Folgendes aus, um 1000 zufällige Bilder aus dem COCO-Datensatz auszuwählen, um die Kalibrierung durchzuführen
Hinweis
NVIDIA empfiehlt mindestens 500 Bilder, um eine gute Genauigkeit zu erreichen. In diesem Beispiel werden 1000 Bilder ausgewählt, um eine bessere Genauigkeit zu erhalten (mehr Bilder = mehr Genauigkeit). Sie können es von Kopf -1000 einstellen. Beispiel: Für 2000 Bilder Kopf -2000. Dieser Vorgang kann lange dauern.
-
Erstellen Sie die
calibration.txt
Datei mit allen ausgewählten Bildern -
Festlegen von Umgebungsvariablen
Hinweis
Höhere INT8_CALIB_BATCH_SIZE Werte führen zu mehr Genauigkeit und schnellerer Kalibrierungsgeschwindigkeit. Stellen Sie es entsprechend Ihrem GPU-Speicher ein.
-
Aktualisieren Sie die
config_infer_primary_yoloV8.txt
DateiVon
An
Ausführen von Rückschlüssen
MultiStream-Einrichtung
Um mehrere Streams unter einer einzigen Deepstream-Anwendung einzurichten, können Sie die folgenden Änderungen an der deepstream_app_config.txt
Datei
-
Ändern Sie die Zeilen und Spalten, um eine Rasteranzeige entsprechend der Anzahl der gewünschten Streams zu erstellen. Zum Beispiel können wir für 4 Streams 2 Zeilen und 2 Spalten hinzufügen.
-
Garnitur
num-sources=4
und fügen Sieuri
aller 4 Streams
Ausführen von Rückschlüssen
Benchmark-Ergebnisse
Die folgende Tabelle fasst zusammen, wie YOLOv8s Modelle funktionieren bei unterschiedlichen TensorRT Präzisionspegel mit einer Eingabegröße von 640x640 auf NVIDIA Jetson Orin NX 16GB.
Modellname | Präzision | Inferenzzeit (ms/im) | FPS |
---|---|---|---|
YOLOv8s | FP32 | 15.63 | 64 |
FP16 | 7.94 | 126 | |
INT8 | 5.53 | 181 |
Bestätigungen
Dieser Leitfaden wurde ursprünglich von unseren Freunden von Seeed Studio, Lakshantha und Elaine, erstellt.