YOLO Vision 2026:

Ultralytics YOLO26 auf NVIDIA Jetson mit dem DeepStream SDK und TensorRT#



Watch: How to use Ultralytics YOLO26 models with NVIDIA Deepstream on Jetson Orin NX 🚀

Dieser umfassende Leitfaden bietet eine detaillierte Anleitung zur Bereitstellung von Ultralytics YOLO26 auf NVIDIA Jetson-Geräten unter Verwendung des DeepStream SDK und TensorRT. Hier nutzen wir TensorRT, um die Inferenzleistung auf der Jetson-Plattform zu maximieren.

Dieser Leitfaden behandelt die DeepStream-Konfiguration für YOLO26, die INT8-Kalibrierung, das Multi-Stream-Setup und die Benchmark-Ergebnisse.

NVIDIA DeepStream SDK on Jetson platform
Hinweis

Dieser Leitfaden wurde mit dem NVIDIA Jetson Orin Nano Super Developer Kit unter dem neuesten stabilen JetPack-Release von JP6.1, dem Seeed Studio reComputer J4012, das auf dem NVIDIA Jetson Orin NX 16GB mit dem JetPack-Release JP5.1.3 basiert, sowie dem Seeed Studio reComputer J1020 v2, das auf dem NVIDIA Jetson Nano 4GB mit dem JetPack-Release JP4.6.4 basiert, getestet. Es wird erwartet, dass er über das gesamte NVIDIA Jetson-Hardware-Lineup hinweg funktioniert, einschließlich aktueller und älterer Modelle.

Was ist NVIDIA DeepStream?#

NVIDIAs DeepStream SDK ist ein vollständiges Streaming-Analysetoolkit auf Basis von GStreamer für KI-basierte Erfassung von Multisensoren, Video-, Audio- und Bildverständnis. Es ist ideal für Vision-KI-Entwickler, Softwarepartner, Start-ups und OEMs, die IVA-Apps und -Dienste (Intelligent Video Analytics) entwickeln. Du kannst jetzt Stream-Verarbeitungspipelines erstellen, die neuronale Netze und andere komplexe Verarbeitungsaufgaben wie Tracking, Videokodierung/-dekodierung und Video-Rendering integrieren. Diese Pipelines ermöglichen Echtzeitanalysen von Video-, Bild- und Sensordaten. Die plattformübergreifende Unterstützung von DeepStream bietet dir einen schnelleren und einfacheren Weg, Vision-KI-Anwendungen und -Dienste vor Ort (on-premise), am Edge und in der Cloud zu entwickeln.

Voraussetzungen#

Bevor du diesem Leitfaden folgst:

Tipp

In diesem Leitfaden haben wir die Debian-Paketmethode zur Installation des DeepStream SDK auf dem Jetson-Gerät verwendet. Du kannst auch DeepStream SDK auf Jetson (Archiviert) besuchen, um auf ältere Versionen von DeepStream zuzugreifen.

DeepStream-Konfiguration für YOLO26#

Hier verwenden wir das GitHub-Repository marcoslucianops/DeepStream-Yolo, das die Unterstützung des NVIDIA DeepStream SDK für YOLO-Modelle enthält. Wir schätzen die Bemühungen von marcoslucianops für seine Beiträge!

  1. Installiere 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
  2. Kone das DeepStream-Yolo Repository.

    cd ~
    git clone https://github.com/marcoslucianops/DeepStream-Yolo
  3. Kopiere die Datei export_yolo26.py aus dem Verzeichnis DeepStream-Yolo/utils in den Ordner ultralytics.

    cp ~/DeepStream-Yolo/utils/export_yolo26.py ~/ultralytics
    cd ultralytics
  4. Lade ein Ultralytics YOLO26-Erkennungsmodell (.pt) deiner Wahl aus dem YOLO26-Projekt herunter. Hier verwenden wir yolo26s.pt.

    wget https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo26s.pt
Hinweis

Du kannst auch ein benutzerdefiniert trainiertes YOLO26-Modell verwenden.

  1. Konvertiere das Modell in ONNX.

    python3 export_yolo26.py -w yolo26s.pt
Übergebe die unten stehenden Argumente an den obigen Befehl.

Entferne für DeepStream 5.1 das Argument --dynamic und verwende opset 12 oder niedriger. Der Standardwert für opset ist 17.

--opset 12

Um die Inferenzgröße zu ändern (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
  1. Kopiere die generierte Modelldatei .onnx und die Datei labels.txt in den Ordner DeepStream-Yolo.

    cp yolo26s.onnx labels.txt ~/DeepStream-Yolo
    cd ~/DeepStream-Yolo
  2. Setze die CUDA-Version entsprechend der installierten JetPack-Version.

    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
  3. Kompiliere die Bibliothek.

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
  4. Bearbeite die Datei config_infer_primary_yolo26.txt entsprechend deinem Modell (für YOLO26s mit 80 Klassen).

    [property]
    ...
    onnx-file=yolo26s.onnx
    ...
    num-detected-classes=80
    ...
    parse-bbox-func-name=NvDsInferParseYolo
    ...
YOLO26 Genauigkeitseinstellungen

YOLO26 skaliert die Eingabe mit Zentrumspolsterung (Center Padding) und läuft ohne NMS. Füge für die beste Genauigkeit Folgendes zum Abschnitt [property] von config_infer_primary_yolo26.txt hinzu:

[property]
...
maintain-aspect-ratio=1
symmetric-padding=1
cluster-mode=4
...
  1. Bearbeite die Datei deepstream_app_config.

    ...
    [primary-gie]
    ...
    config-file=config_infer_primary_yolo26.txt
  2. Du kannst auch die Videoquelle in der Datei deepstream_app_config ändern. Hier wird eine Standardvideodatei geladen.

    ...
    [source0]
    ...
    uri=file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4

Führe die Inferenz aus.#

deepstream-app -c deepstream_app_config.txt
Hinweis

Es wird eine Weile dauern, die TensorRT-Engine-Datei zu generieren, bevor die Inferenz startet. Bitte habe also etwas Geduld.

YOLO26 with deepstream
Tipp

Wenn du das Modell in die FP16-Präzision konvertieren möchtest, setze einfach model-engine-file=model_b1_gpu0_fp16.engine und network-mode=2 innerhalb von config_infer_primary_yolo26.txt.

INT8-Kalibrierung#

Wenn du INT8-Präzision für die Inferenz verwenden möchtest, musst du die folgenden Schritte befolgen:

Hinweis

Derzeit funktioniert INT8 nicht mit TensorRT 10.x. Dieser Abschnitt des Leitfadens wurde mit TensorRT 8.x getestet, bei dem das funktionieren sollte.

  1. Setze die Umgebungsvariable OPENCV.

    export OPENCV=1
  2. Kompiliere die Bibliothek.

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
  3. Lade für den COCO-Datensatz val2017 herunter, entpacke es und verschiebe es in den Ordner DeepStream-Yolo.

  4. Erstelle ein neues Verzeichnis für Kalibrierungsbilder.

    mkdir calibration
  5. Führe Folgendes aus, um 1000 zufällige Bilder aus dem COCO-Datensatz für die Kalibrierung auszuwählen.

    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 erhalten (mehr Bilder = mehr Genauigkeit). Du kannst dies über head -1000 einstellen. Zum Beispiel für 2000 Bilder: head -2000. Dieser Vorgang kann einige Zeit in Anspruch nehmen.

  1. Erstelle die Datei calibration.txt mit allen ausgewählten Bildern.

    realpath calibration/*jpg > calibration.txt
  2. Setze die Umgebungsvariablen.

    export INT8_CALIB_IMG_PATH=calibration.txt
    export INT8_CALIB_BATCH_SIZE=1
Hinweis

Höhere INT8_CALIB_BATCH_SIZE-Werte führen zu mehr Genauigkeit und einer schnelleren Kalibrierungsgeschwindigkeit. Setze diesen Wert entsprechend deinem GPU-Speicher.

  1. Aktualisiere die Datei config_infer_primary_yolo26.txt.

    Von

    ...
    model-engine-file=model_b1_gpu0_fp32.engine
    #int8-calib-file=calib.table
    ...
    network-mode=0
    ...

    Zu

    ...
    model-engine-file=model_b1_gpu0_int8.engine
    int8-calib-file=calib.table
    ...
    network-mode=1
    ...

INT8-Inferenz ausführen#

Führe denselben Befehl aus, um die INT8-Engine zu bauen und die Inferenz zu starten:

deepstream-app -c deepstream_app_config.txt

MultiStream-Einrichtung#



Watch: How to Run Multi-Stream Inference with Ultralytics YOLO26 using NVIDIA DeepStream on Jetson Orin 🚀

Um mehrere Streams unter einer einzigen DeepStream-Anwendung einzurichten, nimm die folgenden Änderungen an der Datei deepstream_app_config.txt vor:

  1. Ändere die Zeilen und Spalten, um eine Rasteranzeige entsprechend der Anzahl der Streams zu erstellen, die du haben möchtest. Zum Beispiel können wir für 4 Streams 2 Zeilen und 2 Spalten hinzufügen.

    [tiled-display]
    rows=2
    columns=2
  2. Füge für jeden Stream eine separate Gruppe [sourceN] hinzu, jeweils mit ihren eigenen uri und num-sources=1.

    [source0]
    enable=1
    type=3
    uri=file:///path/to/video1.mp4
    num-sources=1
    
    [source1]
    enable=1
    type=3
    uri=file:///path/to/video2.mp4
    num-sources=1
    
    [source2]
    enable=1
    type=3
    uri=file:///path/to/video3.mp4
    num-sources=1
    
    [source3]
    enable=1
    type=3
    uri=file:///path/to/video4.mp4
    num-sources=1

Multi-Stream-Inferenz ausführen#

Führe denselben Befehl aus, um alle Streams in der Kachelanzeige zu starten:

deepstream-app -c deepstream_app_config.txt
DeepStream multi-camera streaming configuration

Benchmark-Ergebnisse#

Die folgenden Benchmarks fassen zusammen, wie YOLO11-Modelle bei verschiedenen TensorRT-Präzisionsstufen mit einer Eingabegröße von 640x640 auf einem NVIDIA Jetson Orin NX 16GB abschneiden. YOLO26 verwendet denselben DeepStream-Export- und Inferenz-Workflow wie oben beschrieben.

Vergleichsdiagramm#

NVIDIA Jetson DeepStream performance benchmarks

Detaillierte Vergleichstabelle#

Leistung
FormatStatusInferenzzeit (ms/im)
TensorRT (FP32)8.64
TensorRT (FP16)5.27
TensorRT (INT8)4.54

Danksagungen#

Dieser Leitfaden wurde ursprünglich von unseren Freunden bei Seeed Studio, Lakshantha und Elaine, erstellt.

FAQ#

  • Um Ultralytics YOLO26 auf einem NVIDIA Jetson-Gerät einzurichten, musst du zuerst das DeepStream SDK installieren, das mit deiner JetPack-Version kompatibel ist. Folge der Schritt-für-Schritt-Anleitung in unserer Schnellstartanleitung, um dein NVIDIA Jetson für die YOLO26-Bereitstellung zu konfigurieren.

  • Die Verwendung von TensorRT mit YOLO26 optimiert das Modell für die Inferenz, wodurch die Latenz signifikant reduziert und der Durchsatz auf NVIDIA Jetson-Geräten verbessert wird. TensorRT bietet eine leistungsstarke Deep-Learning-Inferenz mit geringer Latenz durch Layer Fusion, Präzisionskalibrierung und Kernel-Autotuning. Dies führt zu einer schnelleren und effizienteren Ausführung, die besonders nützlich für Echtzeitanwendungen wie Videoanalysen und autonome Maschinen ist.

  • Ja, der Leitfaden zur Bereitstellung von Ultralytics YOLO26 mit dem DeepStream SDK und TensorRT ist mit dem gesamten NVIDIA Jetson-Lineup 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. Siehe den Abschnitt DeepStream-Konfiguration für YOLO26 für detaillierte Schritte.

  • Um ein YOLO26-Modell für die Bereitstellung mit DeepStream in das ONNX-Format zu konvertieren, verwende das Skript utils/export_yolo26.py aus dem Repository DeepStream-Yolo.

    Hier ist ein Beispielbefehl:

    python3 utils/export_yolo26.py -w yolo26s.pt --opset 12 --simplify

    Weitere Details zur Modellkonvertierung findest du in unserem Abschnitt zum Modellexport.

  • Um eine INT8-Inferenz auszuführen, kalibriere das Modell an einem repräsentativen Bildersatz und schalte die DeepStream-Konfiguration in den INT8-Modus. Lade die COCO val2017-Bilder herunter, wähle etwa 1000 Kalibrierungsbilder aus, setze die Umgebungsvariablen INT8_CALIB_IMG_PATH und INT8_CALIB_BATCH_SIZE und aktualisiere dann config_infer_primary_yolo26.txt mit model-engine-file=model_b1_gpu0_int8.engine, int8-calib-file=calib.table und network-mode=1. Siehe den Abschnitt INT8-Kalibrierung für die vollständigen Schritte. INT8 erfordert derzeit TensorRT 8.x.

  • Um mehrere Streams in einer einzigen DeepStream-Anwendung zu verarbeiten, bearbeite die Datei deepstream_app_config.txt, um ein Kachel-Anzeige-Raster (tiled-display grid) hinzuzufügen und jede Quell-URI aufzulisten. Setze rows und columns unter [tiled-display], um das Raster aufzubauen, füge für jeden Stream eine separate Gruppe [sourceN] mit ihren eigenen uri und num-sources=1 hinzu und passe das Raster an die Anzahl der Streams an. Siehe den Abschnitt Multi-Stream-Setup für ein vollständiges Beispiel.

  • 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,53 ms/Bild, 68,8 FPS
    • FP16-Präzision: 7,91 ms/Bild, 126 FPS
    • INT8-Präzision: 6,05 ms/Bild, 165 FPS

    Diese Benchmarks unterstreichen die Effizienz und Leistungsfähigkeit der Verwendung von TensorRT-optimierten YOLO11-Modellen auf NVIDIA Jetson-Hardware. Weitere Details findest du in unserem Abschnitt Benchmark-Ergebnisse.

Kommentare