Overslaan naar inhoud

Ultralytics YOLOv8 op NVIDIA Jetson met behulp van DeepStream SDK en TensorRT

Deze uitgebreide handleiding biedt een gedetailleerde handleiding voor het implementeren van Ultralytics YOLOv8 op NVIDIA Jetson apparaten met behulp van DeepStream SDK en TensorRT. Hier gebruiken we TensorRT om de inferentieprestaties op het Jetson platform te maximaliseren.

DeepStream op NVIDIA Jetson

Opmerking

Deze handleiding is getest met zowel Seeed Studio reComputer J4012 die is gebaseerd op NVIDIA Jetson Orin NX 16GB met JetPack versie JP5.1.3 als Seeed Studio reComputer J1020 v2 die is gebaseerd op NVIDIA Jetson Nano 4GB met JetPack versie JP4.6.4. Verwacht wordt dat het werkt op alle NVIDIA Jetson hardware, inclusief de nieuwste en oudere versies.

Wat is NVIDIA DeepStream?

NVIDIA's DeepStream SDK is een complete streaming analytics toolkit gebaseerd op GStreamer voor AI-gebaseerde multi-sensor verwerking, video, audio en beeldbegrip. Het is ideaal voor vision AI-ontwikkelaars, softwarepartners, startups en OEM's die IVA (Intelligent Video Analytics) apps en diensten bouwen. Je kunt nu stroomverwerkingspijplijnen maken met neurale netwerken en andere complexe verwerkingstaken zoals traceren, video coderen/decoderen en video renderen. Deze pijplijnen maken real-time analyse van video-, beeld- en sensorgegevens mogelijk. De multi-platform ondersteuning van DeepStream biedt je een snellere, eenvoudigere manier om vision AI toepassingen en diensten te ontwikkelen op locatie, aan de rand en in de cloud.

Vereisten

Voordat u deze handleiding gaat volgen:

Tip

In deze handleiding hebben we de Debian pakketmethode gebruikt om DeepStream SDK op het Jetson-apparaat te installeren. Je kunt ook de DeepStream SDK op Jetson (Gearchiveerd) bezoeken om toegang te krijgen tot oudere versies van DeepStream.

DeepStream-configuratie voor YOLOv8

Hier gebruiken we marcoslucianops/DeepStream-Yolo GitHub repository die NVIDIA DeepStream SDK ondersteuning voor YOLO modellen bevat. We waarderen de inspanningen van marcoslucianops voor zijn bijdragen!

  1. Afhankelijkheden installeren

    pip install cmake
    pip install onnxsim
    
  2. Kloon de volgende opslagplaats

    git clone https://github.com/marcoslucianops/DeepStream-Yolo
    cd DeepStream-Yolo
    
  3. Download Ultralytics YOLOv8 detectiemodel (.pt) naar keuze van YOLOv8 releases. Hier gebruiken we yolov8s.pt.

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

    Opmerking

    Je kunt ook een aangepast getraind YOLOv8 model gebruiken.

  4. Model converteren naar ONNX

    python3 utils/export_yoloV8.py -w yolov8s.pt
    

    Geef de onderstaande argumenten door aan de bovenstaande opdracht

    Gebruik voor DeepStream 6.0.1 opset 12 of lager. De standaardinstelling is 16.

    --opset 12
    

    De deductiegrootte wijzigen (standaard: 640)

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

    Voorbeeld voor 1280:

    -s 1280
    or
    -s 1280 1280
    

    Om de ONNX model (DeepStream >= 6.0)

    --simplify
    

    Dynamische batchgrootte gebruiken (DeepStream >= 6.1)

    --dynamic
    

    Statische batchgrootte gebruiken (voorbeeld voor batchgrootte = 4)

    --batch 4
    
  5. Stel de CUDA-versie in op basis van de geïnstalleerde JetPack-versie

    Voor JetPack 4.6.4:

    export CUDA_VER=10.2
    

    Voor JetPack 5.1.3:

    export CUDA_VER=11.4
    
  6. Stel de bibliotheek samen

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
    
  7. Bewerk de config_infer_primary_yoloV8.txt bestand volgens uw model (voor YOLOv8s met 80 klassen)

    [property]
    ...
    onnx-file=yolov8s.onnx
    ...
    num-detected-classes=80
    ...
    
  8. Bewerk de deepstream_app_config bestand

    ...
    [primary-gie]
    ...
    config-file=config_infer_primary_yoloV8.txt
    
  9. U kunt ook de videobron wijzigen in deepstream_app_config bestand. Hier wordt een standaard videobestand geladen

    ...
    [source0]
    ...
    uri=file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4
    

Deductie uitvoeren

deepstream-app -c deepstream_app_config.txt

Opmerking

Het zal lang duren om de TensorRT motorbestand voordat u de deductie start. Dus heb even geduld.

YOLOv8 met deepstream

Tip

Als u het model wilt ombouwen naar FP16-precisie, stelt u eenvoudig in model-engine-file=model_b1_gpu0_fp16.engine en network-mode=2 binnen config_infer_primary_yoloV8.txt

INT8 kalibratie

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

  1. Set OPENCV Omgevingsvariabele

    export OPENCV=1
    
  2. Stel de bibliotheek samen

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
    
  3. Download voor de COCO-dataset de val2017uitpakken en verplaatsen naar DeepStream-Yolo map

  4. Een nieuwe map maken voor kalibratie-images

    mkdir calibration
    
  5. Voer het volgende uit om 1000 willekeurige afbeeldingen uit de COCO-gegevensset te selecteren om kalibratie uit te voeren

    for jpg in $(ls -1 val2017/*.jpg | sort -R | head -1000); do \
        cp ${jpg} calibration/; \
    done
    

    Opmerking

    NVIDIA beveelt 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). Je kunt het instellen vanaf kop -1000. Bijvoorbeeld, voor 2000 afbeeldingen, kop -2000. Dit proces kan lang duren.

  6. Creëer de calibration.txt bestand met alle geselecteerde afbeeldingen

    realpath calibration/*jpg > calibration.txt
    
  7. Omgevingsvariabelen instellen

    export INT8_CALIB_IMG_PATH=calibration.txt
    export INT8_CALIB_BATCH_SIZE=1
    

    Opmerking

    Hogere INT8_CALIB_BATCH_SIZE waarden resulteren in een grotere nauwkeurigheid en een hogere kalibratiesnelheid. Stel het in op basis van je GPU-geheugen.

  8. Werk de config_infer_primary_yoloV8.txt bestand

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

Deductie uitvoeren

deepstream-app -c deepstream_app_config.txt

MultiStream-installatie

Als u meerdere streams wilt instellen onder één deepstream-toepassing, kunt u de volgende wijzigingen aanbrengen in de deepstream_app_config.txt bestand

  1. Wijzig de rijen en kolommen om een rasterweergave te maken op basis van het aantal streams dat u wilt hebben. Voor 4 streams kunnen we bijvoorbeeld 2 rijen en 2 kolommen toevoegen.

    [tiled-display]
    rows=2
    columns=2
    
  2. Set num-sources=4 en voeg toe uri van alle 4 de stromen

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

Deductie uitvoeren

deepstream-app -c deepstream_app_config.txt
Multistream-opstelling

Benchmark resultaten

De volgende tabel geeft een overzicht van hoe YOLOv8s modellen presteren op verschillende TensorRT precisiewaterpassen met een invoergrootte van 640x640 op NVIDIA Jetson Orin NX 16GB.

Modelnaam Precisie Inferentietijd (ms/im) FPS
YOLOv8s FP32 15.63 64
FP16 7.94 126
INT8 5.53 181

Dankbetuigingen

Deze gids is oorspronkelijk gemaakt door onze vrienden van Seeed Studio, Lakshantha en Elaine.



Gemaakt op 2024-07-01, Bijgewerkt op 2024-07-01
Auteurs: lakshanthad (1)

Reacties