Vai al contenuto

Ultralytics YOLO11 on NVIDIA Jetson using DeepStream SDK and TensorRT



Guarda: How to Run Multiple Streams with DeepStream SDK on Jetson Nano using Ultralytics YOLO11

This comprehensive guide provides a detailed walkthrough for deploying Ultralytics YOLO11 on NVIDIA Jetson devices using DeepStream SDK and TensorRT. Here we use TensorRT to maximize the inference performance on the Jetson platform.

DeepStream su NVIDIA Jetson

Nota

Questa guida è stata testata sia con Seeed Studio reComputer J4012, che si basa su NVIDIA Jetson Orin NX 16GB con la release JetPack JP5.1.3, sia con Seeed Studio reComputer J1020 v2, che si basa su NVIDIA Jetson Nano 4GB con la release JetPack JP4.6.4. Si prevede che funzionerà su tutta la gamma di hardware NVIDIA Jetson, compresi quelli più recenti e quelli legacy.

Che cos'è NVIDIA DeepStream?

NVIDIA's DeepStream SDK is a complete streaming analytics toolkit based on GStreamer for AI-based multi-sensor processing, video, audio, and image understanding. It's ideal for vision AI developers, software partners, startups, and OEMs building IVA (Intelligent Video Analytics) apps and services. You can now create stream-processing pipelines that incorporate neural networks and other complex processing tasks like tracking, video encoding/decoding, and video rendering. These pipelines enable real-time analytics on video, image, and sensor data. DeepStream's multi-platform support gives you a faster, easier way to develop vision AI applications and services on-premise, at the edge, and in the cloud.

Prerequisiti

Prima di iniziare a seguire questa guida:

Suggerimento

In questa guida abbiamo utilizzato il metodo del pacchetto Debian per installare DeepStream SDK sul dispositivo Jetson. Puoi anche visitare la pagina DeepStream SDK su Jetson (Archiviato) per accedere alle versioni precedenti di DeepStream.

DeepStream Configuration for YOLO11

Qui utilizziamo il repository GitHub marcoslucianops/DeepStream-Yolo che include il supporto dell'SDK DeepStream NVIDIA per i modelli YOLO . Apprezziamo gli sforzi di marcoslucianops per il suo contributo!

  1. Installare le dipendenze

    pip install cmake
    pip install onnxsim
    
  2. Clonare il seguente repository

    git clone https://github.com/marcoslucianops/DeepStream-Yolo
    cd DeepStream-Yolo
    
  3. Download Ultralytics YOLO11 detection model (.pt) of your choice from YOLO11 releases. Here we use yolov8s.pt.

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

    Nota

    You can also use a custom trained YOLO11 model.

  4. Converti il modello in ONNX

    python3 utils/export_yoloV8.py -w yolov8s.pt
    

    Passare gli argomenti seguenti al comando precedente

    Per DeepStream 6.0.1, utilizzare opset 12 o inferiore. L'opset predefinito è 16.

    --opset 12
    

    Per modificare la dimensione dell'inferenza (default: 640)

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

    Esempio per 1280:

    -s 1280
    or
    -s 1280 1280
    

    Per semplificare il ONNX modello (DeepStream >= 6.0)

    --simplify
    

    Per utilizzare la dimensione batch dinamica (DeepStream >= 6.1)

    --dynamic
    

    Per utilizzare batch size statico (esempio per batch-size = 4)

    --batch 4
    
  5. Imposta la versione di CUDA in base alla versione di JetPack installata

    Per JetPack 4.6.4:

    export CUDA_VER=10.2
    

    Per JetPack 5.1.3:

    export CUDA_VER=11.4
    
  6. Compilare la libreria

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
    
  7. Modificare il file config_infer_primary_yoloV8.txt file in base al tuo modello (per YOLOv8s con 80 classi)

    [property]
    ...
    onnx-file=yolov8s.onnx
    ...
    num-detected-classes=80
    ...
    
  8. Modificare il file deepstream_app_config file

    ...
    [primary-gie]
    ...
    config-file=config_infer_primary_yoloV8.txt
    
  9. È inoltre possibile modificare la sorgente video in deepstream_app_config file. Qui viene caricato un file video predefinito

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

Eseguire l'inferenza

deepstream-app -c deepstream_app_config.txt

Nota

Ci vorrà molto tempo per generare il file TensorRT motore prima di avviare l'inferenza. Quindi, per favore, sii paziente.

YOLO11 with deepstream

Suggerimento

If you want to convert the model to FP16 precision, simply set model-engine-file=model_b1_gpu0_fp16.engine e network-mode=2 all'interno config_infer_primary_yoloV8.txt

Calibrazione INT8

Se vuoi utilizzare la precisione INT8 per l'inferenza, devi seguire i seguenti passaggi

  1. Mettere OPENCV variabile d'ambiente

    export OPENCV=1
    
  2. Compilare la libreria

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
    
  3. Per il set di dati COCO, scarica il file val2017, estrarre e spostare in DeepStream-Yolo cartella

  4. Creare una nuova directory per le immagini di calibrazione

    mkdir calibration
    
  5. Eseguire quanto segue per selezionare 1000 immagini casuali dal set di dati COCO per eseguire la calibrazione

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

    Nota

    NVIDIA recommends at least 500 images to get a good accuracy. On this example, 1000 images are chosen to get better accuracy (more images = more accuracy). You can set it from head -1000. For example, for 2000 images, head -2000. This process can take a long time.

  6. Creare il file calibration.txt file con tutte le immagini selezionate

    realpath calibration/*jpg > calibration.txt
    
  7. Impostare le variabili di ambiente

    export INT8_CALIB_IMG_PATH=calibration.txt
    export INT8_CALIB_BATCH_SIZE=1
    

    Nota

    Valori più alti di INT8_CALIB_BATCH_SIZE si tradurranno in una maggiore precisione e velocità di calibrazione. Impostalo in base alla memoria di GPU .

  8. Aggiorna il file config_infer_primary_yoloV8.txt file

    Da

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

    A

    ...
    model-engine-file=model_b1_gpu0_int8.engine
    int8-calib-file=calib.table
    ...
    network-mode=1
    ...
    

Eseguire l'inferenza

deepstream-app -c deepstream_app_config.txt

Configurazione MultiStream

Per configurare più flussi in un'unica applicazione deepstream, è possibile apportare le seguenti modifiche al file deepstream_app_config.txt file

  1. Modificare le righe e le colonne per creare una visualizzazione a griglia in base al numero di flussi che si desidera avere. Ad esempio, per 4 flussi, possiamo aggiungere 2 righe e 2 colonne.

    [tiled-display]
    rows=2
    columns=2
    
  2. Mettere num-sources=4 e aggiungi uri di tutti e 4 i corsi d'acqua

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

Eseguire l'inferenza

deepstream-app -c deepstream_app_config.txt
Configurazione multistream

Risultati del benchmark

La seguente tabella riassume le prestazioni dei modelli YOLOv8s a diversi livelli di precisione TensorRT con una dimensione di input di 640x640 su NVIDIA Jetson Orin NX 16GB.

Nome del modelloPrecisioneTempo di inferenza (ms/im)FPS
YOLOv8sFP3215.6364
FP167.94126
INT85.53181

Riconoscimenti

Questa guida è stata inizialmente creata dai nostri amici di Seeed Studio, Lakshantha ed Elaine.

DOMANDE FREQUENTI

How do I set up Ultralytics YOLO11 on an NVIDIA Jetson device?

To set up Ultralytics YOLO11 on an NVIDIA Jetson device, you first need to install the DeepStream SDK compatible with your JetPack version. Follow the step-by-step guide in our Quick Start Guide to configure your NVIDIA Jetson for YOLO11 deployment.

What is the benefit of using TensorRT with YOLO11 on NVIDIA Jetson?

Using TensorRT with YOLO11 optimizes the model for inference, significantly reducing latency and improving throughput on NVIDIA Jetson devices. TensorRT provides high-performance, low-latency deep learning inference through layer fusion, precision calibration, and kernel auto-tuning. This leads to faster and more efficient execution, particularly useful for real-time applications like video analytics and autonomous machines.

Can I run Ultralytics YOLO11 with DeepStream SDK across different NVIDIA Jetson hardware?

Yes, the guide for deploying Ultralytics YOLO11 with the DeepStream SDK and TensorRT is compatible across the entire NVIDIA Jetson lineup. This includes devices like the Jetson Orin NX 16GB with JetPack 5.1.3 and the Jetson Nano 4GB with JetPack 4.6.4. Refer to the section DeepStream Configuration for YOLO11 for detailed steps.

How can I convert a YOLO11 model to ONNX for DeepStream?

To convert a YOLO11 model to ONNX format for deployment with DeepStream, use the utils/export_yoloV8.py dallo script DeepStream-Yolo deposito.

Ecco un esempio di comando:

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

Per maggiori dettagli sulla conversione dei modelli, consulta la nostra sezione sull'esportazione dei modelli.

What are the performance benchmarks for YOLO on NVIDIA Jetson Orin NX?

The performance of YOLO11 models on NVIDIA Jetson Orin NX 16GB varies based on TensorRT precision levels. For example, YOLOv8s models achieve:

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

These benchmarks underscore the efficiency and capability of using TensorRT-optimized YOLO11 models on NVIDIA Jetson hardware. For further details, see our Benchmark Results section.

📅 Created 3 months ago ✏️ Updated 22 days ago

Commenti