Ultralytics YOLO11 auf NVIDIA Jetson mit DeepStream SDK und TensorRT
Ansehen: Wie man Ultralytics YOLO11-Modelle mit NVIDIA Deepstream auf Jetson Orin NX verwendet 🚀
Diese umfassende Anleitung bietet eine detaillierte exemplarische Vorgehensweise 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
Dieser Leitfaden wurde mit dem NVIDIA Jetson Orin Nano Super Developer Kit mit der neuesten stabilen JetPack-Version von JP6.1, Seeed Studio reComputer J4012 auf Basis von NVIDIA Jetson Orin NX 16GB mit JetPack-Version von JP5.1.3 und Seeed Studio reComputer J1020 v2 auf Basis von NVIDIA Jetson Nano 4GB mit JetPack-Version von JP4.6.4 getestet. Es wird erwartet, dass es auf der gesamten NVIDIA Jetson Hardware-Palette funktioniert, einschließlich der neuesten und älteren Modelle.
Was ist NVIDIA DeepStream?
Das NVIDIA DeepStream SDK ist ein komplettes Streaming-Analyse-Toolkit, das auf GStreamer basiert und für KI-basierte Multisensor-Verarbeitung, Video-, Audio- und Bildverständnis entwickelt wurde. Es ist ideal für Vision-KI-Entwickler, Softwarepartner, Startups und OEMs, die IVA-Anwendungen (Intelligent Video Analytics) und -Dienste entwickeln. Sie können jetzt Stream-Verarbeitungspipelines erstellen, die neuronale Netze und andere komplexe Verarbeitungsaufgaben wie Tracking, Videocodierung / -decodierung und Videorendering beinhalten. Diese Pipelines ermöglichen Echtzeit-Analysen von Video-, Bild- und Sensordaten. Die Multiplattform-Unterstützung von DeepStream bietet Ihnen eine schnellere und einfachere Möglichkeit, Vision-KI-Anwendungen und -Dienste On-Premise, am Edge und in der Cloud zu entwickeln.
Voraussetzungen
Bevor Sie dieser Anleitung folgen:
- Besuchen Sie unsere Dokumentation, Schnellstartanleitung: NVIDIA Jetson mit Ultralytics YOLO11, um Ihr NVIDIA Jetson-Gerät mit Ultralytics YOLO11 einzurichten.
- Installieren DeepStream SDK entsprechend der JetPack-Version
- 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 zur Installation des DeepStream SDK auf dem Jetson-Gerät verwendet. Sie können auch das DeepStream SDK auf Jetson (Archiv) besuchen, um auf ältere Versionen von DeepStream zuzugreifen.
DeepStream-Konfiguration für YOLO11
Hier verwenden wir das marcoslucianops/DeepStream-Yolo GitHub-Repository, das NVIDIA DeepStream SDK-Unterstützung für YOLO-Modelle beinhaltet. Wir schätzen die Bemühungen von marcoslucianops für seine Beiträge!
-
Ultralytics mit den notwendigen Abhängigkeiten installieren
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
Verzeichnis auf dasultralytics
Ordnercp ~/DeepStream-Yolo/utils/export_yolo11.py ~/ultralytics cd ultralytics
-
Laden Sie das Ultralytics YOLO11-Erkennungsmodell (.pt) Ihrer Wahl von den YOLO11-Releases 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 benutzerdefiniert trainiertes YOLO11-Modell verwenden.
-
Modell in ONNX konvertieren
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
Argument und verwendeopset
12 oder niedriger. Die Standardeinstellungopset
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
Um das ONNX-Modell zu vereinfachen (DeepStream >= 6.0)
--simplify
Um dynamische Batch-Größen zu verwenden (DeepStream >= 6.1)
--dynamic
Um statische Batch-Größen zu verwenden (Beispiel für Batch-Größe = 4)
--batch 4
-
Kopieren Sie die generierte
.onnx
Modelldatei undlabels.txt
Datei zurDeepStream-Yolo
Ordnercp yolo11s.pt.onnx labels.txt ~/DeepStream-Yolo cd ~/DeepStream-Yolo
-
Legen Sie die CUDA-Version entsprechend der installierten JetPack-Version fest
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
-
Bibliothek kompilieren
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 definiert... [primary-gie] ... config-file=config_infer_primary_yolo11.txt
-
Sie können auch die Videoquelle ändern 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 dauert lange, die TensorRT-Engine-Datei zu generieren, bevor mit der Inferenz begonnen wird. Bitte haben Sie also Geduld.

Tipp
Wenn Sie das Modell in FP16-Genauigkeit konvertieren möchten, 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-Genauigkeit für die Inferenz verwenden möchten, müssen Sie die folgenden Schritte ausführen
Hinweis
Aktuell funktioniert INT8 nicht mit TensorRT 10.x. Dieser Abschnitt des Leitfadens wurde mit TensorRT 8.x getestet, von dem erwartet wird, dass er funktioniert.
-
Set
OPENCV
Umgebungsvariableexport OPENCV=1
-
Bibliothek kompilieren
make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
-
Für den COCO-Datensatz laden Sie die val2017, extrahieren und verschieben Sie 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, um 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 werden 1000 Bilder ausgewählt, um eine bessere Genauigkeit zu erzielen (mehr Bilder = mehr Genauigkeit). Sie können dies über head -1000 einstellen. Zum Beispiel für 2000 Bilder: head -2000. Dieser Vorgang kann lange dauern.
-
Erstellen Sie das
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 höherer Genauigkeit und schnellerer Kalibrierungsgeschwindigkeit. Passen Sie dies an Ihren GPU-Speicher an.
-
Aktualisiere den
config_infer_primary_yolo11.txt
Datei definiertVon
... model-engine-file=model_b1_gpu0_fp32.engine #int8-calib-file=calib.table ... network-mode=0 ...
Um
... 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
Multi-Stream-Einrichtung
Ansehen: Wie man mehrere Streams mit dem 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 definiert
-
Ändern Sie die Zeilen und Spalten, um eine Rasteranzeige entsprechend der Anzahl der gewünschten Streams zu erstellen. Für 4 Streams können wir beispielsweise 2 Zeilen und 2 Spalten hinzufügen.
[tiled-display] rows=2 columns=2
-
Set
num-sources=4
und hinzufügenuri
aller 4 Streams[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 YOLO11-Modelle bei verschiedenen TensorRT-Präzisionsstufen mit einer Eingangsgröße von 640x640 auf NVIDIA Jetson Orin NX 16GB abschneiden.
Vergleichsübersicht

Detaillierte Vergleichstabelle
Performance
Format | Status | Inferenzzeit (ms/Bild) |
---|---|---|
TensorRT (FP32) | ✅ | 8.64 |
TensorRT (FP16) | ✅ | 5.27 |
TensorRT (INT8) | ✅ | 4.54 |
Format | Status | Inferenzzeit (ms/Bild) |
---|---|---|
TensorRT (FP32) | ✅ | 14.53 |
TensorRT (FP16) | ✅ | 7.91 |
TensorRT (INT8) | ✅ | 6.05 |
Format | Status | Inferenzzeit (ms/Bild) |
---|---|---|
TensorRT (FP32) | ✅ | 32.05 |
TensorRT (FP16) | ✅ | 15.55 |
TensorRT (INT8) | ✅ | 10.43 |
Format | Status | Inferenzzeit (ms/Bild) |
---|---|---|
TensorRT (FP32) | ✅ | 39.68 |
TensorRT (FP16) | ✅ | 19.88 |
TensorRT (INT8) | ✅ | 13.64 |
Format | Status | Inferenzzeit (ms/Bild) |
---|---|---|
TensorRT (FP32) | ✅ | 80.65 |
TensorRT (FP16) | ✅ | 39.06 |
TensorRT (INT8) | ✅ | 22.83 |
Danksagungen
Dieser Leitfaden wurde ursprünglich von unseren Freunden bei Seeed Studio, Lakshantha und Elaine, erstellt.
FAQ
Wie richte ich Ultralytics YOLO11 auf einem NVIDIA Jetson-Gerät ein?
Um Ultralytics YOLO11 auf einem NVIDIA Jetson-Gerät einzurichten, müssen Sie zuerst das mit Ihrer JetPack-Version kompatible DeepStream SDK installieren. Befolgen Sie die Schritt-für-Schritt-Anleitung in unserem Schnellstart-Leitfaden, um Ihr NVIDIA Jetson für die YOLO11-Bereitstellung zu konfigurieren.
Welchen Vorteil bietet die Verwendung von TensorRT mit YOLO11 auf NVIDIA Jetson?
Die Verwendung von TensorRT mit YOLO11 optimiert das Modell für die Inferenz, wodurch die Latenz erheblich reduziert und der Durchsatz auf NVIDIA Jetson-Geräten verbessert wird. TensorRT bietet hochleistungsfähige Deep-Learning-Inferenz mit niedriger Latenz durch Layer-Fusion, Präzisionskalibrierung und Kernel-Auto-Tuning. Dies führt zu einer schnelleren und effizienteren Ausführung, was besonders nützlich für Echtzeitanwendungen wie Videoanalysen und autonome Maschinen ist.
Kann ich Ultralytics YOLO11 mit DeepStream SDK auf verschiedenen NVIDIA Jetson-Hardwareplattformen ausführen?
Ja, die Anleitung für die Bereitstellung von Ultralytics YOLO11 mit dem DeepStream SDK und TensorRT ist für die gesamte NVIDIA Jetson-Produktreihe 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 YOLO11-Modell für DeepStream in ONNX konvertieren?
Um ein YOLO11-Modell in das ONNX-Format für die Bereitstellung mit DeepStream zu konvertieren, verwenden Sie das 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 Informationen zur Modellkonvertierung finden Sie in unserem Abschnitt zum Modellexport.
Was sind die Performance-Benchmarks für YOLO auf NVIDIA Jetson Orin NX?
Die Leistung von YOLO11-Modellen auf NVIDIA Jetson Orin NX 16GB variiert je nach TensorRT-Präzisionsstufen. Zum Beispiel erreichen 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/Bild, 168 FPS
Diese Benchmarks unterstreichen die Effizienz und Leistungsfähigkeit der Verwendung von TensorRT-optimierten YOLO11-Modellen auf NVIDIA Jetson-Hardware. Weitere Informationen finden Sie in unserem Abschnitt Benchmark-Ergebnisse.