Zum Inhalt springen

Ultralytics YOLOv8 auf NVIDIA Jetson mit DeepStream SDK und TensorRT

Dieser umfassende Leitfaden bietet eine ausfĂŒhrliche Anleitung fĂŒr den Einsatz von Ultralytics YOLOv8 auf NVIDIA Jetson-GerĂ€ten mit dem DeepStream SDK und TensorRT. Hier verwenden wir TensorRT , um die Inferenzleistung auf der Jetson-Plattform zu maximieren.

DeepStream auf NVIDIA Jetson

Hinweis

Diese Anleitung wurde sowohl mit dem Seeed Studio reComputer J4012 getestet, der auf dem NVIDIA Jetson Orin NX 16GB mit der JetPack-Version JP5.1.3 basiert, als auch mit dem Seeed Studio reComputer J1020 v2, der auf dem NVIDIA Jetson Nano 4GB mit der JetPack-Version JP4.6.4 basiert. Es wird erwartet, dass es mit der gesamten NVIDIA Jetson-Hardware-Reihe funktioniert, einschließlich der neuesten und der Ă€lteren.

Was ist NVIDIA DeepStream?

NVIDIADas DeepStream SDK ist ein komplettes Streaming-Analytics-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. Du kannst jetzt Stream-Processing-Pipelines erstellen, die neuronale Netze und andere komplexe Verarbeitungsaufgaben wie Tracking, Videocodierung/-decodierung und Videorendering einbeziehen. Diese Pipelines ermöglichen Echtzeit-Analysen von Video-, Bild- und Sensordaten. Die Multi-Plattform-UnterstĂŒtzung von DeepStream ermöglicht dir eine schnellere und einfachere Entwicklung von KI-Anwendungen und -Diensten vor Ort, im Netzwerk und in der Cloud.

Voraussetzungen

Bevor Sie dieser Anleitung folgen:

Tipp

In dieser Anleitung haben wir die Debian-Paketmethode verwendet, um das DeepStream SDK auf dem Jetson-GerÀt zu installieren. Sie können auch das DeepStream SDK auf Jetson (archiviert) besuchen, um auf Àltere Versionen von DeepStream zuzugreifen.

DeepStream-Konfiguration fĂŒr YOLOv8

Hier verwenden wir marcoslucianops/DeepStream-Yolo GitHub Repository, das NVIDIA DeepStream SDK UnterstĂŒtzung fĂŒr YOLO Modelle enthĂ€lt. Wir danken marcoslucianops fĂŒr seine BeitrĂ€ge!

  1. Installieren von AbhÀngigkeiten

    pip install cmake
    pip install onnxsim
    
  2. Klonen Sie das folgende Repository

    git clone https://github.com/marcoslucianops/DeepStream-Yolo
    cd DeepStream-Yolo
    
  3. Herunterladen Ultralytics YOLOv8 Detektionsmodell (.pt) Ihrer Wahl aus YOLOv8 Veröffentlichungen. Hier verwenden wir yolov8s.pt.

    wget https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8s.pt
    

    Hinweis

    Sie können auch eine Individuell geschult YOLOv8 Modell.

  4. Modell konvertieren in ONNX

    python3 utils/export_yoloV8.py -w yolov8s.pt
    

    Übergeben Sie die folgenden Argumente an den obigen Befehl

    Verwenden Sie fĂŒr DeepStream 6.0.1 opset 12 oder niedriger. Die Standardeinstellung ist 16.

    --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 der ONNX Modell (DeepStream >= 6.0)

    --simplify
    

    So verwenden Sie die dynamische Batch-GrĂ¶ĂŸe (DeepStream >= 6.1)

    --dynamic
    

    So verwenden Sie die statische BatchgrĂ¶ĂŸe (Beispiel fĂŒr BatchgrĂ¶ĂŸe = 4)

    --batch 4
    
  5. 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
    
  6. Kompilieren Sie die Bibliothek

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
    
  7. Bearbeiten Sie die config_infer_primary_yoloV8.txt Datei entsprechend Ihrem Modell (fĂŒr YOLOv8s mit 80 Klassen)

    [property]
    ...
    onnx-file=yolov8s.onnx
    ...
    num-detected-classes=80
    ...
    
  8. Bearbeiten Sie die deepstream_app_config Datei

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

AusfĂŒhren von RĂŒckschlĂŒssen

deepstream-app -c deepstream_app_config.txt

Hinweis

Es wird lange dauern, die TensorRT Engine-Datei, bevor Sie die Inferenz starten. Habt also bitte etwas Geduld.

YOLOv8 mit Deepstream

Tipp

Wenn Sie das Modell auf FP16-Genauigkeit umstellen möchten, stellen Sie einfach model-engine-file=model_b1_gpu0_fp16.engine und network-mode=2 innerhalb config_infer_primary_yoloV8.txt

INT8 Kalibrierung

Wenn du die INT8-PrĂ€zision fĂŒr die Inferenz verwenden möchtest, musst du die folgenden Schritte ausfĂŒhren

  1. Garnitur OPENCV Umgebungsvariable

    export OPENCV=1
    
  2. Kompilieren Sie die Bibliothek

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
    
  3. Laden Sie fĂŒr das COCO-Dataset die val2017, extrahieren und nach DeepStream-Yolo Ordner

  4. Erstellen eines neuen Verzeichnisses 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 wurden 1000 Bilder gewĂ€hlt, um eine höhere Genauigkeit zu erzielen (mehr Bilder = höhere Genauigkeit). Du kannst den Wert von Kopf -1000 einstellen. FĂŒr 2000 Bilder zum Beispiel, Kopf -2000. Dieser Prozess kann sehr lange dauern.

  6. Erstellen Sie die calibration.txt Datei mit allen ausgewÀhlten Bildern

    realpath calibration/*jpg > calibration.txt
    
  7. Festlegen von 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 einer höheren Genauigkeit und schnelleren Kalibrierungsgeschwindigkeit. Stelle ihn entsprechend deinem GPU Speicher ein.

  8. Aktualisieren Sie die config_infer_primary_yoloV8.txt Datei

    Von

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

AusfĂŒhren von RĂŒckschlĂŒssen

deepstream-app -c deepstream_app_config.txt

MultiStream-Einrichtung

Um mehrere Streams unter einer einzigen Deepstream-Anwendung einzurichten, können Sie die folgenden Änderungen an der deepstream_app_config.txt Datei

  1. Ändern Sie die Zeilen und Spalten, um eine Rasteranzeige entsprechend der Anzahl der gewĂŒnschten Streams zu erstellen. Zum Beispiel können wir fĂŒr 4 Streams 2 Zeilen und 2 Spalten hinzufĂŒgen.

    [tiled-display]
    rows=2
    columns=2
    
  2. Garnitur num-sources=4 und fĂŒgen Sie uri aller 4 Streams

    [source0]
    enable=1
    type=3
    uri=<path_to_video>
    uri=<path_to_video>
    uri=<path_to_video>
    uri=<path_to_video>
    num-sources=4
    

AusfĂŒhren von RĂŒckschlĂŒssen

deepstream-app -c deepstream_app_config.txt
Multistream-Einrichtung

Benchmark-Ergebnisse

Die folgende Tabelle fasst zusammen, wie die YOLOv8s Modelle bei verschiedenen TensorRT Genauigkeitsstufen mit einer EingabegrĂ¶ĂŸe von 640x640 auf NVIDIA Jetson Orin NX 16GB abschneiden.

Modellname PrÀzision Inferenzzeit (ms/im) FPS
YOLOv8s FP32 15.63 64
FP16 7.94 126
INT8 5.53 181

BestÀtigungen

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

FAQ

Wie richte ich Ultralytics YOLOv8 auf einem NVIDIA Jetson-GerÀt ein?

Um Ultralytics YOLOv8 auf einem NVIDIA Jetson-GerĂ€t einzurichten, musst du zunĂ€chst das DeepStream SDK installieren, das mit deiner JetPack-Version kompatibel ist. Befolge die Schritt-fĂŒr-Schritt-Anleitung in unserem Quick Start Guide, um deinen NVIDIA Jetson fĂŒr YOLOv8 zu konfigurieren.

Was ist der Vorteil von TensorRT mit YOLOv8 auf NVIDIA Jetson?

Durch die Verwendung von TensorRT mit YOLOv8 wird das Modell fĂŒr die Inferenz optimiert, wodurch die Latenzzeit deutlich 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, was besonders fĂŒr Echtzeitanwendungen wie Videoanalyse und autonome Maschinen nĂŒtzlich ist.

Kann ich Ultralytics YOLOv8 mit dem DeepStream SDK auf verschiedenen NVIDIA Jetson-GerĂ€ten ausfĂŒhren?

Ja, die Anleitung fĂŒr den Einsatz von Ultralytics YOLOv8 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 findest du im Abschnitt DeepStream-Konfiguration fĂŒr YOLOv8.

Wie kann ich ein YOLOv8 Modell in ONNX fĂŒr DeepStream konvertieren?

Um ein Modell von YOLOv8 in das Format ONNX fĂŒr den Einsatz mit DeepStream zu konvertieren, verwenden Sie die utils/export_yoloV8.py Skript aus dem DeepStream-Yolo Repository.

Hier ist ein Beispielbefehl:

python3 utils/export_yoloV8.py -w yolov8s.pt --opset 12 --simplify

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

Wie lauten die Leistungsvergleiche fĂŒr YOLOv8 auf NVIDIA Jetson Orin NX?

Die Leistung der YOLOv8 Modelle auf NVIDIA Jetson Orin NX 16GB variiert je nach TensorRT PrÀzisionsstufe. Zum Beispiel erreichen die YOLOv8s Modelle:

  • FP32 PrĂ€zision: 15,63 ms/im, 64 FPS
  • FP16 PrĂ€zision: 7,94 ms/im, 126 FPS
  • INT8 PrĂ€zision: 5,53 ms/im, 181 FPS

Diese Benchmarks unterstreichen die Effizienz und LeistungsfÀhigkeit der TensorRT-optimierten YOLOv8 Modelle auf NVIDIA Jetson Hardware. Weitere Details findest du in unserem Abschnitt Benchmark-Ergebnisse.



Erstellt am 2024-07-01, Aktualisiert am 2024-07-05
Autoren: glenn-jocher (1), lakshanthad (1)

Kommentare