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
- Seeed reComputer J1010 gebaut mit Jetson Nano Modul
- Seeed reComputer J2021 gebaut mit Jetson Xavier NX Modul
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,
- SD-Karten-Image-Methode
- 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
- Schritt 2. Klone das folgende Repo
- Schritt 3. Anforderungen.txt öffnen
- 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
Hinweis: torch und torchvision sind vorerst ausgeschlossen, da sie spÀter installiert werden.
- Schritt 6. Installiere die folgenden AbhÀngigkeiten
- Schritt 7. Installiere die notwendigen Pakete
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
- file_name: torch-1.10.0-cp36-cp36m-linux_aarch64.whl
- URL: https://nvidia.box.com/shared/static/fjtbno0vpo676a25cgvuqc1wty0fkkg6.whl
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
- file_name: torch-1.12.0a0+2c916ef.nv22.3-cp38-cp38-linux_aarch64.whl
-
Schritt 1. Installiere torch entsprechend deiner JetPack-Version in folgendem Format
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
- Schritt 2. Kopiere gen_wts_yoloV5.py aus DeepStream-Yolo /utils in das yolov5 Verzeichnis
- Schritt 3. Lade im yolov5 Repo die Datei pt von YOLOv5 releases herunter (Beispiel fĂŒr YOLOv5s 6.1)
- Schritt 4. Generiere die cfg- und wts-Dateien
Hinweis: Um die InferenzgröĂe zu Ă€ndern (Standard: 640)
- Schritt 5. Kopiere die erzeugten cfg- und wts-Dateien in den Ordner 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
- Schritt 8. Bearbeiten Sie die Datei deepstream_app_config
- 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
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
- 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
- Schritt 5. FĂŒhre Folgendes aus, um 1000 zufĂ€llige Bilder aus dem COCO-Datensatz auszuwĂ€hlen und die Kalibrierung durchzufĂŒhren
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
- Schritt 7. Umgebungsvariablen setzen
- Schritt 8. Aktualisiere die Datei config_infer_primary_yoloV5.txt
Von
An
- Schritt 9. AusfĂŒhren der Inferenz
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