Ultralytics YOLO26 su NVIDIA Jetson utilizzando DeepStream SDK e TensorRT



Watch: How to use Ultralytics YOLO26 models with NVIDIA Deepstream on Jetson Orin NX 🚀

Questa guida completa fornisce un walkthrough dettagliato per il deployment di Ultralytics YOLO26 su dispositivi NVIDIA Jetson utilizzando DeepStream SDK e TensorRT. Qui utilizziamo TensorRT per massimizzare le prestazioni di inferenza sulla piattaforma Jetson.

NVIDIA DeepStream SDK on Jetson platform
Nota

Questa guida è stata testata con NVIDIA Jetson Orin Nano Super Developer Kit con l'ultima release stabile di JetPack JP6.1, Seeed Studio reComputer J4012 basato su NVIDIA Jetson Orin NX 16GB con la release JetPack JP5.1.3 e Seeed Studio reComputer J1020 v2 basato su NVIDIA Jetson Nano 4GB con la release JetPack JP4.6.4. È previsto che funzioni su tutta la linea hardware NVIDIA Jetson, inclusi i modelli recenti e legacy.

Cos'è NVIDIA DeepStream?

NVIDIA's DeepStream SDK è un toolkit completo per l'analisi in streaming basato su GStreamer per l'elaborazione multi-sensore basata su IA, comprensione di video, audio e immagini. È ideale per sviluppatori di vision AI, partner software, startup e OEM che creano app e servizi di IVA (Intelligent Video Analytics). Ora puoi creare pipeline di elaborazione stream che incorporano reti neurali e altre attività di elaborazione complesse come il tracking, la codifica/decodifica video e il rendering video. Queste pipeline consentono analisi in tempo reale su dati video, immagini e sensori. Il supporto multi-piattaforma di DeepStream ti offre un modo più veloce e semplice per sviluppare applicazioni e servizi di vision AI on-premise, edge e nel 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 DeepStream SDK su Jetson (Archiviato) per accedere alle versioni legacy di DeepStream.

Configurazione DeepStream per YOLO26

Qui utilizziamo il repository GitHub marcoslucianops/DeepStream-Yolo che include il supporto NVIDIA DeepStream SDK per i modelli YOLO. Apprezziamo l'impegno di marcoslucianops per i suoi contributi!

  1. Installa Ultralytics con le dipendenze necessarie

    cd ~
    pip install -U pip
    git clone https://github.com/ultralytics/ultralytics
    cd ultralytics
    pip install -e ".[export]" onnxslim
  2. Clona il repository DeepStream-Yolo

    cd ~
    git clone https://github.com/marcoslucianops/DeepStream-Yolo
  3. Copia il file export_yolo26.py dalla directory DeepStream-Yolo/utils alla cartella ultralytics

    cp ~/DeepStream-Yolo/utils/export_yolo26.py ~/ultralytics
    cd ultralytics
  4. Scarica il modello di rilevamento Ultralytics YOLO26 (.pt) di tua scelta dalle release di YOLO26. Qui utilizziamo yolo26s.pt.

    wget https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo26s.pt
Nota

Puoi anche utilizzare un modello YOLO26 addestrato su misura.

  1. Converti il modello in ONNX

    python3 export_yolo26.py -w yolo26s.pt
Passa gli argomenti sottostanti al comando precedente

Per DeepStream 5.1, rimuovi l'argomento --dynamic e utilizza opset 12 o inferiore. L'opset predefinito è 17.

--opset 12

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

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

Esempio per 1280:

-s 1280
or
-s 1280 1280

Per semplificare il modello ONNX (DeepStream >= 6.0)

--simplify

Per utilizzare una batch-size dinamica (DeepStream >= 6.1)

--dynamic

Per utilizzare una batch-size statica (esempio per batch-size = 4)

--batch 4
  1. Copia il file del modello .onnx generato e il file labels.txt nella cartella DeepStream-Yolo

    cp yolo26s.pt.onnx labels.txt ~/DeepStream-Yolo
    cd ~/DeepStream-Yolo
  2. Imposta la versione 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

    Per JetPack 6.1:

    export CUDA_VER=12.6
  3. Compila la libreria

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
  4. Modifica il file config_infer_primary_yolo26.txt in base al tuo modello (per YOLO26s con 80 classi)

    [property]
    ...
    onnx-file=yolo26s.pt.onnx
    ...
    num-detected-classes=80
    ...
  5. Modifica il file deepstream_app_config

    ...
    [primary-gie]
    ...
    config-file=config_infer_primary_yolo26.txt
  6. Puoi anche cambiare la sorgente video nel file deepstream_app_config. Qui viene caricato un file video predefinito

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

Esegui l'inferenza

deepstream-app -c deepstream_app_config.txt
Nota

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

YOLO26 with deepstream
Suggerimento

Se vuoi convertire il modello alla precisione FP16, imposta semplicemente model-engine-file=model_b1_gpu0_fp16.engine e network-mode=2 all'interno di config_infer_primary_yolo26.txt

Calibrazione INT8

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

Nota

Attualmente INT8 non funziona con TensorRT 10.x. Questa sezione della guida è stata testata con TensorRT 8.x, con cui dovrebbe funzionare.

  1. Imposta la variabile d'ambiente OPENCV

    export OPENCV=1
  2. Compila la libreria

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
  3. Per il dataset COCO, scarica val2017, estrai e sposta nella cartella DeepStream-Yolo

  4. Crea una nuova directory per le immagini di calibrazione

    mkdir calibration
  5. Esegui quanto segue per selezionare 1000 immagini casuali dal dataset COCO per eseguire la calibrazione

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

NVIDIA consiglia almeno 500 immagini per ottenere una buona accuratezza. In questo esempio, vengono scelte 1000 immagini per ottenere un'accuratezza migliore (più immagini = più accuratezza). Puoi impostarlo da head -1000. Ad esempio, per 2000 immagini, head -2000. Questo processo può richiedere molto tempo.

  1. Crea il file calibration.txt con tutte le immagini selezionate

    realpath calibration/*jpg > calibration.txt
  2. Imposta le variabili d'ambiente

    export INT8_CALIB_IMG_PATH=calibration.txt
    export INT8_CALIB_BATCH_SIZE=1
Nota

Valori più alti di INT8_CALIB_BATCH_SIZE porteranno a una maggiore accuratezza e una velocità di calibrazione più rapida. Impostalo in base alla memoria della tua GPU.

  1. Aggiorna il file config_infer_primary_yolo26.txt

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

Esegui l'inferenza

deepstream-app -c deepstream_app_config.txt

Configurazione MultiStream



Watch: How to Run Multi-Stream Inference with Ultralytics YOLO26 using NVIDIA DeepStream on Jetson Orin 🚀

Per configurare più stream sotto una singola applicazione DeepStream, apporta le seguenti modifiche al file deepstream_app_config.txt:

  1. Modifica righe e colonne per creare un display a griglia in base al numero di stream che desideri avere. Ad esempio, per 4 stream, possiamo aggiungere 2 righe e 2 colonne.

    [tiled-display]
    rows=2
    columns=2
  2. Imposta num-sources=4 e aggiungi le voci uri per tutti e quattro gli stream.

    [source0]
    enable=1
    type=3
    uri=path/to/video1.jpg
    uri=path/to/video2.jpg
    uri=path/to/video3.jpg
    uri=path/to/video4.jpg
    num-sources=4

Esegui l'inferenza

deepstream-app -c deepstream_app_config.txt
DeepStream multi-camera streaming configuration

Risultati dei Benchmark

I seguenti benchmark riassumono come i modelli YOLO26 si comportano a diversi livelli di precisione TensorRT con una dimensione di input di 640x640 su NVIDIA Jetson Orin NX 16GB.

Grafico di confronto

NVIDIA Jetson DeepStream performance benchmarks

Tabella di confronto dettagliata

Prestazioni
FormatoStatoTempo di inferenza (ms/im)
TensorRT (FP32)8.64
TensorRT (FP16)5.27
TensorRT (INT8)4.54

Riconoscimenti

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

FAQ

Come configuro Ultralytics YOLO26 su un dispositivo NVIDIA Jetson?

Per configurare Ultralytics YOLO26 su un dispositivo NVIDIA Jetson, devi prima installare DeepStream SDK compatibile con la tua versione di JetPack. Segui la guida passo dopo passo nella nostra Guida introduttiva per configurare il tuo NVIDIA Jetson per il deployment di YOLO26.

Qual è il vantaggio di utilizzare TensorRT con YOLO26 su NVIDIA Jetson?

L'utilizzo di TensorRT con YOLO26 ottimizza il modello per l'inferenza, riducendo significativamente la latenza e migliorando il throughput sui dispositivi NVIDIA Jetson. TensorRT fornisce un'inferenza di deep learning ad alte prestazioni e bassa latenza attraverso la fusione dei livelli, la calibrazione della precisione e l'auto-tuning del kernel. Ciò porta a un'esecuzione più veloce ed efficiente, particolarmente utile per applicazioni in tempo reale come l'analisi video e le macchine autonome.

Posso eseguire Ultralytics YOLO26 con DeepStream SDK su diversi hardware NVIDIA Jetson?

Sì, la guida per il deployment di Ultralytics YOLO26 con DeepStream SDK e TensorRT è compatibile con l'intera linea NVIDIA Jetson. Ciò include dispositivi come Jetson Orin NX 16GB con JetPack 5.1.3 e Jetson Nano 4GB con JetPack 4.6.4. Consulta la sezione Configurazione DeepStream per YOLO26 per i passaggi dettagliati.

Come posso convertire un modello YOLO26 in ONNX per DeepStream?

Per convertire un modello YOLO26 in formato ONNX per il deployment con DeepStream, usa lo script utils/export_yolo26.py dal repository DeepStream-Yolo.

Ecco un comando di esempio:

python3 utils/export_yolo26.py -w yolo26s.pt --opset 12 --simplify

Per maggiori dettagli sulla conversione del modello, dai un'occhiata alla nostra sezione esportazione modello.

Quali sono i benchmark di prestazioni per YOLO su NVIDIA Jetson Orin NX?

Le prestazioni dei modelli YOLO26 su NVIDIA Jetson Orin NX 16GB variano in base ai livelli di precisione TensorRT. Ad esempio, i modelli YOLO26s ottengono:

  • Precisione FP32: 14,6 ms/im, 68,5 FPS
  • Precisione FP16: 7,94 ms/im, 126 FPS
  • Precisione INT8: 5,95 ms/im, 168 FPS

Questi benchmark sottolineano l'efficienza e la capacità dell'utilizzo di modelli YOLO26 ottimizzati con TensorRT su hardware NVIDIA Jetson. Per ulteriori dettagli, consulta la nostra sezione Risultati dei Benchmark.

Commenti