Overslaan naar inhoud

Implementeren op NVIDIA Jetson met TensorRT en DeepStream SDK

📚 Deze handleiding legt uit hoe je een getraind model kunt implementeren in het NVIDIA Jetson platform en inferentie kunt uitvoeren met TensorRT en DeepStream SDK. Hier gebruiken we TensorRT om de inferentieprestaties op het Jetson platform te maximaliseren.

Hardwareverificatie

We hebben deze handleiding getest en gecontroleerd op de volgende Jetson-apparaten

Voordat je begint

Zorg ervoor dat je JetPack SDK met alle SDK-onderdelen en DeepStream SDK goed hebt geïnstalleerd op het Jetson-apparaat, omdat dit CUDA, TensorRT en DeepStream SDK bevat die nodig zijn voor deze handleiding.

JetPack SDK biedt een volledige ontwikkelomgeving voor hardwareversnelde AI-at-the-edge ontwikkeling. Alle Jetson-modules en developer kits worden ondersteund door JetPack SDK.

Er zijn twee belangrijke installatiemethoden,

  1. SD-kaart afbeeldingsmethode
  2. Methode NVIDIA SDK-beheer

Je kunt een zeer gedetailleerde installatiehandleiding vinden op de officiële website van NVIDIA. Je kunt ook gidsen vinden die overeenkomen met de hierboven genoemde reComputer J1010 en reComputer J2021.

Noodzakelijke pakketten installeren

  • Stap 1. Ga naar de terminal van het Jetson-apparaat, installeer pip en voer een upgrade uit
sudo apt update
sudo apt install -y python3-pip
pip3 install --upgrade pip
  • Stap 2. Kloon de volgende repo
git clone https://github.com/ultralytics/yolov5
  • Stap 3. Open vereisten.txt
cd yolov5
vi requirements.txt
  • Stap 5. Bewerk de volgende regels. Hier moet je eerst op i drukken om de bewerkingsmodus te openen. Druk op ESC en typ dan :wq om op te slaan en af te sluiten
# torch>=1.8.0
# torchvision>=0.9.0

Opmerking: torch en torchvision zijn voorlopig uitgesloten omdat deze later geïnstalleerd zullen worden.

  • Stap 6. Installeer de onderstaande afhankelijkheid
sudo apt install -y libfreetype6-dev
  • Stap 7. Installeer de benodigde pakketten
pip3 install -r requirements.txt

Installeer PyTorch en Torchvision

We kunnen PyTorch en Torchvision niet installeren vanuit pip omdat ze niet compatibel zijn om te draaien op het Jetson platform dat is gebaseerd op de ARM aarch64 architectuur. Daarom moeten we handmatig PyTorch pip wheel installeren en Torchvision vanaf de broncode compileren en installeren.

Bezoek deze pagina voor toegang tot alle links naar PyTorch en Torchvision.

Hier zijn enkele versies die worden ondersteund door JetPack 4.6 en hoger.

PyTorch v1.10.0

Ondersteund door 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) met Python 3.6

PyTorch v1.12.0

Ondersteund door JetPack 5.0 (L4T R34.1.0) / JetPack 5.0.1 (L4T R34.1.1) / JetPack 5.0.2 (L4T R35.1.0) met Python 3.8

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

Hier draaien we bijvoorbeeld JP4.6.1 en daarom kiezen we 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
  • Stap 2. Installeer torchvision afhankelijk van de versie van PyTorch die je hebt geïnstalleerd. We hebben bijvoorbeeld PyTorch v1 .10.0 gekozen, wat betekent dat we Torchvision v0.11.1 moeten kiezen.
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 is een lijst met de bijbehorende torchvision-versie die je moet installeren volgens de versie PyTorch :

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

DeepStream-configuratie voor YOLOv5

  • Stap 1. Kloon de volgende repo
cd ~
git clone https://github.com/marcoslucianops/DeepStream-Yolo
  • Stap 2. Kopieer gen_wts_yoloV5.py van DeepStream-Yolo /utils naar yolov5 map
cp DeepStream-Yolo/utils/gen_wts_yoloV5.py yolov5
  • Stap 3. Download in de yolov5 repo het pt-bestand van YOLOv5 releases (voorbeeld voor YOLOv5s 6.1)
cd yolov5
wget https://github.com/ultralytics/yolov5/releases/download/v6.1/yolov5s.pt
  • Stap 4. Genereer de cfg- en wts-bestanden
python3 gen_wts_yoloV5.py -w yolov5s.pt

Opmerking: Om de inferentiegrootte te wijzigen (standaard: 640)

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

Example for 1280:

-s 1280
or
-s 1280 1280
  • Stap 5. Kopieer de gegenereerde cfg- en wts-bestanden naar de map DeepStream-Yolo
cp yolov5s.cfg ~/DeepStream-Yolo
cp yolov5s.wts ~/DeepStream-Yolo
  • Stap 6. Open de DeepStream-Yolo map en compileer de bibliotheek
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
  • Stap 7. Bewerk het bestand config_infer_primary_yoloV5.txt volgens uw model
[property]
...
custom-network-config=yolov5s.cfg
model-file=yolov5s.wts
...
  • Stap 8. Bewerk het deepstream_app_config bestand
...
[primary-gie]
...
config-file=config_infer_primary_yoloV5.txt
  • Stap 9. Wijzig de videobron in deepstream_app_config bestand. Hier wordt een standaard videobestand geladen zoals je hieronder kunt zien
...
[source0]
...
uri=file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4

Voer de conclusie uit

deepstream-app -c deepstream_app_config.txt
YOLOv5 met deepstream FP32

Het bovenstaande resultaat wordt uitgevoerd op Jetson Xavier NX met FP32 en YOLOv5s 640x640. We kunnen zien dat de FPS rond de 30 ligt.

INT8 kalibratie

Als je INT8 precisie wilt gebruiken voor inferentie, moet je de onderstaande stappen volgen

  • Stap 1. Installeer OpenCV
sudo apt-get install libopencv-dev
  • Stap 2. Compileer/hercompileer de nvdsinfer_custom_impl_Yolo bibliotheek met OpenCV ondersteuning
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
  • Stap 3. Download voor de COCO-dataset de val2017, pak deze uit en verplaats deze naar de DeepStream-Yolo map.

  • Stap 4. Maak een nieuwe map voor kalibratieafbeeldingen

mkdir calibration
  • Stap 5. Voer het volgende uit om 1000 willekeurige afbeeldingen uit de COCO-dataset te selecteren om de kalibratie uit te voeren
for jpg in $(ls -1 val2017/*.jpg | sort -R | head -1000); do \
    cp ${jpg} calibration/; \
done

Opmerking: NVIDIA raadt ten minste 500 afbeeldingen aan om een goede nauwkeurigheid te krijgen. In dit voorbeeld zijn 1000 afbeeldingen gekozen om een betere nauwkeurigheid te krijgen (meer afbeeldingen = meer nauwkeurigheid). Hogere INT8_CALIB_BATCH_SIZE waarden zorgen voor meer nauwkeurigheid en een snellere kalibratiesnelheid. Stel het in volgens je GPU geheugen. Je kunt het instellen van head -1000. Bijvoorbeeld, voor 2000 afbeeldingen, kop -2000. Dit proces kan lang duren.

  • Stap 6. Maak het bestand calibration.txt met alle geselecteerde afbeeldingen
realpath calibration/*jpg > calibration.txt
  • Stap 7. Omgevingsvariabelen instellen
export INT8_CALIB_IMG_PATH=calibration.txt
export INT8_CALIB_BATCH_SIZE=1
  • Stap 8. Werk het bestand config_infer_primary_yoloV5.txt bij

Van

...
model-engine-file=model_b1_gpu0_fp32.engine
#int8-calib-file=calib.table
...
network-mode=0
...

Naar

...
model-engine-file=model_b1_gpu0_int8.engine
int8-calib-file=calib.table
...
network-mode=1
...
  • Stap 9. Voer de inferentie uit
deepstream-app -c deepstream_app_config.txt
YOLOv5 met deepstream INT8

Het bovenstaande resultaat wordt uitgevoerd op Jetson Xavier NX met INT8 en YOLOv5s 640x640. We kunnen zien dat de FPS rond de 60 ligt.

Benchmarkresultaten

De volgende tabel geeft een overzicht van hoe verschillende modellen presteren op de Jetson Xavier NX.

Modelnaam Precisie Inferentiegrootte Inferentietijd (ms) FPS
YOLOv5s FP32 320x320 16.66 60
FP32 640x640 33.33 30
INT8 640x640 16.66 60
YOLOv5n FP32 640x640 16.66 60

Extra

Deze les is geschreven door onze vrienden bij seeed @lakshanthad en Elaine



Gemaakt op 2023-11-12, Bijgewerkt op 2024-01-07
Auteurs: glenn-jocher (5)

Reacties