Vai al contenuto

Esportazione ONNX per modelli YOLO11

Spesso, quando si implementano modelli di computer vision, è necessario un formato di modello che sia flessibile e compatibile con più piattaforme.

L'esportazione di modelli Ultralytics YOLO11 in formato ONNX semplifica l'implementazione e garantisce prestazioni ottimali in vari ambienti. Questa guida ti mostrerà come convertire facilmente i tuoi modelli YOLO11 in ONNX e migliorare la loro scalabilità ed efficacia nelle applicazioni del mondo reale.

ONNX e ONNX Runtime

ONNX, acronimo di Open Neural Network Exchange, è un progetto comunitario inizialmente sviluppato da Facebook e Microsoft. L'ulteriore sviluppo di ONNX è un impegno collaborativo supportato da varie organizzazioni come IBM, Amazon (tramite AWS) e Google. L'obiettivo del progetto è creare un formato di file aperto progettato per rappresentare i modelli di machine learning in modo da consentirne l'utilizzo su diversi framework di intelligenza artificiale e hardware.

I modelli ONNX possono essere utilizzati per passare da un framework all'altro senza problemi. Ad esempio, un modello di deep learning addestrato in PyTorch può essere esportato in formato ONNX e quindi facilmente importato in TensorFlow.

ONNX

In alternativa, i modelli ONNX possono essere utilizzati con ONNX Runtime. ONNX Runtime è un versatile acceleratore multipiattaforma per modelli di machine learning compatibile con framework come PyTorch, TensorFlow, TFLite, scikit-learn, ecc.

ONNX Runtime ottimizza l'esecuzione dei modelli ONNX sfruttando le capacità specifiche dell'hardware. Questa ottimizzazione consente ai modelli di funzionare in modo efficiente e con prestazioni elevate su varie piattaforme hardware, tra cui CPU, GPU e acceleratori specializzati.

ONNX con ONNX Runtime

Sia che venga utilizzato indipendentemente o in combinazione con ONNX Runtime, ONNX fornisce una soluzione flessibile per la compatibilità e il deployment dei modelli di machine learning.

Caratteristiche principali dei modelli ONNX

La capacità di ONNX di gestire vari formati può essere attribuita alle seguenti caratteristiche chiave:

  • Rappresentazione comune del modello: ONNX definisce un insieme comune di operatori (come convoluzioni, livelli, ecc.) e un formato dati standard. Quando un modello viene convertito in formato ONNX, la sua architettura e i suoi pesi vengono tradotti in questa rappresentazione comune. Questa uniformità garantisce che il modello possa essere compreso da qualsiasi framework che supporti ONNX.

  • Versioning e compatibilità con le versioni precedenti: ONNX mantiene un sistema di versioning per i suoi operatori. Ciò garantisce che, anche con l'evolversi dello standard, i modelli creati nelle versioni precedenti rimangano utilizzabili. La compatibilità con le versioni precedenti è una caratteristica fondamentale che impedisce ai modelli di diventare rapidamente obsoleti.

  • Rappresentazione del modello basata su grafi: ONNX rappresenta i modelli come grafi computazionali. Questa struttura basata su grafi è un modo universale di rappresentare i modelli di machine learning, in cui i nodi rappresentano operazioni o calcoli e gli archi rappresentano i tensor che scorrono tra di essi. Questo formato è facilmente adattabile a vari framework che rappresentano anche i modelli come grafi.

  • Strumenti ed ecosistema: Esiste un ricco ecosistema di strumenti intorno a ONNX che assistono nella conversione, visualizzazione e ottimizzazione dei modelli. Questi strumenti semplificano il lavoro degli sviluppatori con i modelli ONNX e la conversione dei modelli tra diversi framework senza problemi.

Uso comune di ONNX

Prima di esaminare come esportare i modelli YOLO11 in formato ONNX, diamo un'occhiata a dove vengono solitamente utilizzati i modelli ONNX.

Implementazione su CPU

I modelli ONNX vengono spesso distribuiti su CPU grazie alla loro compatibilità con ONNX Runtime. Questo runtime è ottimizzato per l'esecuzione su CPU. Migliora significativamente la velocità di inferenza e rende fattibili i deployment su CPU in tempo reale.

Opzioni di implementazione supportate

Sebbene i modelli ONNX siano comunemente utilizzati su CPU, possono anche essere distribuiti sulle seguenti piattaforme:

  • Accelerazione GPU: ONNX supporta completamente l'accelerazione GPU, in particolare NVIDIA CUDA. Ciò consente un'esecuzione efficiente su GPU NVIDIA per attività che richiedono un'elevata potenza di calcolo.

  • Dispositivi edge e mobili: ONNX si estende ai dispositivi edge e mobili, perfetto per scenari di inferenza on-device e in tempo reale. È leggero e compatibile con l'hardware edge.

  • Browser web: ONNX può essere eseguito direttamente nei browser web, alimentando applicazioni di intelligenza artificiale interattive e dinamiche basate sul web.

Esportazione di modelli YOLO11 in ONNX

È possibile espandere la compatibilità del modello e la flessibilità di implementazione convertendo i modelli YOLO11 in formato ONNX. Ultralytics YOLO11 fornisce un processo di esportazione semplice che può migliorare significativamente le prestazioni del tuo modello su diverse piattaforme.

Installazione

Per installare il pacchetto richiesto, esegui:

Installazione

# Install the required package for YOLO11
pip install ultralytics

Per istruzioni dettagliate e best practice relative al processo di installazione, consulta la nostra guida all'installazione di YOLO11. Durante l'installazione dei pacchetti richiesti per YOLO11, in caso di difficoltà, consulta la nostra guida ai problemi comuni per soluzioni e suggerimenti.

Utilizzo

Prima di immergerti nelle istruzioni per l'uso, assicurati di controllare la gamma di modelli YOLO11 offerti da Ultralytics. Questo ti aiuterà a scegliere il modello più appropriato per le esigenze del tuo progetto.

Utilizzo

from ultralytics import YOLO

# Load the YOLO11 model
model = YOLO("yolo11n.pt")

# Export the model to ONNX format
model.export(format="onnx")  # creates 'yolo11n.onnx'

# Load the exported ONNX model
onnx_model = YOLO("yolo11n.onnx")

# Run inference
results = onnx_model("https://ultralytics.com/images/bus.jpg")
# Export a YOLO11n PyTorch model to ONNX format
yolo export model=yolo11n.pt format=onnx # creates 'yolo11n.onnx'

# Run inference with the exported model
yolo predict model=yolo11n.onnx source='https://ultralytics.com/images/bus.jpg'

Argomenti di esportazione

Quando si esporta il modello YOLO11 in formato ONNX, è possibile personalizzare il processo utilizzando vari argomenti per ottimizzare le esigenze specifiche di implementazione:

Argomento Tipo Predefinito Descrizione
format str 'onnx' Formato di destinazione per il modello esportato, che definisce la compatibilità con vari ambienti di distribuzione.
imgsz int oppure tuple 640 Dimensione dell'immagine desiderata per l'input del modello. Può essere un numero intero per immagini quadrate o una tupla (height, width) per dimensioni specifiche.
half bool False Abilita la quantizzazione FP16 (mezza precisione), riducendo le dimensioni del modello e potenzialmente accelerando l'inferenza su hardware supportato.
dynamic bool False Consente dimensioni di input dinamiche, migliorando la flessibilità nella gestione di diverse dimensioni delle immagini.
simplify bool True Semplifica il grafo del modello con onnxslim, migliorando potenzialmente le prestazioni e la compatibilità.
opset int None Specifica la versione di ONNX opset per la compatibilità con diversi parser e runtime ONNX. Se non impostato, utilizza l'ultima versione supportata.
nms bool False Aggiunge la Non-Maximum Suppression (NMS), essenziale per una post-elaborazione del rilevamento accurata ed efficiente.
batch int 1 Specifica la dimensione del batch di inferenza del modello di esportazione o il numero massimo di immagini che il modello esportato elaborerà contemporaneamente in modalità predict .
device str None Specifica il dispositivo per l'esportazione: GPU (device=0), CPU (device=cpu), MPS per Apple silicon (device=mps).

Per maggiori dettagli sul processo di esportazione, visita la pagina della documentazione di Ultralytics sull'esportazione.

Implementazione di modelli YOLO11 ONNX esportati

Una volta esportati correttamente i modelli Ultralytics YOLO11 in formato ONNX, il passo successivo è distribuire questi modelli in vari ambienti. Per istruzioni dettagliate sulla distribuzione dei modelli ONNX, consulta le seguenti risorse:

  • Documentazione dell'API python di ONNX Runtime: questa guida fornisce informazioni essenziali per il caricamento e l'esecuzione di modelli ONNX utilizzando ONNX Runtime.

  • Distribuzione su dispositivi edge: consulta questa pagina di documentazione per diversi esempi di distribuzione di modelli ONNX su edge.

  • Tutorial ONNX su GitHub: una raccolta di tutorial completi che trattano vari aspetti dell'utilizzo e dell'implementazione di modelli ONNX in diversi scenari.

  • Triton Inference Server: Scopri come distribuire i tuoi modelli ONNX con il Triton Inference Server di NVIDIA per implementazioni scalabili ad alte prestazioni.

Riepilogo

In questa guida, hai imparato come esportare i modelli Ultralytics YOLO11 in formato ONNX per aumentarne l'interoperabilità e le prestazioni su varie piattaforme. Ti sono state presentate anche le opzioni di deployment di ONNX Runtime e ONNX.

L'esportazione ONNX è solo uno dei tanti formati di esportazione supportati da Ultralytics YOLO11, che consente di implementare i modelli praticamente in qualsiasi ambiente. A seconda delle esigenze specifiche, si potrebbe anche voler esplorare altre opzioni di esportazione come TensorRT per le massime prestazioni della GPU o CoreML per i dispositivi Apple.

Per ulteriori dettagli sull'utilizzo, visita la documentazione ufficiale di ONNX.

Inoltre, se desideri saperne di più su altre integrazioni di Ultralytics YOLO11, visita la nostra pagina della guida all'integrazione. Lì troverai molte risorse e approfondimenti utili.

FAQ

Come posso esportare i modelli YOLO11 in formato ONNX utilizzando Ultralytics?

Per esportare i tuoi modelli YOLO11 in formato ONNX utilizzando Ultralytics, segui questi passaggi:

Utilizzo

from ultralytics import YOLO

# Load the YOLO11 model
model = YOLO("yolo11n.pt")

# Export the model to ONNX format
model.export(format="onnx")  # creates 'yolo11n.onnx'

# Load the exported ONNX model
onnx_model = YOLO("yolo11n.onnx")

# Run inference
results = onnx_model("https://ultralytics.com/images/bus.jpg")
# Export a YOLO11n PyTorch model to ONNX format
yolo export model=yolo11n.pt format=onnx # creates 'yolo11n.onnx'

# Run inference with the exported model
yolo predict model=yolo11n.onnx source='https://ultralytics.com/images/bus.jpg'

Per maggiori dettagli, visita la documentazione sull'export.

Quali sono i vantaggi dell'utilizzo di ONNX Runtime per l'implementazione di modelli YOLO11?

L'utilizzo di ONNX Runtime per il deployment di modelli YOLO11 offre diversi vantaggi:

  • Compatibilità cross-platform: ONNX Runtime supporta diverse piattaforme, come Windows, macOS e Linux, garantendo che i tuoi modelli funzionino senza problemi in ambienti diversi.
  • Accelerazione hardware: ONNX Runtime può sfruttare ottimizzazioni specifiche dell'hardware per CPU, GPU e acceleratori dedicati, fornendo inferenze ad alte prestazioni.
  • Interoperabilità del framework: I modelli addestrati in framework popolari come PyTorch o TensorFlow possono essere facilmente convertiti in formato ONNX ed eseguiti utilizzando ONNX Runtime.
  • Ottimizzazione delle prestazioni: ONNX Runtime può fornire un aumento di velocità della CPU fino a 3 volte rispetto ai modelli nativi di PyTorch, rendendolo ideale per scenari di implementazione in cui le risorse GPU sono limitate.

Per saperne di più, consulta la documentazione di ONNX Runtime.

Quali opzioni di implementazione sono disponibili per i modelli YOLO11 esportati in ONNX?

I modelli YOLO11 esportati in ONNX possono essere distribuiti su varie piattaforme, tra cui:

  • CPU: Utilizzo di ONNX Runtime per un'inferenza CPU ottimizzata.
  • GPU: Sfruttare NVIDIA CUDA per un'accelerazione GPU ad alte prestazioni.
  • Dispositivi edge: Esecuzione di modelli leggeri su dispositivi edge e mobili per inferenze in tempo reale direttamente sul dispositivo.
  • Browser web: Esecuzione di modelli direttamente all'interno dei browser web per applicazioni interattive basate sul web.
  • Servizi cloud: Distribuzione su piattaforme cloud che supportano il formato ONNX per l'inferenza scalabile.

Per maggiori informazioni, consulta la nostra guida sulle opzioni di deployment dei modelli.

Perché dovrei usare il formato ONNX per i modelli Ultralytics YOLO11?

L'utilizzo del formato ONNX per i modelli Ultralytics YOLO11 offre numerosi vantaggi:

  • Interoperabilità: ONNX consente di trasferire senza problemi i modelli tra diversi framework di machine learning.
  • Ottimizzazione delle prestazioni: ONNX Runtime può migliorare le prestazioni del modello utilizzando ottimizzazioni specifiche dell'hardware.
  • Flessibilità: ONNX supporta vari ambienti di deployment, consentendoti di utilizzare lo stesso modello su piattaforme diverse senza modifiche.
  • Standardizzazione: ONNX fornisce un formato standardizzato ampiamente supportato nel settore, garantendo la compatibilità a lungo termine.

Consulta la guida completa sull'esportazione di modelli YOLO11 in ONNX.

Come posso risolvere i problemi durante l'esportazione di modelli YOLO11 in ONNX?

Quando si esportano modelli YOLO11 in ONNX, è possibile riscontrare problemi comuni come dipendenze non corrispondenti o operazioni non supportate. Per risolvere questi problemi:

  1. Verifica di aver installato la versione corretta delle dipendenze richieste.
  2. Consulta la documentazione ONNX ufficiale per gli operatori e le funzionalità supportate.
  3. Esamina i messaggi di errore per indizi e consulta la guida ai problemi comuni di Ultralytics.
  4. Prova a utilizzare diversi argomenti di esportazione come simplify=True o regolando il opset versione.
  5. Per problemi relativi alle dimensioni di input dinamiche, imposta dynamic=True durante l'esportazione.

Se i problemi persistono, contatta il supporto Ultralytics per ulteriore assistenza.



📅 Creato 1 anno fa ✏️ Aggiornato 4 mesi fa

Commenti