Ultralytics YOLO27:

Ultralytics YOLO26 auf NVIDIA Jetson mit 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 mit DeepStream SDK und TensorRT. Hier verwenden wir TensorRT, um die Inferenzleistung auf der Jetson-Plattform zu maximieren.

Dieser Leitfaden führt durch die DeepStream-Konfiguration für YOLO26, die INT8-Kalibrierung, die Einrichtung mehrerer Streams und die Benchmark-Ergebnisse.

NVIDIA DeepStream SDK on Jetson platform
Hinweis

Dieser Leitfaden wurde mit dem NVIDIA Jetson Orin Nano Super Developer Kit getestet, auf dem die aktuelle stabile JetPack-Version JP6.1 läuft, mit dem Seeed Studio reComputer J4012, der auf NVIDIA Jetson Orin NX 16GB basiert und mit der JetPack-Version JP5.1.3 läuft, sowie mit dem Seeed Studio reComputer J1020 v2, der auf NVIDIA Jetson Nano 4GB basiert und mit der JetPack-Version JP4.6.4 läuft. Es wird erwartet, dass er mit der gesamten NVIDIA Jetson-Hardwarepalette funktioniert, einschließlich der neuesten und älteren Modelle.

Was ist NVIDIA DeepStream?#

Das DeepStream SDK von NVIDIA ist ein vollständiges Toolkit für Streaming-Analysen auf GStreamer-Basis zur KI-gestützten Verarbeitung mehrerer Sensoren sowie zur Analyse von Video, Audio und Bildern. Es eignet sich ideal für Entwickler von Computer-Vision-KI, Softwarepartner, Start-ups und OEMs, die IVA-Anwendungen (Intelligente Videoanalyse) und -Dienste entwickeln. Du kannst jetzt Pipelines zur Streamverarbeitung erstellen, die neuronale Netze und weitere komplexe Verarbeitungsschritte wie Tracking, Videokodierung und -dekodierung sowie Videorendering integrieren. Diese Pipelines ermöglichen Echtzeitanalysen von Video-, Bild- und Sensordaten. Die plattformübergreifende Unterstützung von DeepStream bietet dir eine schnellere und einfachere Möglichkeit, Anwendungen und Dienste für Computer-Vision-KI lokal, am Edge und in der Cloud zu entwickeln.

Voraussetzungen#

Bevor du mit diesem Leitfaden beginnst:

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) aufrufen, um auf ältere DeepStream-Versionen zuzugreifen.

DeepStream-Konfiguration für YOLO26#

Hier verwenden wir das GitHub-Repository marcoslucianops/DeepStream-Yolo, das Unterstützung für YOLO-Modelle im NVIDIA DeepStream SDK enthält. Wir schätzen die Arbeit von marcoslucianops und die geleisteten Beiträge sehr!

  1. Ultralytics mit den erforderlichen Abhängigkeiten installieren

    pip install ultralytics onnx onnxslim
  2. Das DeepStream-Yolo-Repository klonen

    cd ~
    git clone https://github.com/marcoslucianops/DeepStream-Yolo
  3. 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 und schreibe die Datei labels.txt, aus der DeepStream die Klassennamen liest.

    from ultralytics import YOLO
    
    model = YOLO("yolo26s.pt")
    model.export(format="onnx", nms=False, agnostic_nms=True)  # creates 'yolo26s.onnx'
    with open("labels.txt", "w") as f:
        f.write("\n".join(model.names.values()))
Export-Argumente

nms=False exportiert den NMS-freien Kopf, und agnostic_nms=True behält eine einzelne Klasse pro Detektion bei, damit cluster-mode=4 (ohne Clustering) in der DeepStream-Konfiguration keinen Rahmen zweimal zeichnet. Füge imgsz=1280 hinzu, um die Inferenzgröße zu ändern (Standard: 640), batch=4 für eine Batch-Größe von 4 (der exportierte Batch ist statisch, sodass er zu batch-size in der DeepStream-Konfiguration passen muss), und opset=12 für TensorRT 8.2 oder älter (DeepStream 6.0.1 und früher). Siehe die Export-Argumente für die vollständige Liste.

  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. Lege 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

    Für JetPack 7.1:

    export CUDA_VER=13.0
  3. Die Bibliothek kompilieren

    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 zentrierter Auffüllung und läuft ohne NMS. Für die beste Genauigkeit fügst du der [property]-Sektion von config_infer_primary_yolo26.txt Folgendes 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

Inferenz ausführen#

deepstream-app -c deepstream_app_config.txt
Hinweis

Vor dem Start der Inferenz dauert es lange, die TensorRT-Engine-Datei zu erzeugen. Bitte habe daher etwas Geduld.

YOLO26 with deepstream
Tipp

Wenn du das Modell in FP16-Genauigkeit 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 für die Inferenz die INT8-Genauigkeit verwenden möchtest, musst du die folgenden Schritte ausführen:

Hinweis

Derzeit funktioniert INT8 nicht mit TensorRT 10.x. Dieser Abschnitt des Leitfadens wurde mit TensorRT 8.x getestet, mit dem es voraussichtlich funktioniert.

  1. Setze die Umgebungsvariable OPENCV.

    export OPENCV=1
  2. Die Bibliothek kompilieren

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

  4. Erstelle ein neues Verzeichnis für Kalibrierungsbilder.

    mkdir calibration
  5. Führe den folgenden Befehl 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 höhere Genauigkeit zu erreichen (mehr Bilder = höhere Genauigkeit). Du kannst den Wert in head -1000 festlegen. Für 2000 Bilder beispielsweise head -2000. Dieser Vorgang kann lange dauern.

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

    realpath calibration/*jpg > calibration.txt
  2. Umgebungsvariablen festlegen

    export INT8_CALIB_IMG_PATH=calibration.txt
    export INT8_CALIB_BATCH_SIZE=1
Hinweis

Höhere Werte für INT8_CALIB_BATCH_SIZE führen zu höherer Genauigkeit und einer schnelleren Kalibrierung. Lege den Wert entsprechend dem Speicher deiner GPU fest.

  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 erstellen und die Inferenz zu starten:

deepstream-app -c deepstream_app_config.txt

Einrichtung mehrerer Streams#



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

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

  1. Ändere die Zeilen und Spalten, um eine Rasteransicht entsprechend der gewünschten Stream-Anzahl zu erstellen. Für 4 Streams kannst du beispielsweise 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 einem 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 gekachelten Ansicht zu starten:

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

Benchmark-Ergebnisse#

Die folgenden Benchmarks fassen zusammen, wie sich YOLO11-Modelle bei verschiedenen TensorRT-Genauigkeitsstufen mit einer Eingabegröße von 640x640 auf NVIDIA Jetson Orin NX 16GB verhalten. YOLO26 verwendet denselben oben beschriebenen DeepStream-Export- und Inferenzworkflow.

Vergleichsdiagramm#

NVIDIA Jetson DeepStream performance benchmarks

Detaillierte Vergleichstabelle#

Leistung
FormatStatusInferenzzeit (ms/Bild)
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 zunächst das mit deiner JetPack-Version kompatible DeepStream SDK installieren. Befolge die Schritt-für-Schritt-Anleitung in unserem Schnellstartleitfaden, um dein NVIDIA Jetson für die Bereitstellung von YOLO26 zu konfigurieren.

  • Die Verwendung von TensorRT mit YOLO26 optimiert das Modell für die Inferenz, reduziert die Latenz deutlich und verbessert den Durchsatz auf NVIDIA Jetson-Geräten. TensorRT ermöglicht eine leistungsstarke Deep-Learning-Inferenz mit geringer Latenz durch Layer-Fusion, Genauigkeitskalibrierung und automatische Kernel-Optimierung. Dies führt zu einer schnelleren und effizienteren Ausführung, was besonders für Echtzeitanwendungen wie Videoanalysen und autonome Maschinen nützlich ist.

  • Ja, der Leitfaden zur Bereitstellung von Ultralytics YOLO26 mit DeepStream SDK und TensorRT ist mit der gesamten NVIDIA-Jetson-Produktfamilie 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. Ausführliche Schritte findest du im Abschnitt DeepStream-Konfiguration für YOLO26.

  • Exportiere das Modell mit dem NMS-freien Kopf mithilfe des Ultralytics-Exporters und schreibe die Datei labels.txt, aus der DeepStream die Klassennamen liest:

    from ultralytics import YOLO
    
    model = YOLO("yolo26s.pt")
    model.export(format="onnx", nms=False, agnostic_nms=True)  # creates 'yolo26s.onnx'
    with open("labels.txt", "w") as f:
        f.write("\n".join(model.names.values()))

    Füge opset=12 für TensorRT 8.2 oder älter hinzu (DeepStream 6.0.1 und früher). Weitere Einzelheiten zur Modellkonvertierung findest du in unserem Bereich für den Modelexport.

  • Um INT8-Inferenz auszuführen, kalibriere das Modell mit einem repräsentativen Bilddatensatz und stelle die DeepStream-Konfiguration auf den INT8-Modus um. 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 anschließend config_infer_primary_yolo26.txt mit model-engine-file=model_b1_gpu0_int8.engine, int8-calib-file=calib.table und network-mode=1. Im Abschnitt INT8-Kalibrierung findest du die vollständigen Schritte. INT8 erfordert derzeit TensorRT 8.x.

  • Um mehrere Streams in einer einzelnen DeepStream-Anwendung zu verarbeiten, bearbeite die Datei deepstream_app_config.txt, um ein Raster für die gekachelte Ansicht hinzuzufügen und jede Quell-URI aufzulisten. Lege rows und columns unter [tiled-display] fest, um das Raster zu erstellen, füge pro Stream eine separate Gruppe [sourceN] mit einem eigenen uri und num-sources=1 hinzu und passe das Raster an die Stream-Anzahl an. Im Abschnitt Einrichtung mehrerer Streams findest du ein vollständiges Beispiel.

  • Die Leistung von YOLO11-Modellen auf NVIDIA Jetson Orin NX 16GB variiert je nach TensorRT-Genauigkeitsstufe. YOLO11s-Modelle erreichen beispielsweise:

    • FP32-Genauigkeit: 14.53 ms/Bild, 68.8 FPS
    • FP16-Genauigkeit: 7.91 ms/Bild, 126 FPS
    • INT8-Genauigkeit: 6.05 ms/Bild, 165 FPS

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

Kommentare