Glossario

ONNX (Open Neural Network Exchange)

Scopri come ONNX migliora la portabilità e l'interoperabilità dei modelli di AI, consentendo l'implementazione senza problemi dei modelli di Ultralytics YOLO su diverse piattaforme.

Addestra i modelli YOLO semplicemente
con Ultralytics HUB

Per saperne di più

Nel campo in rapida evoluzione dell'intelligenza artificiale (AI) e dell'apprendimento automatico (ML), spostare i modelli tra diversi strumenti e piattaforme in modo efficiente è fondamentale. ONNX (Open Neural Network Exchange) affronta questa sfida fornendo un formato open-source progettato appositamente per i modelli di intelligenza artificiale. Funge da traduttore universale, consentendo agli sviluppatori di addestrare un modello in un framework, come ad esempio PyTorche poi distribuirlo con un altro framework o motore di inferenza, come ad esempio TensorFlow o runtime specializzati come ONNX Runtime. Questa interoperabilità semplifica il percorso dalla ricerca alla produzione, favorendo la collaborazione e la flessibilità all'interno dell'ecosistema AI. ONNX è stato inizialmente sviluppato da Facebook AI Research e Microsoft Research ed è ora un fiorente progetto comunitario.

Rilevanza di ONNX

Il valore principale di ONNX consiste nella promozione di portabilità e interoperabilità nel ciclo di vita dello sviluppo dell'intelligenza artificiale. Invece di essere bloccati nell'ecosistema di un framework specifico, gli sviluppatori possono sfruttare ONNX per spostare liberamente i modelli tra diversi strumenti e piattaforme hardware. Definendo un insieme comune di operatori (gli elementi costitutivi di reti neurali) e un formato di file standard (.onnx), ONNX assicura che la struttura e i parametri appresi di un modello (pesi) sono rappresentati in modo coerente. Questo è particolarmente vantaggioso per gli utenti di Ultralytics YOLO modelli, in quanto Ultralytics offre metodi semplici per esportare i modelli in formato ONNX. Questa funzionalità di esportazione consente agli utenti di prendere modelli come YOLOv8 o il più recente YOLO11 e distribuirli su un'ampia varietà di piattaforme hardware e software, spesso utilizzando sistemi ottimizzati per la gestione del traffico. motori di inferenza per migliorare le prestazioni e accelerazione hardware.

Come funziona ONNX

ONNX raggiunge l'interoperabilità grazie a diverse caratteristiche tecniche chiave:

  • Rappresentazione comune del modello: ONNX definisce un insieme standard di operatori grafici computazionali, come le funzioni di convoluzione o di attivazione, e un sistema di tipi di dati comune. Quando un modello di deep learning viene convertito in ONNX, la sua architettura e i suoi parametri vengono tradotti in questa rappresentazione condivisa.
  • Struttura a grafo: I modelli in ONNX sono rappresentati come grafi computazionali. I nodi del grafo rappresentano le operazioni (come la moltiplicazione di matrici o l'applicazione di una funzione ReLU), mentre i bordi rappresentano il flusso di dati (tensori) tra queste operazioni. Questa struttura a grafo è comune a molti framework di ML e facilita la conversione.
  • Sistema di versioni: ONNX mantiene delle versioni per i suoi set di operatori (opsets). Questo garantisce la retrocompatibilità, consentendo ai modelli creati con opset più vecchi di funzionare su runtime più recenti che supportano tali versioni.
  • Estensibilità: Sebbene ONNX definisca un insieme di operatori di base, consente anche di utilizzare operatori personalizzati, permettendo ai framework e ai fornitori di hardware di supportare funzionalità specializzate.
  • Ecosistema e strumenti: Un ricco ecosistema circonda ONNX, comprese le librerie per convertire i modelli da vari framework (come ad esempio PyTorch o TensorFlow), strumenti per la visualizzazione e il debug dei grafi ONNX e runtime come ONNX Runtime ottimizzato per un'inferenza ad alte prestazioni su hardware diversi (CPU, GPU, acceleratori specializzati).

Applicazioni di ONNX

ONNX funge da ponte cruciale tra gli ambienti di formazione del modello e i diversi obiettivi di implementazione. Ecco due esempi concreti:

  1. Distribuzione di modelli di computer vision su dispositivi edge: Uno sviluppatore addestra un modello di rilevamento degli oggetti, come ad esempio il modelloYOLO di Ultralytics , utilizzando PyTorch su un server potente con GPU. Per la distribuzione su dispositivi edge con risorse limitate (come una smart camera o un drone), esporta il modello in formato ONNX . Questo file ONNX può essere ottimizzato con strumenti come NVIDIA TensorRT o OpenVINO diIntel e distribuito per un'inferenza efficiente e in tempo reale direttamente sul dispositivo. Questa flessibilità è evidenziata dalle varie opzioni di distribuzione dei modelli. Puoi esplorare le soluzioniUltralytics per trovare esempi in diversi settori.
  2. Collaborazione e distribuzione cross-framework: Un team di ricerca sviluppa una nuova architettura di modelli utilizzando TensorFlow. Un altro team vuole integrare questo modello in un'applicazione esistente costruita con PyTorch. Esportando il modello TensorFlow in ONNX, il secondo team può facilmente caricarlo e utilizzarlo all'interno del proprio ambiente PyTorch o distribuirlo utilizzando il RuntimeONNX standardizzato su diverse configurazioni di server(cloud o on-premise) senza dover ricorrere al framework TensorFlow originale. In questo modo si facilita il servizio e l'integrazione dei modelli.

ONNX vs. concetti correlati

È importante distinguere ONNX dai termini correlati:

  • Formati specifici del framework: Formati come quello di PyTorch .pt/.pth o SavedModel di TensorFlow sono nativi dei rispettivi framework. ONNX funge da intermediario, consentendo la conversione tra questi formati o la distribuzione tramite un runtime comune. TorchScript è un altro formato per la serializzazione dei modelli PyTorch , talvolta utilizzato come alternativa o precursore dell'esportazione ONNX .
  • Motori di inferenza/Runtime: Strumenti come ONNX Runtime, TensorRTe OpenVINO sono librerie software progettate per eseguire in modo efficiente i modelli ML. Molti di questi motori possono consumare modelli ONNX , spesso applicando ulteriori ottimizzazioni (come la quantizzazione o la fusione di grafi) per specifici target hardware. ONNX fornisce l'input del modello standardizzato per questi motori.

In sintesi, ONNX è uno standard fondamentale per garantire la flessibilità e l'interoperabilità nella pipeline delle operazioni di machine learning (MLOps), consentendo agli sviluppatori di scegliere gli strumenti migliori per l'addestramento e la distribuzione senza essere vincolati dalle limitazioni del framework. Piattaforme come Ultralytics HUB sfruttano questi formati per semplificare il percorso dallo sviluppo del modello all'applicazione nel mondo reale.

Leggi tutto