Un modello ONNX (Open Neural Network Exchange) nel mondo del deep learning Γ¨ un formato di scambio aperto e interoperabile per rappresentare reti neurali artificiali e modelli di apprendimento automatico. Questo formato Γ¨ stato sviluppato per consentire la portabilitΓ dei modelli tra diversi framework di machine learning, rendendo piΓΉ agevole la creazione, lβaddestramento e la distribuzione di modelli su diverse piattaforme e architetture hardware. Un modello ONNX Γ¨ un file che contiene le informazioni necessarie per descrivere l'architettura di una rete neurale, i pesi, i parametri, le operazioni e altro ancora.
ONNX Γ¨ stato sviluppato con lβobiettivo di superare le limitazioni legate alla compatibilitΓ tra i vari framework di deep learning. Prima dellβintroduzione di ONNX, i modelli addestrati con un framework specifico erano spesso difficili da utilizzare con un altro framework senza complesse operazioni di conversione. Questo era particolarmente problematico quando si dovevano utilizzare diversi framework per diverse fasi del processo di sviluppo di un modello, come la progettazione, lβaddestramento e lβimplementazione.
ONNX risolve questo problema fornendo uno standard aperto per rappresentare modelli di machine learning: ciò significa che è possibile creare un modello con un framework, addestrarlo e poi convertirlo in un formato ONNX, rendendolo così facilmente utilizzabile con un altro framework o applicazione che supporti ONNX.
Ora esamineremo come Γ¨ possibile esportare e importare modelli ONNX utilizzando esempi di codice in Python e C#. Per prima cosa, vediamo come esportare un modello ONNX in Python, utilizzando il framework PyTorch con TorchVision come esempio.
Esportazione di un modello PyTorch in formato ONNX:
import torch
import torchvision
# Carica un modello preaddestrato da torchvision
model = torchvision.models.resnet18(pretrained=True)
model.eval()
# Definisci l'input fittizio con le dimensioni corrette
dummy_input = torch.randn(1, 3, 224, 224)
# Esporta il modello in formato ONNX
onnx_file_path = "resnet18.onnx"
torch.onnx.export(model, dummy_input, onnx_file_path, verbose=True)
In questo esempio, abbiamo importato il modello di rete neurale ResNet-18 da torchvision e lβabbiamo esportato in formato ONNX utilizzando torch.onnx.export
.
Il file ONNX risultante conterrΓ lβarchitettura del modello, inclusi tutti i pesi e i parametri.
Ora vediamo come Γ¨ possibile importare un modello ONNX in C#. utilizzando la libreria ONNX Runtime.
Importazione di un modello ONNX in C#:
using System;
using Microsoft.ML.OnnxRuntime;
using Microsoft.ML.OnnxRuntime.Tensors;
class Program
{
static void Main()
{
// Percorso del file ONNX del modello
string modelPath = "resnet18.onnx";
// Crea una sessione ONNX
using (var session = new InferenceSession(modelPath))
{
// Crea un tensore di input con i dati desiderati
float[] inputData = new float[3 * 224 * 224]; // Adattare alle dimensioni del modello
var inputTensor = new DenseTensor<float>(inputData, new int[] { 1, 3, 224, 224 });
// Esegui l'inferenza
var inputs = new NamedOnnxValue[] { NamedOnnxValue.CreateFromTensor("input", inputTensor) };
var results = session.Run(inputs);
// Estrai il tensore di output
var outputTensor = results.FirstOrDefault().AsTensor<float>();
// Puoi ora lavorare con i risultati
Console.WriteLine("Output shape: " + string.Join(", ", outputTensor.Dimensions));
}
}
}
In questo esempio, abbiamo utilizzato la libreria ONNX Runtime in C# per importare un modello ONNX precedentemente esportato. Abbiamo creato una sessione ONNX, fornito dati di input (un tensore) e ottenuto risultati in forma di tensore di output. Questi risultati possono essere ulteriormente elaborati o utilizzati per le operazioni successive.
Γ importante notare che le dimensioni del tensore di input devono corrispondere alle dimensioni di input specificate durante lβesportazione del modello. Inoltre, il nome dellβinput βinputβ nel codice C# deve corrispondere al nome specificato durante lβesportazione del modello.
ONNX offre unβinterfaccia standard per esportare e importare modelli di machine learning, il che semplifica notevolmente il processo di integrazione dei modelli in diverse applicazioni e framework. Γ importante notare che ONNX Γ¨ supportato da una vasta gamma di framework e librerie di machine learning, il che lo rende una scelta eccellente per garantire la portabilitΓ dei modelli in ambienti diversi.