Overslaan naar inhoud

Ultralytics YOLOv8 op NVIDIA Jetson met 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 waarop JetPack versie JP5.1.3 draait, als Seeed Studio reComputer J1020 v2 die is gebaseerd op NVIDIA Jetson Nano 4GB waarop JetPack versie JP4.6.4 draait. Naar verwachting werkt het op alle NVIDIA Jetson hardware, inclusief de nieuwste en oudere versies.

Wat is NVIDIA DeepStream?

NVIDIADeepStream 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 volgens 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 adviseert ten minste 500 afbeeldingen 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 zorgen voor meer nauwkeurigheid en een snellere kalibratie. Stel deze in volgens 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 vat samen hoe YOLOv8s modellen presteren op verschillende TensorRT precisieniveaus met een invoerformaat 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.

FAQ

Hoe stel ik Ultralytics YOLOv8 in op een NVIDIA Jetson-apparaat?

Om Ultralytics YOLOv8 in te stellen op een NVIDIA Jetson apparaat, moet je eerst de DeepStream SDK installeren die compatibel is met jouw JetPack versie. Volg de stapsgewijze handleiding in onze Snelstartgids om uw NVIDIA Jetson te configureren voor de implementatie op YOLOv8 .

Wat is het voordeel van het gebruik van TensorRT met YOLOv8 op NVIDIA Jetson?

Het gebruik van TensorRT met YOLOv8 optimaliseert het model voor inferentie, waardoor de latentie aanzienlijk wordt verlaagd en de doorvoer op NVIDIA Jetson-apparaten wordt verbeterd. TensorRT biedt deep learning-inferentie met hoge prestaties en lage latentie door middel van layer fusion, precisiekalibratie en kernel auto-tuning. Dit leidt tot snellere en efficiƫntere uitvoering, wat vooral nuttig is voor realtime toepassingen zoals videoanalyse en autonome machines.

Kan ik Ultralytics YOLOv8 met DeepStream SDK draaien op verschillende NVIDIA Jetson hardware?

Ja, de handleiding voor het implementeren van Ultralytics YOLOv8 met de DeepStream SDK en TensorRT is compatibel met het hele NVIDIA Jetson-assortiment. Dit omvat apparaten zoals de Jetson Orin NX 16GB met JetPack 5.1.3 en de Jetson Nano 4GB met JetPack 4.6.4. Raadpleeg de sectie DeepStream Configuratie voor YOLOv8 voor gedetailleerde stappen.

Hoe kan ik een YOLOv8 model converteren naar ONNX voor DeepStream?

Om een YOLOv8 model te converteren naar ONNX formaat voor implementatie met DeepStream, gebruik je het utils/export_yoloV8.py script van de DeepStream-Yolo bergplaats.

Hier is een voorbeeldopdracht:

python3 utils/export_yoloV8.py -w yolov8s.pt --opset 12 --simplify

Kijk voor meer informatie over het omzetten van modellen in onze sectie over het exporteren van modellen.

Wat zijn de prestatiebenchmarks voor YOLOv8 op NVIDIA Jetson Orin NX?

De prestaties van YOLOv8 modellen op NVIDIA Jetson Orin NX 16GB variƫren op basis van TensorRT precisieniveaus. Bijvoorbeeld, YOLOv8s modellen bereiken:

  • FP32 precisie: 15,63 ms/im, 64 FPS
  • FP16 Precisie: 7,94 ms/im, 126 FPS
  • INT8 Precisie: 5,53 ms/im, 181 FPS

Deze benchmarks onderstrepen de efficiƫntie en mogelijkheden van het gebruik van TensorRT geoptimaliseerde YOLOv8 modellen op NVIDIA Jetson hardware. Zie voor meer details onze sectie Benchmarkresultaten.



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

Reacties