Zum Inhalt springen

Ultralytics YOLO11 auf NVIDIA Jetson mit DeepStream SDK und TensorRT



Beobachten: So fĂĽhren Sie mehrere Streams mit DeepStream SDK auf dem Jetson Nano aus Ultralytics YOLO11

Dieser umfassende Leitfaden bietet eine detaillierte Anleitung 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

This guide has been tested with NVIDIA Jetson Orin Nano Super Developer Kit running the latest stable JetPack release of JP6.1, Seeed Studio reComputer J4012 which is based on NVIDIA Jetson Orin NX 16GB running JetPack release of JP5.1.3 and Seeed Studio reComputer J1020 v2 which is based on NVIDIA Jetson Nano 4GB running JetPack release of JP4.6.4. It is expected to work across all the NVIDIA Jetson hardware lineup including latest and legacy.

Was ist NVIDIA DeepStream?

NVIDIADas DeepStream SDK ist ein komplettes Streaming-Analyse-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. Sie können jetzt Stream-Processing-Pipelines erstellen, die neuronale Netzwerke und andere komplexe Verarbeitungsaufgaben wie Tracking, Videocodierung/-decodierung und Videorendering umfassen. Diese Pipelines ermöglichen Echtzeit-Analysen von Video-, Bild- und Sensordaten. Die Multi-Plattform-Unterstützung von DeepStream ermöglicht Ihnen eine schnellere und einfachere Entwicklung von KI-Anwendungen und -Diensten vor Ort, am Netzwerkrand und in der Cloud.

Voraussetzungen

Bevor Sie beginnen, diesen Leitfaden zu lesen:

Tipp

In dieser Anleitung haben wir die Debian-Paketmethode für die Installation des DeepStream-SDK auf dem Jetson-Gerät verwendet. Sie können auch das DeepStream SDK auf Jetson (archiviert) besuchen, um auf ältere Versionen von DeepStream zuzugreifen.

DeepStream-Konfiguration fĂĽr YOLO11

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

  1. Install Ultralytics with necessary dependencies

    cd ~
    pip install -U pip
    git clone https://github.com/ultralytics/ultralytics
    cd ultralytics
    pip install -e ".[export]" onnxslim
    
  2. Clone the DeepStream-Yolo repository

    cd ~
    git clone https://github.com/marcoslucianops/DeepStream-Yolo
    
  3. Copy the export_yoloV8.py file from DeepStream-Yolo/utils directory to the ultralytics Ordner

    cp ~/DeepStream-Yolo/utils/export_yoloV8.py ~/ultralytics
    cd ultralytics
    

    Hinweis

    export_yoloV8.py works for both YOLOv8 and YOLO11 models.

  4. Download Ultralytics YOLO11 detection model (.pt) of your choice from YOLO11 releases. Here we use yolo11s.pt.

    wget https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s.pt
    

    Hinweis

    Sie können auch ein speziell trainiertes YOLO11 Modell verwenden.

  5. Modell umwandeln in ONNX

    python3 export_yoloV8.py -w yolo11s.pt
    

    Ăśbergeben Sie die folgenden Argumente an den obigen Befehl

    FĂĽr DeepStream 6.0.1 verwenden Sie Opset 12 oder niedriger. Der Standard-Opset 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 des Modells ONNX (DeepStream >= 6.0)

    --simplify
    

    So verwenden Sie die dynamische Stapelgröße (DeepStream >= 6.1)

    --dynamic
    

    So verwenden Sie eine statische Chargengröße (Beispiel für Chargengröße = 4)

    --batch 4
    
  6. Copy the generated .onnx model file and labels.txt file to the DeepStream-Yolo Ordner

    cp yolo11s.pt.onnx labels.txt ~/DeepStream-Yolo
    cd ~/DeepStream-Yolo
    
  7. Stellen Sie die Version CUDA entsprechend der installierten JetPack-Version ein.

    FĂĽr JetPack 4.6.4:

    export CUDA_VER=10.2
    

    FĂĽr JetPack 5.1.3:

    export CUDA_VER=11.4
    

    For Jetpack 6.1:

    export CUDA_VER=12.6
    
  8. Kompilieren Sie die Bibliothek

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
    
  9. Bearbeiten Sie die config_infer_primary_yoloV8.txt file according to your model (for YOLO11s with 80 classes)

    [property]
    ...
    onnx-file=yolo11s.pt.onnx
    ...
    num-detected-classes=80
    ...
    
  10. Bearbeiten Sie die deepstream_app_config Datei

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

Inferenz ausfĂĽhren

deepstream-app -c deepstream_app_config.txt

Hinweis

Es wird lange dauern, bis die TensorRT Engine-Datei generiert ist, bevor die Inferenz gestartet wird. Haben Sie also bitte Geduld.

YOLO11 mit Deepstream

Tipp

If you want to convert the model to FP16 precision, simply set model-engine-file=model_b1_gpu0_fp16.engine und network-mode=2 innerhalb config_infer_primary_yoloV8.txt

INT8 Kalibrierung

Wenn Sie die INT8-Präzision für die Inferenz verwenden möchten, müssen Sie die folgenden Schritte ausführen

Hinweis

Currently INT8 does not work with TensorRT 10.x. This section of the guide has been tested with TensorRT 8.x which is expected to work.

  1. Einstellung OPENCV Umgebungsvariable

    export OPENCV=1
    
  2. Kompilieren Sie die Bibliothek

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
    
  3. FĂĽr den COCO-Datensatz laden Sie bitte die val2017, extrahieren und verschieben 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 und 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). Sie können den Wert von Kopf -1000 einstellen. Zum Beispiel für 2000 Bilder, 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. 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 einer höheren Genauigkeit und schnelleren Kalibrierungsgeschwindigkeit. Stellen Sie ihn entsprechend Ihrem 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
    ...
    

Inferenz ausfĂĽhren

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 ein Raster zu erstellen, das der Anzahl der Streams entspricht, die Sie haben möchten. Für 4 Streams können wir beispielsweise 2 Zeilen und 2 Spalten hinzufügen.

    [tiled-display]
    rows=2
    columns=2
    
  2. Einstellung num-sources=4 und hinzufügen uri von allen 4 Strömen

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

Inferenz ausfĂĽhren

deepstream-app -c deepstream_app_config.txt
Multistream-Einrichtung

Benchmark-Ergebnisse

The following benchmarks summarizes how YOLO11 models perform at different TensorRT precision levels with an input size of 640x640 on NVIDIA Jetson Orin NX 16GB.

Vergleichstabelle

Jetson DeepStream Benchmarks Chart

Detaillierte Vergleichstabelle

Leistung

Format Status Inferenzzeit (ms/im)
TensorRT (FP32) âś… 8.64
TensorRT (FP16) âś… 5.27
TensorRT (INT8) âś… 4.54
Format Status Inferenzzeit (ms/im)
TensorRT (FP32) âś… 14.53
TensorRT (FP16) âś… 7.91
TensorRT (INT8) âś… 6.05
Format Status Inferenzzeit (ms/im)
TensorRT (FP32) âś… 32.05
TensorRT (FP16) âś… 15.55
TensorRT (INT8) âś… 10.43
Format Status Inferenzzeit (ms/im)
TensorRT (FP32) âś… 39.68
TensorRT (FP16) âś… 19.88
TensorRT (INT8) âś… 13.64
Format Status Inferenzzeit (ms/im)
TensorRT (FP32) âś… 80.65
TensorRT (FP16) âś… 39.06
TensorRT (INT8) âś… 22.83

Danksagung

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

FAQ

Wie kann ich Ultralytics YOLO11 auf einem NVIDIA Jetson-Gerät einrichten?

Um Ultralytics YOLO11 auf einem NVIDIA Jetson-Gerät einzurichten, müssen Sie zunächst das DeepStream SDK installieren, das mit Ihrer JetPack-Version kompatibel ist. Befolgen Sie die Schritt-für-Schritt-Anleitung in unserem Quick Start Guide, um Ihren NVIDIA Jetson für die YOLO11 Bereitstellung zu konfigurieren.

Welche Vorteile hat die Verwendung von TensorRT mit YOLO11 auf NVIDIA Jetson?

Durch die Verwendung von TensorRT mit YOLO11 wird das Modell für die Inferenz optimiert, wodurch die Latenzzeit erheblich reduziert und der Durchsatz auf NVIDIA Jetson-Geräten verbessert wird. TensorRT bietet eine leistungsstarke Deep-Learning-Inferenz mit geringer Latenzzeit durch Ebenenfusion, Präzisionskalibrierung und automatisches Kernel-Tuning. Dies führt zu einer schnelleren und effizienteren Ausführung, die besonders für Echtzeitanwendungen wie Videoanalyse und autonome Maschinen nützlich ist.

Kann ich Ultralytics YOLO11 mit DeepStream SDK auf unterschiedlicher NVIDIA Jetson-Hardware ausfĂĽhren?

Ja, die Anleitung für die Bereitstellung von Ultralytics YOLO11 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 finden Sie im Abschnitt DeepStream-Konfiguration für YOLO11.

Wie kann ich ein Modell von YOLO11 in ONNX fĂĽr DeepStream konvertieren?

Um ein Modell von YOLO11 in das Format ONNX fĂĽr die Bereitstellung 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 yolo11s.pt --opset 12 --simplify

Weitere Einzelheiten zur Modellkonvertierung finden Sie in unserem Abschnitt zum Modellexport.

Wie lauten die Leistungsvergleiche fĂĽr YOLO auf NVIDIA Jetson Orin NX?

The performance of YOLO11 models on NVIDIA Jetson Orin NX 16GB varies based on TensorRT precision levels. For example, YOLO11s models achieve:

  • FP32 Precision: 14.6 ms/im, 68.5 FPS
  • FP16 Präzision: 7,94 ms/im, 126 FPS
  • INT8 Precision: 5.95 ms/im, 168 FPS

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

📅 Erstellt vor 6 Monaten ✏️ Aktualisiert vor 1 Tag

Kommentare