Zum Inhalt springen

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.

DeepStream auf NVIDIA Jetson

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:

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!

  1. 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
    
  2. Klonen Sie das DeepStream-Yolo-Repository

    cd ~
    git clone https://github.com/marcoslucianops/DeepStream-Yolo
    
  3. Kopieren Sie die export_yolo11.py Datei von DeepStream-Yolo/utils Verzeichnis auf das ultralytics Ordner

    cp ~/DeepStream-Yolo/utils/export_yolo11.py ~/ultralytics
    cd ultralytics
    
  4. 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.

  5. 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 verwende opset 12 oder niedriger. Die Standardeinstellung opset 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
    
  6. Kopieren Sie die generierte .onnx Modelldatei und labels.txt Datei zur DeepStream-Yolo Ordner

    cp yolo11s.pt.onnx labels.txt ~/DeepStream-Yolo
    cd ~/DeepStream-Yolo
    
  7. 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
    
  8. Bibliothek kompilieren

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
    
  9. 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
    ...
    
  10. Bearbeiten Sie die deepstream_app_config Datei definiert

    ...
    [primary-gie]
    ...
    config-file=config_infer_primary_yolo11.txt
    
  11. 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.

YOLO11 mit Deepstream

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.

  1. Set OPENCV Umgebungsvariable

    export OPENCV=1
    
  2. Bibliothek kompilieren

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
    
  3. Für den COCO-Datensatz laden Sie die val2017, extrahieren und verschieben Sie nach DeepStream-Yolo Ordner

  4. Erstellen Sie ein neues Verzeichnis für Kalibrierungsbilder

    mkdir calibration
    
  5. 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.

  6. Erstellen Sie das calibration.txt Datei mit allen ausgewählten Bildern

    realpath calibration/*jpg > calibration.txt
    
  7. 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.

  8. Aktualisiere den config_infer_primary_yolo11.txt Datei definiert

    Von

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

  1. Ä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
    
  2. Set num-sources=4 und hinzufügen uri 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
Multi-Stream-Einrichtung

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

Jetson DeepStream Benchmarks Chart

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.



📅 Erstellt vor 1 Jahr ✏️ Aktualisiert vor 2 Monaten

Kommentare