Ultralytics YOLO27:

Ultralytics YOLO26 su NVIDIA Jetson con DeepStream SDK e TensorRT#



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

Questa guida completa fornisce una procedura dettagliata per distribuire Ultralytics YOLO26 sui dispositivi NVIDIA Jetson utilizzando DeepStream SDK e TensorRT. Qui utilizziamo TensorRT per massimizzare le prestazioni di inferenza sulla piattaforma Jetson.

Questa guida illustra la configurazione di DeepStream per YOLO26, la calibrazione INT8, la configurazione multistream e i risultati dei benchmark.

NVIDIA DeepStream SDK on Jetson platform
Nota

Questa guida è stata testata con NVIDIA Jetson Orin Nano Super Developer Kit con l'ultima versione stabile di JetPack, JP6.1, Seeed Studio reComputer J4012, basato su NVIDIA Jetson Orin NX 16GB con la versione JetPack JP5.1.3, e Seeed Studio reComputer J1020 v2, basato su NVIDIA Jetson Nano 4GB con la versione JetPack JP4.6.4. È previsto il funzionamento sull'intera gamma di hardware NVIDIA Jetson, inclusi i modelli più recenti e quelli legacy.

Che cos'è NVIDIA DeepStream?#

DeepStream SDK di NVIDIA è un toolkit completo per l'analisi dei flussi, basato su GStreamer, per l'elaborazione multisensore basata sull'AI e la comprensione di video, audio e immagini. È ideale per sviluppatori di AI per la visione, partner software, startup e OEM che realizzano app e servizi di analisi video intelligente (IVA). Ora puoi creare pipeline di elaborazione dei flussi 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 di dati video, immagini e sensori. Il supporto multipiattaforma di DeepStream offre un modo più rapido e semplice per sviluppare applicazioni e servizi di AI per la visione on-premise, all'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 la pagina DeepStream SDK su Jetson (archiviato) per accedere alle versioni legacy di DeepStream.

Configurazione di DeepStream per YOLO26#

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

  1. Installa Ultralytics con le dipendenze necessarie

    pip install ultralytics onnx onnxslim
  2. Clona il repository DeepStream-Yolo

    cd ~
    git clone https://github.com/marcoslucianops/DeepStream-Yolo
  3. Scarica un modello di rilevamento Ultralytics YOLO26 (.pt) a tua scelta dal progetto YOLO26. Qui utilizziamo yolo26s.pt.

    wget https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo26s.pt
Nota
  1. Converti il modello in ONNX e scrivi il file labels.txt da cui DeepStream legge i nomi delle classi

    from ultralytics import YOLO
    
    model = YOLO("yolo26s.pt")
    model.export(format="onnx", nms=False, agnostic_nms=True)  # creates 'yolo26s.onnx'
    with open("labels.txt", "w") as f:
        f.write("\n".join(model.names.values()))
Argomenti di esportazione

nms=False esporta la testa senza NMS e agnostic_nms=True mantiene una singola classe per rilevamento in modo che cluster-mode=4 (senza clustering) nella configurazione di DeepStream non disegni un riquadro due volte. Aggiungi imgsz=1280 per modificare la dimensione di inferenza (predefinita: 640), batch=4 per una dimensione del batch pari a 4 (il batch esportato è statico, quindi deve corrispondere a batch-size nella configurazione di DeepStream) e opset=12 per TensorRT 8.2 o versioni precedenti (DeepStream 6.0.1 e precedenti). Vedi gli argomenti di esportazione per l'elenco completo.

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

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

    Per JetPack 6.1:

    export CUDA_VER=12.6

    Per JetPack 7.1:

    export CUDA_VER=13.0
  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.onnx
    ...
    num-detected-classes=80
    ...
    parse-bbox-func-name=NvDsInferParseYolo
    ...
Impostazioni di accuratezza di YOLO26

YOLO26 ridimensiona l'input con padding centrato ed esegue l'inferenza senza NMS. Per ottenere la migliore accuratezza, aggiungi quanto segue alla sezione [property] di config_infer_primary_yolo26.txt:

[property]
...
maintain-aspect-ratio=1
symmetric-padding=1
cluster-mode=4
...
  1. Modifica il file deepstream_app_config

    ...
    [primary-gie]
    ...
    config-file=config_infer_primary_yolo26.txt
  2. Puoi anche modificare la sorgente video nel file deepstream_app_config. In questo esempio 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

La generazione del file del motore TensorRT richiederà molto tempo prima dell'avvio dell'inferenza. Abbi pazienza.

YOLO26 with deepstream
Suggerimento

Se vuoi convertire il modello con 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 seguenti:

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, estrailo e spostalo 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 da utilizzare per 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 una maggiore accuratezza (più immagini = maggiore accuratezza). Puoi impostare questo valore con 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ù elevati di INT8_CALIB_BATCH_SIZE producono una maggiore accuratezza e una 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 INT8#

Esegui lo stesso comando per compilare il motore INT8 e avviare 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ù flussi all'interno di una singola applicazione DeepStream, apporta le seguenti modifiche al file deepstream_app_config.txt:

  1. Modifica il numero di righe e colonne per creare una griglia di visualizzazione in base al numero di flussi desiderati. Ad esempio, per 4 flussi, puoi aggiungere 2 righe e 2 colonne.

    [tiled-display]
    rows=2
    columns=2
  2. Aggiungi un gruppo [sourceN] separato per ogni flusso, ciascuno con il proprio uri e num-sources=1.

    [source0]
    enable=1
    type=3
    uri=file:///path/to/video1.mp4
    num-sources=1
    
    [source1]
    enable=1
    type=3
    uri=file:///path/to/video2.mp4
    num-sources=1
    
    [source2]
    enable=1
    type=3
    uri=file:///path/to/video3.mp4
    num-sources=1
    
    [source3]
    enable=1
    type=3
    uri=file:///path/to/video4.mp4
    num-sources=1

Esegui l'inferenza multistream#

Esegui lo stesso comando per avviare tutti i flussi nella visualizzazione affiancata:

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

Risultati dei benchmark#

I seguenti benchmark riassumono le prestazioni dei modelli YOLO11 con diversi livelli di precisione TensorRT e una dimensione di input di 640x640 su NVIDIA Jetson Orin NX 16GB. YOLO26 utilizza lo stesso flusso di esportazione e inferenza DeepStream descritto sopra.

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

Ringraziamenti#

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

FAQ#

  • Per configurare Ultralytics YOLO26 su un dispositivo NVIDIA Jetson, devi prima installare il DeepStream SDK compatibile con la tua versione di JetPack. Segui la procedura dettagliata nella nostra Guida rapida per configurare NVIDIA Jetson per la distribuzione di YOLO26.

  • 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 offre inferenza di deep learning ad alte prestazioni e bassa latenza tramite la fusione dei layer, la calibrazione della precisione e l'ottimizzazione automatica dei kernel. Ne deriva un'esecuzione più rapida ed efficiente, particolarmente utile per applicazioni in tempo reale come l'analisi video e le macchine autonome.

  • Sì, la guida per distribuire Ultralytics YOLO26 con DeepStream SDK e TensorRT è compatibile con l'intera gamma NVIDIA Jetson. Sono inclusi dispositivi come Jetson Orin NX 16GB con JetPack 5.1.3 e Jetson Nano 4GB con JetPack 4.6.4. Consulta la sezione Configurazione di DeepStream per YOLO26 per i passaggi dettagliati.

  • Esporta il modello con la testa senza NMS utilizzando l'esportatore di Ultralytics e scrivi il file labels.txt da cui DeepStream legge i nomi delle classi:

    from ultralytics import YOLO
    
    model = YOLO("yolo26s.pt")
    model.export(format="onnx", nms=False, agnostic_nms=True)  # creates 'yolo26s.onnx'
    with open("labels.txt", "w") as f:
        f.write("\n".join(model.names.values()))

    Aggiungi opset=12 per TensorRT 8.2 o versioni precedenti (DeepStream 6.0.1 e precedenti). Per maggiori dettagli sulla conversione del modello, dai un'occhiata alla nostra sezione di esportazione del modello.

  • Per eseguire l'inferenza INT8, calibra il modello su un set rappresentativo di immagini e imposta la configurazione di DeepStream sulla modalità INT8. Scarica le immagini COCO val2017, seleziona circa 1000 immagini per la calibrazione, imposta le variabili d'ambiente INT8_CALIB_IMG_PATH e INT8_CALIB_BATCH_SIZE, quindi aggiorna config_infer_primary_yolo26.txt con model-engine-file=model_b1_gpu0_int8.engine, int8-calib-file=calib.table e network-mode=1. Consulta la sezione Calibrazione INT8 per la procedura completa. Attualmente INT8 richiede TensorRT 8.x.

  • Per elaborare più flussi in una singola applicazione DeepStream, modifica il file deepstream_app_config.txt per aggiungere una griglia di visualizzazione affiancata ed elencare l'URI di ogni sorgente. Imposta rows e columns in [tiled-display] per creare la griglia, aggiungi un gruppo [sourceN] separato per ogni flusso con il proprio uri e num-sources=1, quindi adatta la griglia al numero di flussi. Consulta la sezione Configurazione multistream per un esempio completo.

  • Le prestazioni dei modelli YOLO11 su NVIDIA Jetson Orin NX 16GB variano in base ai livelli di precisione TensorRT. Ad esempio, i modelli YOLO11s raggiungono:

    • Precisione FP32: 14.53 ms/im, 68.8 FPS
    • Precisione FP16: 7.91 ms/im, 126 FPS
    • Precisione INT8: 6.05 ms/im, 165 FPS

    Questi benchmark evidenziano l'efficienza e le capacità dei modelli YOLO11 ottimizzati con TensorRT sull'hardware NVIDIA Jetson. Per ulteriori dettagli, consulta la nostra sezione Risultati dei benchmark.

Commenti