Zum Inhalt springen

Einsatz auf NVIDIA Jetson mit TensorRT und DeepStream SDK

In diesem Leitfaden wird erklĂ€rt, wie man ein trainiertes Modell auf der NVIDIA Jetson Plattform einsetzt und Inferenzen mit TensorRT und dem DeepStream SDK durchfĂŒhrt. Hier verwenden wir TensorRT , um die Inferenzleistung auf der Jetson-Plattform zu maximieren.

Hardware-PrĂŒfung

Wir haben diese Anleitung auf den folgenden Jetson-GerĂ€ten getestet und ĂŒberprĂŒft

Bevor du anfÀngst

Vergewissere dich, dass du das JetPack SDK mit allen SDK-Komponenten und das DeepStream SDK auf dem Jetson-GerĂ€t ordnungsgemĂ€ĂŸ installiert hast, da dies CUDA, TensorRT und das DeepStream SDK enthĂ€lt, die fĂŒr diese Anleitung benötigt werden.

JetPack SDK bietet eine vollstĂ€ndige Entwicklungsumgebung fĂŒr die hardwarebeschleunigte KI-Entwicklung. Alle Jetson Module und Developer Kits werden vom JetPack SDK unterstĂŒtzt.

Es gibt zwei wichtige Installationsmethoden,

  1. SD-Karten-Image-Methode
  2. NVIDIA SDK Manager Methode

Eine sehr detaillierte Installationsanleitung findest du auf der offiziellen NVIDIA-Website. Dort findest du auch Anleitungen fĂŒr die oben erwĂ€hnten reComputer J1010 und reComputer J2021.

Erforderliche Pakete installieren

  • Schritt 1. Greife auf das Terminal des Jetson-GerĂ€ts zu, installiere pip und aktualisiere es
sudo apt update
sudo apt install -y python3-pip
pip3 install --upgrade pip
  • Schritt 2. Klone das folgende Repo
git clone https://github.com/ultralytics/yolov5
  • Schritt 3. Anforderungen.txt öffnen
cd yolov5
vi requirements.txt
  • Schritt 5. Bearbeite die folgenden Zeilen. Hier musst du zuerst i drĂŒcken, um in den Bearbeitungsmodus zu gelangen. DrĂŒcke ESC und gib dann :wq ein, um zu speichern und zu beenden
# torch>=1.8.0
# torchvision>=0.9.0

Hinweis: torch und torchvision sind vorerst ausgeschlossen, da sie spÀter installiert werden.

  • Schritt 6. Installiere die folgenden AbhĂ€ngigkeiten
sudo apt install -y libfreetype6-dev
  • Schritt 7. Installiere die notwendigen Pakete
pip3 install -r requirements.txt

Installiere PyTorch und Torchvision

Wir können PyTorch und Torchvision nicht ĂŒber pip installieren, weil sie nicht kompatibel mit der Jetson-Plattform sind, die auf der ARM aarch64-Architektur basiert. Daher mĂŒssen wir das vorgefertigte PyTorch pip wheel manuell installieren und Torchvision aus dem Quellcode kompilieren und installieren.

Auf dieser Seite findest du alle Links zu PyTorch und Torchvision.

Hier sind einige der Versionen, die von JetPack 4.6 und höher unterstĂŒtzt werden.

PyTorch v1.10.0

UnterstĂŒtzt von JetPack 4.4 (L4T R32.4.3) / JetPack 4.4.1 (L4T R32.4.4) / JetPack 4.5 (L4T R32.5.0) / JetPack 4.5.1 (L4T R32.5.1) / JetPack 4.6 (L4T R32.6.1) mit Python 3.6

PyTorch v1.12.0

UnterstĂŒtzt von JetPack 5.0 (L4T R34.1.0) / JetPack 5.0.1 (L4T R34.1.1) / JetPack 5.0.2 (L4T R35.1.0) mit Python 3.8

wget <URL> -O <file_name>
pip3 install <file_name>

Hier lÀuft zum Beispiel JP4.6.1, daher wÀhlen wir PyTorch v1 .10.0

cd ~
sudo apt-get install -y libopenblas-base libopenmpi-dev
wget https://nvidia.box.com/shared/static/fjtbno0vpo676a25cgvuqc1wty0fkkg6.whl -O torch-1.10.0-cp36-cp36m-linux_aarch64.whl
pip3 install torch-1.10.0-cp36-cp36m-linux_aarch64.whl
  • Schritt 2. Installiere Torchvision je nach der Version von PyTorch , die du installiert hast. Wir haben zum Beispiel PyTorch v1 .10.0 gewĂ€hlt, was bedeutet, dass wir Torchvision v0.11.1 wĂ€hlen mĂŒssen.
sudo apt install -y libjpeg-dev zlib1g-dev
git clone --branch v0.11.1 https://github.com/pytorch/vision torchvision
cd torchvision
sudo python3 setup.py install

Hier eine Liste der entsprechenden torchvision Version, die du entsprechend der PyTorch Version installieren musst:

  • PyTorch v1.10 - torchvision v0.11.1
  • PyTorch v1.12 - torchvision v0.13.0

DeepStream Konfiguration fĂŒr YOLOv5

  • Schritt 1. Klone das folgende Repo
cd ~
git clone https://github.com/marcoslucianops/DeepStream-Yolo
  • Schritt 2. Kopiere gen_wts_yoloV5.py aus DeepStream-Yolo /utils in das yolov5 Verzeichnis
cp DeepStream-Yolo/utils/gen_wts_yoloV5.py yolov5
  • Schritt 3. Lade im yolov5 Repo die Datei pt von YOLOv5 releases herunter (Beispiel fĂŒr YOLOv5s 6.1)
cd yolov5
wget https://github.com/ultralytics/yolov5/releases/download/v6.1/yolov5s.pt
  • Schritt 4. Generiere die cfg- und wts-Dateien
python3 gen_wts_yoloV5.py -w yolov5s.pt

Hinweis: Um die InferenzgrĂ¶ĂŸe zu Ă€ndern (Standard: 640)

-s SIZE
--size SIZE
-s HEIGHT WIDTH
--size HEIGHT WIDTH

Example for 1280:

-s 1280
or
-s 1280 1280
  • Schritt 5. Kopiere die erzeugten cfg- und wts-Dateien in den Ordner DeepStream-Yolo
cp yolov5s.cfg ~/DeepStream-Yolo
cp yolov5s.wts ~/DeepStream-Yolo
  • Schritt 6. Öffne den Ordner DeepStream-Yolo und kompiliere die Bibliothek
cd ~/DeepStream-Yolo
CUDA_VER=11.4 make -C nvdsinfer_custom_impl_Yolo  # for DeepStream 6.1
CUDA_VER=10.2 make -C nvdsinfer_custom_impl_Yolo  # for DeepStream 6.0.1 / 6.0
  • Schritt 7. Bearbeite die Datei config_infer_primary_yoloV5.txt entsprechend deinem Modell
[property]
...
custom-network-config=yolov5s.cfg
model-file=yolov5s.wts
...
  • Schritt 8. Bearbeiten Sie die Datei deepstream_app_config
...
[primary-gie]
...
config-file=config_infer_primary_yoloV5.txt
  • Schritt 9. Ändere die Videoquelle in der Datei deepstream_app_config. Hier wird eine Standard-Videodatei geladen, wie du unten sehen kannst
...
[source0]
...
uri=file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4

Die Inferenz ausfĂŒhren

deepstream-app -c deepstream_app_config.txt
YOLOv5 mit Deepstream FP32

Das obige Ergebnis lÀuft auf dem Jetson Xavier NX mit FP32 und YOLOv5s 640x640. Wir können sehen, dass die FPS bei 30 liegen.

INT8 Kalibrierung

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

  • Schritt 1. OpenCV installieren
sudo apt-get install libopencv-dev
  • Schritt 2. Kompiliere/rekompiliere die nvdsinfer_custom_impl_Yolo-Bibliothek mit OpenCV-UnterstĂŒtzung
cd ~/DeepStream-Yolo
CUDA_VER=11.4 OPENCV=1 make -C nvdsinfer_custom_impl_Yolo  # for DeepStream 6.1
CUDA_VER=10.2 OPENCV=1 make -C nvdsinfer_custom_impl_Yolo  # for DeepStream 6.0.1 / 6.0
  • Schritt 3. FĂŒr den COCO-Datensatz lĂ€dst du die Datei val2017 herunter, extrahierst sie und verschiebst sie in den Ordner DeepStream-Yolo

  • Schritt 4. Erstelle ein neues Verzeichnis fĂŒr Kalibrierungsbilder

mkdir calibration
  • Schritt 5. FĂŒhre 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 erreichen (mehr Bilder = höhere Genauigkeit). Höhere INT8_CALIB_BATCH_SIZE-Werte sorgen fĂŒr eine höhere Genauigkeit und eine schnellere Kalibrierungsgeschwindigkeit. Stelle den Wert entsprechend dem Speicherplatz deiner GPU ein. Du kannst den Wert von head -1000 einstellen. Zum Beispiel fĂŒr 2000 Bilder, Kopf -2000. Dieser Prozess kann sehr lange dauern.

  • Schritt 6. Erstelle die Datei calibration.txt mit allen ausgewĂ€hlten Bildern
realpath calibration/*jpg > calibration.txt
  • Schritt 7. Umgebungsvariablen setzen
export INT8_CALIB_IMG_PATH=calibration.txt
export INT8_CALIB_BATCH_SIZE=1
  • Schritt 8. Aktualisiere die Datei config_infer_primary_yoloV5.txt

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
...
  • Schritt 9. AusfĂŒhren der Inferenz
deepstream-app -c deepstream_app_config.txt
YOLOv5 mit Deepstream INT8

Das obige Ergebnis lÀuft auf dem Jetson Xavier NX mit INT8 und YOLOv5s 640x640. Wir können sehen, dass die FPS bei 60 liegen.

Benchmark-Ergebnisse

Die folgende Tabelle fasst zusammen, wie die verschiedenen Modelle auf dem Jetson Xavier NX abschneiden.

Modellname PrĂ€zision Inferenz GrĂ¶ĂŸe Inferenzzeit (ms) FPS
YOLOv5s FP32 320x320 16.66 60
FP32 640x640 33.33 30
INT8 640x640 16.66 60
YOLOv5n FP32 640x640 16.66 60

ZusÀtzlich

Dieses Tutorial wurde von unseren Freunden bei seeed @lakshanthad und Elaine geschrieben



Erstellt am 2023-11-12, Aktualisiert am 2024-01-07
Autoren: glenn-jocher (5)

Kommentare