Vai al contenuto

Esportazione di modelli con Ultralytics YOLO

Ecosistema e integrazioni Ultralytics YOLO

Introduzione

L'obiettivo finale dell'addestramento di un modello è quello di implementarlo per applicazioni nel mondo reale. La modalità di esportazione in Ultralytics YOLO11 offre una gamma versatile di opzioni per esportare il modello addestrato in diversi formati, rendendolo implementabile su varie piattaforme e dispositivi. Questa guida completa ha lo scopo di accompagnarti attraverso le sfumature dell'esportazione del modello, mostrando come ottenere la massima compatibilità e prestazioni.



Guarda: Come esportare un modello Ultralytics YOLO addestrato personalizzato ed eseguire l'inferenza in tempo reale su webcam.

Perché scegliere la modalità di esportazione di YOLO11?

  • Versatilità: Esporta in più formati tra cui ONNX, TensorRT, CoreML e altri.
  • Prestazioni: Ottieni un aumento di velocità della GPU fino a 5 volte con TensorRT e un aumento di velocità della CPU di 3 volte con ONNX o OpenVINO.
  • Compatibilità: Rendi il tuo modello universalmente implementabile in numerosi ambienti hardware e software.
  • Facilità d'uso: Semplice API CLI e python per un'esportazione del modello rapida e diretta.

Caratteristiche principali della modalità di esportazione

Ecco alcune delle funzionalità più importanti:

  • Esportazione con un clic: Comandi semplici per l'esportazione in diversi formati.
  • Esportazione batch: Esporta modelli in grado di eseguire l'inferenza in batch.
  • Inferenza ottimizzata: I modelli esportati sono ottimizzati per tempi di inferenza più rapidi.
  • Video tutorial: Guide e tutorial approfonditi per un'esperienza di esportazione fluida.

Suggerimento

  • Esporta in ONNX o OpenVINO per un aumento di velocità della CPU fino a 3 volte.
  • Esporta in TensorRT per un aumento di velocità della GPU fino a 5 volte.

Esempi di utilizzo

Esporta un modello YOLO11n in un formato diverso come ONNX o TensorRT. Consulta la sezione Argomenti di seguito per un elenco completo degli argomenti di esportazione.

Esempio

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom trained model

# Export the model
model.export(format="onnx")
yolo export model=yolo11n.pt format=onnx      # export official model
yolo export model=path/to/best.pt format=onnx # export custom trained model

Argomenti

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 l'implementazione nell'applicazione prevista 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 oppure tuple 640 Dimensione 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 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 le dimensioni del modello e migliorando le prestazioni di inferenza. Non compatibile con il formato NCNN o dispositivi CUDA.
half bool False Abilita la quantizzazione FP16 (a mezza precisione), riducendo le dimensioni del modello e potenzialmente accelerando l'inferenza su hardware supportato. Non compatibile con la quantizzazione INT8 o le esportazioni solo CPU per ONNX.
int8 bool False Attiva la quantizzazione INT8, comprimendo ulteriormente il modello e accelerando l'inferenza con una perdita minima di precisione, principalmente per i dispositivi edge. Se utilizzato con TensorRT, esegue la quantizzazione post-training (PTQ).
dynamic bool False Consente dimensioni di input dinamiche per le esportazioni ONNX, TensorRT e OpenVINO, migliorando la flessibilità nella gestione di diverse dimensioni delle immagini. Impostato automaticamente su True quando si utilizza TensorRT con INT8.
simplify bool True Semplifica il grafico 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 di ONNX opset per la compatibilità con diversi parser e runtime ONNX. Se non impostato, utilizza l'ultima versione supportata.
workspace float oppure None None Imposta la dimensione massima dello spazio di lavoro in GiB per TensorRT ottimizzazioni, bilanciando l'utilizzo della memoria e le 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 (vedere Formati di Esportazione), migliorando l'efficienza della post-elaborazione del rilevamento. Non disponibile per i modelli end2end.
batch int 1 Specifica la dimensione del batch di inferenza del modello di esportazione o il numero massimo di immagini che il modello esportato elaborerà contemporaneamente in predict modalità. Per le esportazioni Edge TPU, questo viene automaticamente impostato su 1.
device str None Specifica il dispositivo per l'esportazione: GPU (device=0), CPU (device=cpu), MPS per Apple silicon (device=mps) o DLA per NVIDIA Jetson (device=dla:0 oppure device=dla:1). Le esportazioni TensorRT utilizzano automaticamente la GPU.
data str 'coco8.yaml' Percorso del dataset file di configurazione (predefinito: coco8.yaml), essenziale per la calibrazione della quantizzazione INT8. Se non specificato con INT8 abilitato, verrà assegnato un set di dati predefinito.
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.

La regolazione di questi parametri consente la personalizzazione del processo di esportazione per adattarsi a requisiti specifici, come l'ambiente di implementazione, i vincoli hardware e gli obiettivi di prestazioni. La selezione del formato e delle impostazioni appropriati è essenziale per ottenere il miglior equilibrio tra dimensioni del modello, velocità e precisione.

Formati di esportazione

I formati di esportazione YOLO11 disponibili sono nella tabella sottostante. Puoi esportare in qualsiasi formato usando l' format argomento, ad esempio format='onnx' oppure format='engine'. Puoi prevedere o convalidare direttamente sui modelli esportati, ad esempio yolo predict model=yolo11n.onnx. Esempi di utilizzo vengono mostrati per il tuo modello dopo che l'esportazione è stata completata.

Formato format Argomento Modello Metadati Argomenti
PyTorch - yolo11n.pt -
TorchScript torchscript yolo11n.torchscript imgsz, half, dynamic, optimize, nms, batch, device
ONNX onnx yolo11n.onnx imgsz, half, dynamic, simplify, opset, nms, batch, device
OpenVINO openvino yolo11n_openvino_model/ imgsz, half, dynamic, int8, nms, batch, data, fraction, device
TensorRT engine yolo11n.engine imgsz, half, dynamic, simplify, workspace, int8, nms, batch, data, fraction, device
CoreML coreml yolo11n.mlpackage imgsz, half, int8, nms, batch, device
TF SavedModel saved_model yolo11n_saved_model/ imgsz, keras, int8, nms, batch, device
TF GraphDef pb yolo11n.pb imgsz, batch, device
TF Lite tflite yolo11n.tflite imgsz, half, int8, nms, batch, data, fraction, device
TF Edge TPU edgetpu yolo11n_edgetpu.tflite imgsz, device
TF.js tfjs yolo11n_web_model/ imgsz, half, int8, nms, batch, device
PaddlePaddle paddle yolo11n_paddle_model/ imgsz, batch, device
MNN mnn yolo11n.mnn imgsz, batch, int8, half, device
NCNN ncnn yolo11n_ncnn_model/ imgsz, half, batch, device
IMX500 imx yolo11n_imx_model/ imgsz, int8, data, fraction, device
RKNN rknn yolo11n_rknn_model/ imgsz, batch, name, device

FAQ

Come posso esportare un modello YOLO11 in formato ONNX?

L'esportazione di un modello YOLO11 in formato ONNX è semplice con Ultralytics. Fornisce metodi python e CLI per l'esportazione dei modelli.

Esempio

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom trained model

# Export the model
model.export(format="onnx")
yolo export model=yolo11n.pt format=onnx      # export official model
yolo export model=path/to/best.pt format=onnx # export custom trained model

Per maggiori dettagli sul processo, comprese le opzioni avanzate come la gestione di diverse dimensioni di input, fare riferimento alla guida all'integrazione ONNX.

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

L'utilizzo di TensorRT per l'esportazione del modello offre notevoli miglioramenti delle prestazioni. I modelli YOLO11 esportati in TensorRT possono raggiungere un aumento di velocità della GPU fino a 5 volte, rendendolo ideale per applicazioni di inferenza in tempo reale.

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

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

Come posso abilitare la quantizzazione INT8 durante l'esportazione del mio modello YOLO11?

La quantizzazione INT8 è un ottimo modo per comprimere il modello e accelerare l'inferenza, specialmente sui dispositivi edge. Ecco come puoi abilitare la quantizzazione INT8:

Esempio

from ultralytics import YOLO

model = YOLO("yolo11n.pt")  # Load a model
model.export(format="engine", int8=True)
yolo export model=yolo11n.pt format=engine int8=True # export TensorRT model with INT8 quantization

La quantizzazione INT8 può essere applicata a vari formati, come TensorRT, OpenVINO, e CoreML. Per risultati di quantizzazione ottimali, fornire un elemento rappresentativo dataset utilizzando il data parametro.

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, offrendo 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 assicura che il modello possa adattarsi senza problemi a diverse forme di input.

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

Esempio

from ultralytics import YOLO

model = YOLO("yolo11n.pt")
model.export(format="onnx", dynamic=True)
yolo export model=yolo11n.pt format=onnx dynamic=True

Il dimensionamento dinamico dell'input è particolarmente utile per applicazioni in cui le dimensioni dell'input possono variare, come l'elaborazione video o la gestione di immagini provenienti da fonti diverse.

Quali sono gli argomenti chiave 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 (ad esempio, onnx, torchscript, tensorflow).
  • imgsz: Dimensione dell'immagine desiderata per l'input del modello (ad esempio, 640 oppure (height, width)).
  • half: Abilita la quantizzazione FP16, riducendo le dimensioni del modello e potenzialmente accelerando l'inferenza.
  • optimize: Applica ottimizzazioni specifiche per ambienti mobili o vincolati.
  • int8: Abilita la quantizzazione INT8, altamente vantaggiosa per edge AI deployment.

Per la distribuzione su piattaforme hardware specifiche, valuta l'utilizzo di formati di esportazione specializzati come TensorRT per GPU NVIDIA, CoreML per dispositivi Apple o Edge TPU per dispositivi Google Coral.



📅 Creato 1 anno fa ✏️ Aggiornato 5 mesi fa

Commenti