Skip to main content

Esportazione del modello con Ultralytics YOLO

Ultralytics YOLO ecosystem and integrations

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 a guidarti 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 inclusi ONNX, TensorRT, CoreML, e altri.
  • Prestazioni: Ottieni fino a 5x di velocizzazione GPU con TensorRT e 3x di velocizzazione 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 in grado di eseguire inferenze 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.
Suggerimento
  • Esporta in ONNX o OpenVINO per un incremento di velocità CPU fino a 3x.
  • Esporta in TensorRT per un incremento di velocità GPU fino a 5x.

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.

Esempio
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 critiche 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 prevista con un'efficienza ottimale.

ArgomentoTipoPredefinitoDescrizione
formatstr'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.
imgszint o tuple640Dimensione 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.
kerasboolFalseAbilita l'esportazione in formato Keras per TensorFlow SavedModel, fornendo compatibilità con il serving di TensorFlow e le sue API.
optimizeboolFalseApplica 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.
halfboolFalseAbilita la quantizzazione FP16 (precisione dimezzata), riducendo le dimensioni del modello e accelerando potenzialmente l'inferenza su hardware supportato. Non compatibile con la quantizzazione INT8 o esportazioni solo CPU. Disponibile solo per determinati formati, es. ONNX (vedi sotto).
int8boolFalseAttiva la quantizzazione INT8, comprimendo ulteriormente il modello e velocizzando l'inferenza con una perdita minima di accuratezza, principalmente per dispositivi edge. Quando usato con TensorRT, esegue la quantizzazione post-addestramento (PTQ).
dynamicboolFalseConsente dimensioni di input dinamiche per esportazioni TorchScript, ONNX, OpenVINO, TensorRT e CoreML, migliorando la flessibilità nella gestione di dimensioni d'immagine variabili. Impostato automaticamente su True quando si usa TensorRT con INT8.
simplifyboolTrueSemplifica il grafo del modello per esportazioni ONNX con onnxslim, potenzialmente migliorando le prestazioni e la compatibilità con i motori di inferenza.
opsetintNoneSpecifica la versione opset di ONNX per la compatibilità con diversi ONNX parser e runtime. Se non impostato, utilizza l'ultima versione supportata.
workspacefloat o NoneNoneImposta la dimensione massima dello spazio di lavoro in GiB per TensorRT ottimizzazioni, bilanciando l'utilizzo della memoria e le prestazioni. Usa None per l'auto-allocazione da parte di TensorRT fino al massimo del dispositivo.
nmsboolFalseAggiunge 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.
batchint1Specifica la dimensione dell'inferenza batch del modello esportato o il numero massimo di immagini che il modello esportato elaborerà simultaneamente in modalità predict . Per esportazioni su Edge TPU, questo è impostato automaticamente a 1.
devicestrNoneSpecifica il dispositivo per l'esportazione: GPU (device=0), CPU (device=cpu), MPS per silicio Apple (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.
datastr'coco8.yaml'Percorso verso il file di configurazione del dataset, essenziale per la calibrazione della quantizzazione INT8. Se non specificato con INT8 abilitato, coco8.yaml sarà usato come fallback per la calibrazione.
fractionfloat1.0Specifica 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 il dataset completo.
end2endboolNoneSovrascrive la modalità end-to-end nei modelli YOLO che supportano l'inferenza senza NMS (YOLO26, YOLOv10). Impostandolo su False ti consente di esportare questi modelli rendendoli compatibili con la tradizionale pipeline di post-elaborazione basata su NMS. Vedi la guida 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 appropriate è essenziale per ottenere il miglior equilibrio tra dimensioni del modello, velocità e accuratezza.

Formati di Esportazione

I formati di esportazione disponibili per YOLO26 sono nella tabella sottostante. Puoi esportare in qualsiasi formato usando l'argomento format , ad es. format='onnx' o format='engine'. Puoi eseguire previsioni o validazioni direttamente sui modelli esportati, ad es. yolo predict model=yolo26n.onnx. Gli 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.

Formatoformat ArgomentoModelloMetadatiArgomenti
PyTorch-yolo26n.pt-
TorchScripttorchscriptyolo26n.torchscriptimgsz, half, dynamic, optimize, nms, batch, device
ONNXonnxyolo26n.onnximgsz, half, dynamic, simplify, opset, nms, batch, device
OpenVINOopenvinoyolo26n_openvino_model/imgsz, half, dynamic, int8, nms, batch, data, fraction, device
TensorRTengineyolo26n.engineimgsz, half, dynamic, simplify, workspace, int8, nms, batch, data, fraction, device
CoreMLcoremlyolo26n.mlpackageimgsz, dynamic, half, int8, nms, batch, device
TF SavedModelsaved_modelyolo26n_saved_model/imgsz, keras, int8, nms, batch, data, fraction, device
TF GraphDefpbyolo26n.pbimgsz, batch, device
TF Litetfliteyolo26n.tfliteimgsz, half, int8, nms, batch, data, fraction, device
TF Edge TPUedgetpuyolo26n_edgetpu.tfliteimgsz, int8, data, fraction, device
TF.jstfjsyolo26n_web_model/imgsz, half, int8, nms, batch, data, fraction, device
PaddlePaddlepaddleyolo26n_paddle_model/imgsz, batch, device
MNNmnnyolo26n.mnnimgsz, batch, int8, half, device
NCNNncnnyolo26n_ncnn_model/imgsz, half, batch, device
IMX500imxyolo26n_imx_model/imgsz, int8, data, fraction, nms, device
RKNNrknnyolo26n_rknn_model/imgsz, batch, name, device
ExecuTorchexecutorchyolo26n_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n_axelera_model/imgsz, batch, int8, data, fraction, device

FAQ

Come esporto un modello YOLO26 nel formato ONNX?

Esportare un modello YOLO26 nel formato ONNX è semplice con Ultralytics. Mette a disposizione metodi Python e CLI per l'esportazione dei modelli.

Esempio
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 le opzioni avanzate come la gestione di diverse dimensioni di input, consulta la guida all'integrazione ONNX.

Quali sono i vantaggi dell'utilizzo di TensorRT per l'esportazione del modello?

L'utilizzo di TensorRT per l'esportazione dei modelli offre significativi miglioramenti delle prestazioni. I modelli YOLO26 esportati in TensorRT possono ottenere fino a 5x di velocizzazione della GPU, rendendoli ideali per applicazioni di inferenza in tempo reale.

  • Versatilità: Ottimizza i modelli per una specifica configurazione hardware.
  • Velocità: Ottieni un'inferenza più rapida tramite ottimizzazioni avanzate.
  • Compatibilità: Integra perfettamente con l'hardware NVIDIA.

Per saperne di più sull'integrazione di TensorRT, vedi la guida all'integrazione TensorRT.

Come abilito la quantizzazione INT8 durante l'esportazione del 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:

Esempio
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 parametro rappresentativo dataset utilizzando il data.

Perché la dimensione di input dinamica è importante quando si esportano i 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 perfettamente a diverse forme di input.

Per abilitare questa funzionalità, usa il flag dynamic=True durante l'esportazione:

Esempio
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 i principali argomenti di esportazione da considerare per ottimizzare le prestazioni del modello?

Comprendere e configurare gli argomenti di esportazione è fondamentale 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. 640 o (height, width)).
  • half: Abilita la quantizzazione FP16, riducendo le dimensioni del modello e velocizzando potenzialmente l'inferenza.
  • optimize: Applica ottimizzazioni specifiche per ambienti mobili o vincolati.
  • int8: Abilita la quantizzazione INT8, estremamente vantaggiosa per distribuzioni edge AI.

Per l'implementazione su specifiche piattaforme hardware, 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 del tensore di output dipende dal compito del modello. Comprendere questi output è importante per implementazioni di inferenza personalizzate.

Per modelli di rilevamento (es. yolo26n.pt), l'output è solitamente 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 di input dell'esportazione (e può essere dinamico).

Per 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 di input dell'esportazione (e possono essere dinamiche).

Per modelli di posa (es. yolo26n-pose.pt), il tensore di output è solitamente con forma (batch_size, 4 + num_classes + keypoint_dims, num_predictions), dove keypoint_dims dipende dalla specifica della posa (es. numero di keypoints 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 durante l'esportazione con half=True e end2end=True?

Quando si esporta con half=True (o int8=True), la maggior parte dei tensori viene convertita a 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) è incorporato direttamente nel grafo esportato.

Il output0 tensore contiene gli 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 mantenuto intenzionalmente in FP32.

Questo comportamento è previsto e si applica anche alle esportazioni a precisione inferiore 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 il post-processing esternamente.

Commenti