Esportazione del modello con Ultralytics YOLO
Introduzione
L'obiettivo finale dell'addestramento di un modello è distribuirlo per applicazioni nel mondo reale. La modalità di esportazione in Ultralytics YOLO26 offre una gamma versatile di opzioni per esportare il tuo modello addestrato in diversi formati, rendendolo distribuibile su varie piattaforme e dispositivi. Questa guida completa mira ad accompagnarti attraverso le sfumature dell'esportazione del modello, mostrando come ottenere la massima compatibilità e prestazioni.
Watch: How to Export Ultralytics YOLO26 in different formats for Deployment | ONNX, TensorRT, CoreML 🚀
Perché scegliere la modalità di esportazione di YOLO26?
- Versatilità: Esporta in molteplici formati tra cui ONNX, TensorRT, CoreML e altri.
- Prestazioni: Ottieni un incremento di velocità fino a 5x su GPU con TensorRT e 3x su CPU con ONNX o OpenVINO.
- Compatibilità: Rendi il tuo modello universalmente distribuibile su numerosi ambienti hardware e software.
- Facilità d'uso: CLI semplice e API Python per un'esportazione del modello rapida e diretta.
Caratteristiche principali della modalità di esportazione
Ecco alcune delle funzionalità di spicco:
- Esportazione con un clic: Comandi semplici per l'esportazione in diversi formati.
- Esportazione in batch: Esporta modelli capaci di inferenza in batch.
- Inferenza ottimizzata: I modelli esportati sono ottimizzati per tempi di inferenza più rapidi.
- Video tutorial: Guide approfondite e tutorial per un'esperienza di esportazione fluida.
Esempi di utilizzo
Esporta un modello YOLO26n in un formato diverso come ONNX o TensorRT. Consulta la sezione Argomenti qui sotto per un elenco completo degli argomenti di esportazione.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom-trained model
# Export the model
model.export(format="onnx")Argomenti
Questa tabella dettaglia le configurazioni e le opzioni disponibili per l'esportazione dei modelli YOLO in diversi formati. Queste impostazioni sono fondamentali per ottimizzare le prestazioni, le dimensioni e la compatibilità del modello esportato su varie piattaforme e ambienti. Una configurazione corretta assicura che il modello sia pronto per la distribuzione nell'applicazione desiderata con la massima efficienza.
| Argomento | Tipo | Predefinito | Descrizione |
|---|---|---|---|
format | str | 'torchscript' | Formato di destinazione per il modello esportato, come 'onnx', 'torchscript', 'engine' (TensorRT) o altri. Ogni formato abilita la compatibilità con diversi ambienti di distribuzione. |
imgsz | int o tuple | 640 | Dimensione dell'immagine desiderata per l'input del modello. Può essere un numero intero per immagini quadrate (es. 640 per 640×640) o una tupla (height, width) per dimensioni specifiche. |
keras | bool | False | Abilita l'esportazione nel formato Keras per TensorFlow SavedModel, fornendo compatibilità con i servizi e le API di TensorFlow. |
optimize | bool | False | Applica l'ottimizzazione per dispositivi mobili durante l'esportazione in TorchScript, riducendo potenzialmente le dimensioni del modello e migliorando le prestazioni di inferenza. Non compatibile con il formato NCNN o dispositivi CUDA. Per DeepX, abilita una maggiore ottimizzazione del compilatore che riduce la latenza di inferenza e aumenta il tempo di compilazione. |
half | bool | False | Abilita la quantizzazione FP16 (mezza precisione), riducendo le dimensioni del modello e accelerando potenzialmente l'inferenza sull'hardware supportato. Non compatibile con la quantizzazione INT8 o esportazioni solo CPU. Disponibile solo per determinati formati, ad esempio ONNX (vedi sotto). |
int8 | bool | False | Attiva la quantizzazione INT8, comprimendo ulteriormente il modello e accelerando l'inferenza con una perdita minima di accuratezza, principalmente per edge device. Quando utilizzato con TensorRT, esegue la quantizzazione post-addestramento (PTQ). |
dynamic | bool | False | Consente dimensioni di input dinamiche per le esportazioni TorchScript, ONNX, OpenVINO, TensorRT e CoreML, migliorando la flessibilità nella gestione di dimensioni immagine variabili. Automaticamente impostato su True quando si utilizza TensorRT con INT8. |
simplify | bool | True | Semplifica il grafo del modello per le esportazioni ONNX con onnxslim, migliorando potenzialmente le prestazioni e la compatibilità con i motori di inferenza. |
opset | int | None | Specifica la versione dell'opset ONNX per la compatibilità con diversi parser e runtime ONNX. Se non impostato, utilizza l'ultima versione supportata. |
workspace | float o None | None | Imposta la dimensione massima dell'area di lavoro in GiB per le ottimizzazioni TensorRT, bilanciando l'utilizzo della memoria e le prestazioni. Usa None per l'allocazione automatica da parte di TensorRT fino al massimo consentito dal dispositivo. |
nms | bool | False | Aggiunge la Non-Maximum Suppression (NMS) al modello esportato quando supportata (vedi Formati di Esportazione), migliorando l'efficienza della post-elaborazione del rilevamento. Non disponibile per i modelli end2end. |
batch | int | 1 | Specifica la dimensione dell'inferenza in batch del modello esportato o il numero massimo di immagini che il modello esportato elaborerà contemporaneamente in modalità predict. Per le esportazioni Edge TPU, questo valore è impostato automaticamente su 1. |
device | str | None | Specifica il dispositivo per l'esportazione: GPU (device=0), CPU (device=cpu), MPS per Apple silicon (device=mps), Huawei Ascend NPU (device=npu o device=npu:0), o DLA per NVIDIA Jetson (device=dla:0 o device=dla:1). Le esportazioni TensorRT usano automaticamente la GPU. |
data | str | 'coco8.yaml' | Percorso al file di configurazione del dataset, essenziale per la calibrazione della quantizzazione INT8. Se non specificato con INT8 abilitato, coco8.yaml verrà utilizzato come fallback per la calibrazione. |
fraction | float | 1.0 | Specifica la frazione del dataset da utilizzare per la calibrazione della quantizzazione INT8. Consente di calibrare su un sottoinsieme dell'intero dataset, utile per esperimenti o quando le risorse sono limitate. Se non specificato con INT8 abilitato, verrà utilizzato l'intero dataset. |
end2end | bool | None | Sovrascrive la modalità end-to-end nei modelli YOLO che supportano l'inferenza senza NMS (YOLO26, YOLOv10). Impostandolo su False ti permette di esportare questi modelli rendendoli compatibili con la pipeline di post-elaborazione tradizionale basata su NMS. Vedi la guida al rilevamento End-to-End per i dettagli. |
La regolazione di questi parametri consente di personalizzare il processo di esportazione per soddisfare requisiti specifici, come l'ambiente di distribuzione, i vincoli hardware e gli obiettivi di prestazione. Selezionare il formato e le impostazioni appropriate è essenziale per ottenere il miglior equilibrio tra dimensioni del modello, velocità e precisione.
Formati di esportazione
I formati di esportazione disponibili per YOLO26 sono nella tabella sottostante. Puoi esportare in qualsiasi formato usando l'argomento format, ad esempio format='onnx' o format='engine'. Puoi eseguire predizioni o validazioni direttamente sui modelli esportati, ad esempio yolo predict model=yolo26n.onnx. Esempi di utilizzo vengono mostrati per il tuo modello una volta completata l'esportazione. I modelli possono anche essere esportati direttamente dal browser su Ultralytics Platform senza alcuna configurazione locale.
| Formato | Argomento format | Modello | Metadati | Argomenti |
|---|---|---|---|---|
| PyTorch | - | yolo26n.pt | ✅ | - |
| TorchScript | torchscript | yolo26n.torchscript | ✅ | imgsz, half, dynamic, optimize, nms, batch, device |
| ONNX | onnx | yolo26n.onnx | ✅ | imgsz, half, dynamic, simplify, opset, nms, batch, device |
| OpenVINO | openvino | yolo26n_openvino_model/ | ✅ | imgsz, half, dynamic, int8, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n.engine | ✅ | imgsz, half, dynamic, simplify, workspace, int8, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n.mlpackage | ✅ | imgsz, dynamic, half, int8, nms, batch, device |
| TF SavedModel | saved_model | yolo26n_saved_model/ | ✅ | imgsz, keras, int8, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n.pb | ❌ | imgsz, batch, device |
| TF Lite | tflite | yolo26n.tflite | ✅ | imgsz, half, int8, nms, batch, data, fraction, device |
| TF Edge TPU | edgetpu | yolo26n_edgetpu.tflite | ✅ | imgsz, int8, data, fraction, device |
| TF.js | tfjs | yolo26n_web_model/ | ✅ | imgsz, half, int8, nms, batch, data, fraction, device |
| PaddlePaddle | paddle | yolo26n_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n.mnn | ✅ | imgsz, batch, int8, half, device |
| NCNN | ncnn | yolo26n_ncnn_model/ | ✅ | imgsz, half, batch, device |
| IMX500 | imx | yolo26n_imx_model/ | ✅ | imgsz, int8, data, fraction, nms, device |
| RKNN | rknn | yolo26n_rknn_model/ | ✅ | imgsz, batch, name, device |
| ExecuTorch | executorch | yolo26n_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n_axelera_model/ | ✅ | imgsz, batch, int8, data, fraction, device |
| DeepX | deepx | yolo26n_deepx_model/ | ✅ | imgsz, int8, data, optimize, device |
FAQ
Come esporto un modello YOLO26 nel formato ONNX?
Esportare un modello YOLO26 nel formato ONNX è semplice con Ultralytics. Fornisce sia metodi Python che CLI per l'esportazione dei modelli.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom-trained model
# Export the model
model.export(format="onnx")Per maggiori dettagli sul processo, incluse opzioni avanzate come la gestione di dimensioni di input diverse, fai riferimento alla guida all'integrazione di ONNX.
Quali sono i vantaggi dell'utilizzo di TensorRT per l'esportazione del modello?
L'utilizzo di TensorRT per l'esportazione del modello offre miglioramenti significativi delle prestazioni. I modelli YOLO26 esportati in TensorRT possono ottenere fino a un incremento di velocità di 5x su GPU, rendendolo ideale per applicazioni di inferenza in tempo reale.
- Versatilità: Ottimizza i modelli per una configurazione hardware specifica.
- Velocità: Ottieni un'inferenza più rapida tramite ottimizzazioni avanzate.
- Compatibilità: Integra facilmente con l'hardware NVIDIA.
Per saperne di più sull'integrazione di TensorRT, consulta la guida all'integrazione di TensorRT.
Come abilito la quantizzazione INT8 quando esporto il mio modello YOLO26?
La quantizzazione INT8 è un ottimo modo per comprimere il modello e velocizzare l'inferenza, specialmente su dispositivi edge. Ecco come puoi abilitare la quantizzazione INT8:
from ultralytics import YOLO
model = YOLO("yolo26n.pt") # Load a model
model.export(format="engine", int8=True)La quantizzazione INT8 può essere applicata a vari formati, come TensorRT, OpenVINO e CoreML. Per risultati di quantizzazione ottimali, fornisci un dataset rappresentativo usando il parametro data.
Perché la dimensione di input dinamica è importante durante l'esportazione dei modelli?
La dimensione di input dinamica consente al modello esportato di gestire dimensioni dell'immagine variabili, fornendo flessibilità e ottimizzando l'efficienza di elaborazione per diversi casi d'uso. Quando esporti in formati come ONNX o TensorRT, abilitare la dimensione di input dinamica assicura che il modello possa adattarsi a diverse forme di input senza problemi.
Per abilitare questa funzione, usa il flag dynamic=True durante l'esportazione:
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
model.export(format="onnx", dynamic=True)Il ridimensionamento dinamico dell'input è particolarmente utile per applicazioni in cui le dimensioni dell'input possono variare, come nell'elaborazione video o quando si gestiscono immagini da fonti diverse.
Quali sono gli argomenti di esportazione chiave da considerare per ottimizzare le prestazioni del modello?
Comprendere e configurare gli argomenti di esportazione è cruciale per ottimizzare le prestazioni del modello:
format:Il formato di destinazione per il modello esportato (ad esempio,onnx,torchscript,tensorflow).imgsz:Desired image size for the model input (e.g.,640or(height, width)).half:Abilita la quantizzazione FP16, riducendo le dimensioni del modello e potenzialmente velocizzando l'inferenza.optimize:Applica ottimizzazioni specifiche per dispositivi mobili o ambienti vincolati.int8:Abilita la quantizzazione INT8, altamente vantaggiosa per distribuzioni di edge AI.
Per la distribuzione su piattaforme hardware specifiche, considera l'utilizzo di formati di esportazione specializzati come TensorRT per GPU NVIDIA, CoreML per dispositivi Apple, o Edge TPU per dispositivi Google Coral.
Cosa rappresentano i tensori di output nei modelli YOLO esportati?
Quando esporti un modello YOLO in formati come ONNX o TensorRT, la struttura dei tensori di output dipende dal compito del modello. Comprendere questi output è importante per implementazioni di inferenza personalizzate.
Per i modelli di rilevamento (ad esempio, yolo26n.pt), l'output è tipicamente un singolo tensore con forma (batch_size, 4 + num_classes, num_predictions) dove i canali rappresentano le coordinate delle bbox più i punteggi per classe, e num_predictions dipende dalla risoluzione di input dell'esportazione (e può essere dinamico).
Per i modelli di segmentazione (ad esempio, yolo26n-seg.pt), otterrai solitamente due output: il primo tensore con forma (batch_size, 4 + num_classes + mask_dim, num_predictions) (bbox, punteggi di classe e coefficienti della maschera), e il secondo tensore con forma (batch_size, mask_dim, proto_h, proto_w) contenente i prototipi della maschera usati con i coefficienti per generare maschere di istanza. Le dimensioni dipendono dalla risoluzione di input dell'esportazione (e possono essere dinamiche).
Per i modelli di posa (ad esempio, yolo26n-pose.pt), il tensore di output ha solitamente forma (batch_size, 4 + num_classes + keypoint_dims, num_predictions), dove keypoint_dims dipende dalla specifica della posa (ad esempio, numero di keypoint e se è inclusa la confidenza), e num_predictions dipende dalla risoluzione di input dell'esportazione (e può essere dinamico).
Gli esempi negli esempi di inferenza ONNX dimostrano come elaborare questi output per ogni tipo di modello.
Perché output0 è FP32 quando si esporta con half=True e end2end=True?
Quando esporti con half=True (o int8=True), la maggior parte dei tensori viene convertita in una precisione inferiore per ridurre le dimensioni del modello e migliorare le prestazioni. Tuttavia, quando end2end=True è abilitato, il post-processing (inclusi gli indici di classe) viene incorporato direttamente nel grafo esportato.
Il tensore output0 contiene indici di classe, che sono internamente rappresentati come valori a virgola mobile. FP16 non può rappresentare in modo affidabile valori interi superiori a 2048 a causa della sua limitata precisione della mantissa. Per evitare potenziali perdite di precisione o ID di classe errati, output0 viene intenzionalmente mantenuto in FP32.
Questo comportamento è previsto e si applica anche a esportazioni a bassa precisione o quantizzate in cui la fedeltà dell'indice di classe deve essere preservata.
Se sono richiesti output FP16 completi, esporta con end2end=False ed esegui il post-processing esternamente.