Link to this sectionEsportazione del modello con Ultralytics YOLO#
Link to this sectionIntroduzione#
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 🚀
Link to this sectionPerché scegliere la modalità di esportazione di YOLO26?#
- Versatilità: Esporta in molteplici formati inclusi ONNX, TensorRT, CoreML e altri.
- Prestazioni: Ottieni fino a 5x di accelerazione GPU con TensorRT e 3x di accelerazione CPU con ONNX o OpenVINO.
- Compatibilità: Rendi il tuo modello universalmente distribuibile su numerosi ambienti hardware e software.
- Facilità d'uso: Semplici API CLI e Python per un'esportazione rapida e intuitiva del modello.
Link to this sectionFunzionalità chiave della modalità di esportazione#
Ecco alcune delle funzionalità più importanti:
- Esportazione con un clic: Comandi semplici per esportare in diversi formati.
- Esportazione batch: Esporta modelli in grado di gestire inferenze 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.
Link to this sectionEsempi 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")Link to this sectionArgomenti#
Questa tabella descrive in dettaglio le configurazioni e le opzioni disponibili per l'esportazione di 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 garantisce che il modello sia pronto per la distribuzione nell'applicazione prevista con un'efficienza ottimale.
| 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 deployment. |
imgsz | int o tuple | 640 | Dimensione dell'immagine desiderata per l'input del modello. Può essere un intero per immagini quadrate (es. 640 per 640×640) o una tupla (height, width) per dimensioni specifiche. |
keras | bool | False | Abilita l'esportazione in formato Keras per TensorFlow SavedModel, fornendo compatibilità con TensorFlow serving e API. |
optimize | bool | False | Applica l'ottimizzazione per dispositivi mobili durante l'esportazione in TorchScript, riducendo potenzialmente la dimensione del modello e migliorando le prestazioni di inferenza. Non compatibile con formato NCNN o dispositivi CUDA. Per DEEPX, abilita un'ottimizzazione del compilatore superiore che riduce la latenza di inferenza e aumenta il tempo di compilazione. |
half | bool | False | Abilita la quantizzazione FP16 (precisione dimezzata), riducendo la dimensione del modello e potenzialmente accelerando l'inferenza su hardware supportato. Non compatibile con quantizzazione INT8 o esportazioni solo CPU. Disponibile solo per determinati formati, ad es. ONNX (vedi sotto). |
int8 | bool | False | Attiva la quantizzazione INT8, comprimendo ulteriormente il modello e velocizzando l'inferenza con una perdita di precisione minima, principalmente per edge devices. TensorRT 11+ utilizza la quantizzazione esplicita Q/DQ di ModelOpt; TensorRT 7-10 utilizza PTQ con un calibratore. |
dynamic | bool | False | Consente dimensioni di input dinamiche per esportazioni TorchScript, ONNX, OpenVINO, TensorRT e CoreML, aumentando la flessibilità nella gestione di dimensioni di immagini variabili. |
simplify | bool | True | Semplifica il grafo del modello per esportazioni ONNX con onnxslim, potenzialmente migliorando 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 dello spazio di lavoro in GiB per le ottimizzazioni TensorRT, bilanciando utilizzo della memoria e prestazioni. Usa None per l'allocazione automatica da parte di TensorRT fino al massimo del 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 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à simultaneamente in modalità predict. Per le esportazioni Edge TPU, questo è 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), oppure DLA per NVIDIA Jetson (device=dla:0 o device=dla:1). Le esportazioni TensorRT utilizzano automaticamente la GPU, ma TensorRT 11.0 non supporta DLA. |
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 la calibrazione su un sottoinsieme del dataset completo, 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). Impostarlo su False ti consente di esportare questi modelli per renderli compatibili con la tradizionale pipeline di post-elaborazione basata su NMS. Vedi la guida al Rilevamento End-to-End per i dettagli. |
La regolazione di questi parametri consente la personalizzazione del 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 appropriati è essenziale per ottenere il miglior equilibrio tra dimensioni, velocità e accuratezza del modello.
Link to this sectionFormati di esportazione#
I formati di esportazione YOLO26 disponibili sono nella tabella sottostante. Puoi esportare in qualsiasi formato usando l'argomento format, ad esempio format='onnx' o format='engine'. Puoi eseguire previsioni o validazioni direttamente sui modelli esportati, ad esempio yolo predict model=yolo26n.onnx. Esempi di utilizzo vengono mostrati per il tuo modello dopo il completamento dell'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, int8, dynamic, simplify, opset, nms, batch, data, fraction, 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, int8, data, fraction, 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 |
| Qualcomm QNN | qnn | yolo26n_qnn_model/ | ✅ | imgsz, batch, name, int8, data, fraction, device |
Link to this sectionFAQ#
Link to this sectionCome esporto un modello YOLO26 in formato ONNX?#
Esportare un modello YOLO26 in formato ONNX è semplice con Ultralytics. Offre sia metodi Python che CLI per esportare i 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 ulteriori dettagli sul processo, incluse le opzioni avanzate come la gestione di dimensioni di input diverse, consulta la guida all'integrazione ONNX.
Link to this sectionQuali sono i vantaggi dell'utilizzo di TensorRT per l'esportazione del modello?#
L'utilizzo di TensorRT per l'esportazione del modello offre significativi miglioramenti delle prestazioni. I modelli YOLO26 esportati in TensorRT possono ottenere un'accelerazione GPU fino a 5x, rendendoli ideali per applicazioni di inferenza in tempo reale.
- Versatilità: Ottimizza i modelli per una specifica configurazione hardware.
- Velocità: Ottieni un'inferenza più rapida grazie a ottimizzazioni avanzate.
- Compatibilità: Integra senza problemi con hardware NVIDIA.
Per saperne di più sull'integrazione di TensorRT, consulta la guida all'integrazione TensorRT.
Link to this sectionCome abilito la quantizzazione INT8 durante l'esportazione del mio modello YOLO26?#
La quantizzazione INT8 è un ottimo modo per comprimere il modello e accelerare 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="onnx", int8=True, data="coco8.yaml")La quantizzazione INT8 può essere applicata a vari formati, come ONNX, TensorRT, OpenVINO, CoreML e Rockchip RKNN. Per risultati di quantizzazione ottimali, fornisci un dataset rappresentativo utilizzando il parametro data.
Link to this sectionPerché la dimensione di input dinamica è importante durante l'esportazione dei modelli?#
La dimensione di input dinamica consente al modello esportato di gestire dimensioni d'immagine variabili, fornendo flessibilità e ottimizzando l'efficienza di elaborazione per diversi casi d'uso. Quando si esporta in formati come ONNX o TensorRT, abilitare la dimensione di input dinamica garantisce che il modello possa adattarsi perfettamente a diverse forme di input.
Per abilitare questa funzionalità, 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 le applicazioni in cui le dimensioni dell'input possono variare, come nell'elaborazione video o quando si gestiscono immagini da diverse fonti.
Link to this sectionQuali 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 (es.onnx,torchscript,tensorflow).imgsz:Dimensione dell'immagine desiderata per l'input del modello (es.640o(height, width)).half:Abilita la quantizzazione FP16, riducendo le dimensioni del modello e accelerando potenzialmente l'inferenza.optimize:Applica ottimizzazioni specifiche per ambienti mobili o vincolati.int8:Abilita la quantizzazione INT8, estremamente vantaggiosa per le distribuzioni 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.
Link to this sectionCosa rappresentano i tensori di output nei modelli YOLO esportati?#
Quando esporti un modello YOLO in formati come ONNX o TensorRT, la struttura del tensore di output dipende dal compito del modello. Comprendere questi output è importante per implementazioni di inferenza personalizzate.
Per i modelli di rilevamento (es. yolo26n.pt), l'output è tipicamente un singolo tensore con forma (batch_size, 4 + num_classes, num_predictions) dove i canali rappresentano le coordinate del riquadro più i punteggi per classe, e num_predictions dipende dalla risoluzione dell'input di esportazione (e può essere dinamico).
Per i modelli di segmentazione (es. yolo26n-seg.pt), solitamente otterrai due output: il primo tensore con forma (batch_size, 4 + num_classes + mask_dim, num_predictions) (riquadri, punteggi di classe e coefficienti di maschera) e il secondo tensore con forma (batch_size, mask_dim, proto_h, proto_w) contenente i prototipi di maschera utilizzati con i coefficienti per generare maschere di istanza. Le dimensioni dipendono dalla risoluzione dell'input di esportazione (e possono essere dinamiche).
Per i modelli di posa (es. yolo26n-pose.pt), il tensore di output è tipicamente modellato come (batch_size, 4 + num_classes + keypoint_dims, num_predictions), dove keypoint_dims dipende dalla specifica della posa (es. numero di keypoint e se è inclusa la confidenza), e num_predictions dipende dalla risoluzione dell'input di esportazione (e può essere dinamico).
Gli esempi negli esempi di inferenza ONNX dimostrano come elaborare questi output per ciascun tipo di modello.
Link to this sectionPerché output0 è in FP32 quando si esporta con half=True e end2end=True?#
Quando si esporta 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, la post-elaborazione (inclusi gli indici di classe) viene incorporata direttamente nel grafo esportato.
Il tensore output0 contiene indici di classe, che sono rappresentati internamente come valori in virgola mobile. FP16 non può rappresentare in modo affidabile valori interi superiori a 2048 a causa della sua precisione limitata 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 deve essere preservata la fedeltà dell'indice di classe.
Se sono richiesti output FP16 completi, esporta con end2end=False ed esegui la post-elaborazione esternamente.