Ultralytics YOLO11 auf NVIDIA Jetson mit DeepStream SDK und TensorRT
Beobachten: Verwendung von Ultralytics YOLO11 mit NVIDIA Deepstream auf Jetson Orin NX 🚀
Dieser umfassende Leitfaden bietet eine detaillierte Anleitung für die Bereitstellung von Ultralytics YOLO11 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 mit dem NVIDIA Jetson Orin Nano Super Developer Kit getestet, auf dem die neueste stabile JetPack-Version JP6.1 läuft, Seeed Studio reComputer J4012, basierend auf NVIDIA Jetson Orin NX 16GB mit der JetPack-Version JP5.1.3 und Seeed Studio reComputer J1020 v2, basierend auf NVIDIA Jetson Nano 4GB mit der JetPack-Version JP4.6.4. Es wird erwartet, dass es mit der gesamten NVIDIA Jetson-Hardware-Produktpalette funktioniert, einschließlich der neuesten und der älteren Modelle.
Was ist NVIDIA DeepStream?
NVIDIADas DeepStream SDK 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 KI-Entwickler, Softwarepartner, Start-ups und OEMs, die IVA-Anwendungen und -Dienste (Intelligent Video Analytics) entwickeln. Sie können jetzt Stream-Processing-Pipelines erstellen, die neuronale Netzwerke und andere komplexe Verarbeitungsaufgaben wie Tracking, Videocodierung/-decodierung und Videorendering umfassen. Diese Pipelines ermöglichen Echtzeit-Analysen von Video-, Bild- und Sensordaten. Die Multi-Plattform-Unterstützung von DeepStream ermöglicht Ihnen eine schnellere und einfachere Entwicklung von KI-Anwendungen und -Diensten vor Ort, am Netzwerkrand und in der Cloud.
Voraussetzungen
Bevor Sie beginnen, diesen Leitfaden zu lesen:
- Besuchen Sie unsere Dokumentation, Quick Start Guide: NVIDIA Jetson mit Ultralytics YOLO11 zum Einrichten Ihres NVIDIA Jetson-Geräts mit Ultralytics YOLO11
-
DeepStream SDK entsprechend der JetPack-Version installieren
- Für JetPack 4.6.4, installieren Sie DeepStream 6.0.1
- Für JetPack 5.1.3, installieren Sie DeepStream 6.3
- Für JetPack 6.1, installieren Sie DeepStream 7.1
Tipp
In dieser Anleitung haben wir die Debian-Paketmethode für die Installation des DeepStream-SDK auf dem Jetson-Gerät verwendet. Sie können auch das DeepStream SDK auf Jetson (archiviert) besuchen, um auf ältere Versionen von DeepStream zuzugreifen.
DeepStream-Konfiguration für YOLO11
Hier verwenden wir marcoslucianops/DeepStream-Yolo GitHub-Repository, das NVIDIA DeepStream SDK-Unterstützung für YOLO Modelle enthält. Wir schätzen die Bemühungen von marcoslucianops für seine Beiträge!
-
Installieren Sie Ultralytics mit den erforderlichen Abhängigkeiten
cd ~ pip install -U pip git clone https://github.com/ultralytics/ultralytics cd ultralytics pip install -e ".[export]" onnxslim
-
Klonen Sie das DeepStream-Yolo Repository
cd ~ git clone https://github.com/marcoslucianops/DeepStream-Yolo
-
Kopieren Sie die
export_yolo11.py
Datei vonDeepStream-Yolo/utils
in das Verzeichnisultralytics
Ordnercp ~/DeepStream-Yolo/utils/export_yolo11.py ~/ultralytics cd ultralytics
-
Laden Sie Ultralytics YOLO11 Erkennungsmodell (.pt) Ihrer Wahl aus den YOLO11 Veröffentlichungen herunter. Hier verwenden wir yolo11s.pt.
wget https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s.pt
Hinweis
Sie können auch ein speziell trainiertes YOLO11 Modell verwenden.
-
Modell umwandeln in ONNX
python3 export_yolo11.py -w yolo11s.pt
Übergeben Sie die folgenden Argumente an den obigen Befehl
Für DeepStream 5.1 entfernen Sie die
--dynamic
argumentieren und verwendenopset
12 oder niedriger. Der Standardopset
ist 17.--opset 12
So ändern Sie die Inferenzgröße (Standard: 640)
-s SIZE --size SIZE -s HEIGHT WIDTH --size HEIGHT WIDTH
Beispiel für 1280:
-s 1280 or -s 1280 1280
Zur Vereinfachung des Modells ONNX (DeepStream >= 6.0)
--simplify
So verwenden Sie die dynamische Stapelgröße (DeepStream >= 6.1)
--dynamic
So verwenden Sie eine statische Chargengröße (Beispiel für Chargengröße = 4)
--batch 4
-
Kopieren Sie die generierte
.onnx
Modelldatei undlabels.txt
Datei zumDeepStream-Yolo
Ordnercp yolo11s.pt.onnx labels.txt ~/DeepStream-Yolo cd ~/DeepStream-Yolo
-
Stellen Sie die Version CUDA entsprechend der installierten JetPack-Version ein.
Für JetPack 4.6.4:
export CUDA_VER=10.2
Für JetPack 5.1.3:
export CUDA_VER=11.4
Für Jetpack 6.1:
export CUDA_VER=12.6
-
Kompilieren Sie die Bibliothek
make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
-
Bearbeiten Sie die
config_infer_primary_yolo11.txt
Datei entsprechend Ihrem Modell (für YOLO11s mit 80 Klassen)[property] ... onnx-file=yolo11s.pt.onnx ... num-detected-classes=80 ...
-
Bearbeiten Sie die
deepstream_app_config
Datei... [primary-gie] ... config-file=config_infer_primary_yolo11.txt
-
Sie können die Videoquelle auch in
deepstream_app_config
Datei. Hier wird eine Standard-Videodatei geladen... [source0] ... uri=file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4
Inferenz ausführen
deepstream-app -c deepstream_app_config.txt
Hinweis
Es wird lange dauern, bis die TensorRT Engine-Datei generiert ist, bevor die Inferenz gestartet wird. Haben Sie also bitte Geduld.

Tipp
Wenn Sie das Modell in FP16-Präzision konvertieren wollen, setzen Sie einfach model-engine-file=model_b1_gpu0_fp16.engine
und network-mode=2
innerhalb config_infer_primary_yolo11.txt
INT8 Kalibrierung
Wenn Sie die INT8-Präzision für die Inferenz verwenden möchten, müssen Sie die folgenden Schritte ausführen
Hinweis
Derzeit funktioniert INT8 nicht mit TensorRT 10.x. Dieser Teil des Leitfadens wurde mit TensorRT 8.x getestet, das voraussichtlich funktionieren wird.
-
Einstellung
OPENCV
Umgebungsvariableexport OPENCV=1
-
Kompilieren Sie die Bibliothek
make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
-
Für den COCO-Datensatz laden Sie bitte die val2017, extrahieren und verschieben nach
DeepStream-Yolo
Ordner -
Erstellen Sie ein neues Verzeichnis für Kalibrierungsbilder
mkdir calibration
-
Führen Sie Folgendes aus, um 1000 zufällige Bilder aus dem COCO-Datensatz auszuwählen und die Kalibrierung durchzuführen
for jpg in $(ls -1 val2017/*.jpg | sort -R | head -1000); do cp ${jpg} calibration/ done
Hinweis
NVIDIA empfiehlt mindestens 500 Bilder, um eine gute Genauigkeit zu erzielen. In diesem Beispiel wurden 1000 Bilder gewählt, um eine höhere Genauigkeit zu erzielen (mehr Bilder = höhere Genauigkeit). Sie können den Wert von Kopf -1000 einstellen. Zum Beispiel für 2000 Bilder, Kopf -2000. Dieser Prozess kann sehr lange dauern.
-
Erstellen Sie die
calibration.txt
Datei mit allen ausgewählten Bildernrealpath calibration/*jpg > calibration.txt
-
Umgebungsvariablen festlegen
export INT8_CALIB_IMG_PATH=calibration.txt export INT8_CALIB_BATCH_SIZE=1
Hinweis
Höhere INT8_CALIB_BATCH_SIZE-Werte führen zu einer höheren Genauigkeit und schnelleren Kalibrierungsgeschwindigkeit. Stellen Sie ihn entsprechend Ihrem GPU Speicher ein.
-
Aktualisieren Sie die
config_infer_primary_yolo11.txt
DateiVon
... model-engine-file=model_b1_gpu0_fp32.engine #int8-calib-file=calib.table ... network-mode=0 ...
An
... model-engine-file=model_b1_gpu0_int8.engine int8-calib-file=calib.table ... network-mode=1 ...
Inferenz ausführen
deepstream-app -c deepstream_app_config.txt
MultiStream-Einrichtung
Beobachten: Wie man mehrere Streams mit DeepStream SDK auf Jetson Nano mit Ultralytics YOLO11 ausführt 🎉
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 ein Raster zu erstellen, das der Anzahl der Streams entspricht, die Sie haben möchten. Für 4 Streams können wir beispielsweise 2 Zeilen und 2 Spalten hinzufügen.
[tiled-display] rows=2 columns=2
-
Einstellung
num-sources=4
und hinzufügenuri
von allen 4 Strömen[source0] enable=1 type=3 uri=path/to/video1.jpg uri=path/to/video2.jpg uri=path/to/video3.jpg uri=path/to/video4.jpg num-sources=4
Inferenz ausführen
deepstream-app -c deepstream_app_config.txt

Benchmark-Ergebnisse
Die folgenden Benchmarks fassen zusammen, wie die YOLO11 Modelle bei verschiedenen TensorRT Präzisionsstufen mit einer Eingabegröße von 640x640 auf NVIDIA Jetson Orin NX 16GB abschneiden.
Vergleichstabelle

Detaillierte Vergleichstabelle
Leistung
Format | Status | Inferenzzeit (ms/im) |
---|---|---|
TensorRT (FP32) | ✅ | 8.64 |
TensorRT (FP16) | ✅ | 5.27 |
TensorRT (INT8) | ✅ | 4.54 |
Format | Status | Inferenzzeit (ms/im) |
---|---|---|
TensorRT (FP32) | ✅ | 14.53 |
TensorRT (FP16) | ✅ | 7.91 |
TensorRT (INT8) | ✅ | 6.05 |
Format | Status | Inferenzzeit (ms/im) |
---|---|---|
TensorRT (FP32) | ✅ | 32.05 |
TensorRT (FP16) | ✅ | 15.55 |
TensorRT (INT8) | ✅ | 10.43 |
Format | Status | Inferenzzeit (ms/im) |
---|---|---|
TensorRT (FP32) | ✅ | 39.68 |
TensorRT (FP16) | ✅ | 19.88 |
TensorRT (INT8) | ✅ | 13.64 |
Format | Status | Inferenzzeit (ms/im) |
---|---|---|
TensorRT (FP32) | ✅ | 80.65 |
TensorRT (FP16) | ✅ | 39.06 |
TensorRT (INT8) | ✅ | 22.83 |
Danksagung
Dieser Leitfaden wurde ursprünglich von unseren Freunden bei Seeed Studio, Lakshantha und Elaine, erstellt.
FAQ
Wie kann ich Ultralytics YOLO11 auf einem NVIDIA Jetson-Gerät einrichten?
Um Ultralytics YOLO11 auf einem NVIDIA Jetson-Gerät einzurichten, müssen Sie zunächst das DeepStream SDK installieren, das mit Ihrer JetPack-Version kompatibel ist. Befolgen Sie die Schritt-für-Schritt-Anleitung in unserem Quick Start Guide, um Ihren NVIDIA Jetson für die YOLO11 Bereitstellung zu konfigurieren.
Welche Vorteile hat die Verwendung von TensorRT mit YOLO11 auf NVIDIA Jetson?
Durch die Verwendung von TensorRT mit YOLO11 wird das Modell für die Inferenz optimiert, wodurch die Latenzzeit erheblich reduziert und der Durchsatz auf NVIDIA Jetson-Geräten verbessert wird. TensorRT bietet eine leistungsstarke Deep-Learning-Inferenz mit geringer Latenzzeit durch Ebenenfusion, Präzisionskalibrierung und automatisches Kernel-Tuning. Dies führt zu einer schnelleren und effizienteren Ausführung, die besonders für Echtzeitanwendungen wie Videoanalyse und autonome Maschinen nützlich ist.
Kann ich Ultralytics YOLO11 mit DeepStream SDK auf unterschiedlicher NVIDIA Jetson-Hardware ausführen?
Ja, die Anleitung für die Bereitstellung von Ultralytics YOLO11 mit dem DeepStream SDK und TensorRT ist mit der gesamten NVIDIA Jetson-Produktpalette kompatibel. Dazu gehören Geräte wie der Jetson Orin NX 16GB mit JetPack 5.1.3 und der Jetson Nano 4GB mit JetPack 4.6.4. Detaillierte Schritte finden Sie im Abschnitt DeepStream-Konfiguration für YOLO11.
Wie kann ich ein Modell von YOLO11 in ONNX für DeepStream konvertieren?
Um ein Modell von YOLO11 in das Format ONNX für die Bereitstellung mit DeepStream zu konvertieren, verwenden Sie die utils/export_yolo11.py
Skript aus dem DeepStream-Yolo Repository.
Hier ist ein Beispielbefehl:
python3 utils/export_yolo11.py -w yolo11s.pt --opset 12 --simplify
Weitere Einzelheiten zur Modellkonvertierung finden Sie in unserem Abschnitt zum Modellexport.
Wie lauten die Leistungsvergleiche für YOLO auf NVIDIA Jetson Orin NX?
Die Leistung der YOLO11 Modelle auf NVIDIA Jetson Orin NX 16GB variiert je nach TensorRT Präzisionsniveau. Zum Beispiel erreichen die YOLO11s-Modelle:
- FP32 Präzision: 14,6 ms/im, 68,5 FPS
- FP16 Präzision: 7,94 ms/im, 126 FPS
- INT8 Präzision: 5,95 ms/im, 168 FPS
Diese Benchmarks unterstreichen die Effizienz und Fähigkeit der Verwendung von TensorRT-optimierten YOLO11 Modellen auf NVIDIA Jetson Hardware. Weitere Details finden Sie in unserem Abschnitt Benchmark-Ergebnisse.