Ultralytics YOLO27:
Get Started

Esportazione dei modelli con Ultralytics YOLO#

Ultralytics YOLO ecosystem and integrations

Introduzione#

L'obiettivo finale dell'addestramento di un modello è distribuirlo in applicazioni del mondo reale. La modalità export di Ultralytics YOLO26 offre numerose opzioni per esportare il modello addestrato in diversi formati e distribuirlo su varie piattaforme e dispositivi. Questa guida completa illustra nel dettaglio l'esportazione dei modelli e mostra come ottenere la massima compatibilità e le migliori prestazioni.

Consulta l'anteprima non ancora rilasciata di YOLO27 per conoscere il supporto all'esportazione previsto.



Guarda: Come esportare Ultralytics YOLO26 in diversi formati per il deployment | ONNX, TensorRT, CoreML 🚀

Perché scegliere la modalità export di YOLO26?#

  • Versatilità: esporta in più formati, tra cui ONNX, TensorRT, CoreML e altri.
  • Prestazioni: ottieni un aumento della velocità fino a 5 volte sulla GPU con TensorRT e fino a 3 volte sulla CPU con ONNX o OpenVINO.
  • Compatibilità: rendi il tuo modello distribuibile su un'ampia gamma di ambienti hardware e software.
  • Facilità d'uso: CLI e API Python semplici per esportare rapidamente i modelli.

Esempi d'uso#

Esporta un modello YOLO26n in un altro formato, come ONNX o TensorRT. Consulta la sezione Argomenti qui sotto per l'elenco completo degli argomenti di esportazione.

Esempio
from ultralytics import YOLO

# Carica un modello
model = YOLO("yolo26n.pt")  # carica un modello ufficiale
model = YOLO("path/to/best.pt")  # carica un modello addestrato personalizzato

# Esporta il modello
model.export(format="onnx")

Argomenti#

Questa tabella descrive le configurazioni e le opzioni disponibili per esportare i modelli YOLO in diversi formati. Queste impostazioni sono fondamentali per ottimizzare le prestazioni e le dimensioni del modello esportato, nonché la sua compatibilità con varie piattaforme e ambienti. Una configurazione corretta assicura che il modello sia pronto per la distribuzione nell'applicazione prevista con la massima efficienza.

ArgomentoTipoPredefinitoDescrizione
formatstr'torchscript'Formato di destinazione del modello esportato, ad esempio 'onnx', 'torchscript', 'engine' (TensorRT) o altri. Ogni formato garantisce la compatibilità con diversi ambienti di distribuzione.
namestrNoneNome dell'hardware di destinazione per i formati che lo richiedono: architettura Hailo ('hailo8', 'hailo8l', 'hailo10h', 'hailo15h', 'hailo15l'; il valore predefinito è 'hailo8l'), chip Rockchip RKNN (il valore predefinito è 'rk3588'), SoC Huawei Ascend (un CANN --soc_version; il valore predefinito è 'Ascend310B4'), destinazione Qualcomm QNN HTP (il valore predefinito è '73') oppure dispositivo AMD Xilinx Versal AI Edge Series Gen 2 (il valore predefinito è 've2-xc2ve3858', il kit di valutazione VEK385). È distinto dalla coppia project/name usata per denominare le esecuzioni in altre modalità.
imgszint o tuple640Dimensioni desiderate dell'immagine di input del modello. Può essere un numero intero per immagini quadrate (ad es. 640 per 640×640) oppure una tupla (height, width) per dimensioni specifiche. Se non specificata, l'esportazione riutilizza le dimensioni di training registrate nel checkpoint caricato: i checkpoint ufficiali YOLO26 registrano 768 per depth, 224 per classify, 1024 per OBB e 640 per le altre attività; un fine-tuning registra invece le dimensioni imgsz usate per l'addestramento. Un modello creato da un file YAML non ha dimensioni di training registrate e usa 640.
optimizeboolFalseAbilita un'ottimizzazione superiore del compilatore per DEEPX, riducendo la latenza dell'inferenza e aumentando il tempo di compilazione.
quantizeint o strNonePrecisione di quantizzazione: 16 (FP16, riduce le dimensioni del modello e può velocizzare l'inferenza sull'hardware supportato) oppure 8 (INT8/PTQ, comprime ulteriormente il modello con una perdita minima di accuratezza, principalmente per i dispositivi edge; richiede la calibrazione data/fraction); 32/non impostato indica FP32. Un checkpoint addestrato con quantize=8 viene sempre esportato in INT8: onnx e engine usano gli intervalli contenuti nel checkpoint senza calibrazione, mentre gli altri formati o le altre precisioni non sono accettati. 'w8a8' e 'w16a16' sono alias di 8 e 16; le precisioni miste 'w8a16' (pesi INT8 con attivazioni a 16 bit: CoreML, LiteRT, QNN) e 'w8a32' (INT8 dinamico: LiteRT) sono accettate solo da quei formati. Sostituisce i flag deprecati half/int8 (half=True → 16, int8=True → 8, ancora accettati con un avviso di deprecazione). Sono consentite solo le precisioni supportate dal formato di destinazione (vedi sotto).
dynamicboolFalseConsente dimensioni di input dinamiche per le esportazioni TorchScript, ONNX, OpenVINO, TensorRT, CoreML e MNN, offrendo maggiore flessibilità nella gestione di immagini di dimensioni diverse.
simplifyboolTrueSemplifica il grafo ONNX intermedio con onnxslim per le esportazioni che lo generano (vedi Formati di esportazione), migliorando potenzialmente le prestazioni e la compatibilità con i motori di inferenza.
opsetintNoneSpecifica la versione opset di ONNX per le esportazioni che generano un grafo ONNX (vedi Formati di esportazione), garantendo la compatibilità con diversi parser e runtime ONNX. Se non impostata, usa l'ultima versione supportata.
workspacefloat o NoneNoneImposta la dimensione massima dell'area di lavoro, in GiB, per le ottimizzazioni TensorRT, bilanciando l'uso della memoria e le prestazioni. Usa None per consentire a TensorRT di allocare automaticamente fino al massimo del dispositivo.
nmsbool, facoltativoNoneNone esporta le predizioni one-to-many grezze per la NMS esterna; True integra la NMS dove supportata; False seleziona la testa senza NMS, se disponibile. La NMS integrata in CoreML supporta detect, segment e pose con forme statiche. Consulta la guida al rilevamento end-to-end.
conffloatNoneSoglia di confidenza usata ovunque venga generata la NMS durante l'esportazione: le esportazioni nms=True; le esportazioni detect non end-to-end di Hailo; e le esportazioni detect, pose e segment di IMX, che impostano internamente nms=True. Se non impostata, il valore predefinito è 0.25.
ioufloat0.7Soglia IoU usata ovunque venga generata la NMS durante l'esportazione: le esportazioni nms=True; le esportazioni detect non end-to-end di Hailo; e le esportazioni detect, pose e segment di IMX, che impostano internamente nms=True.
max_detint300Numero massimo di rilevamenti mantenuti nell'output del modello esportato. Si applica alle esportazioni nms=True in tutti i formati tranne il rilevamento CoreML, la cui pipeline NMS nativa non ha un limite di rilevamenti, oltre alle esportazioni di rilevamento end-to-end senza NMS (YOLO26, YOLOv10, limitate al numero di anchor disponibili) e alle esportazioni detect, pose e segment di IMX.
agnostic_nmsboolFalseAbilita la NMS indipendente dalla classe ovunque la NMS in fase di esportazione venga generata tramite la pipeline standard nms=True, inclusa la fase NMS nativa di CoreML; sopprime i riquadri sovrapposti con punteggi inferiori tra classi diverse, anziché solo all'interno della stessa classe. Non viene applicata alle configurazioni NMS generate da Hailo o IMX, che non prevedono un'opzione indipendente dalla classe e restano consapevoli delle classi indipendentemente da questo flag. È inoltre integrata nelle esportazioni end-to-end senza NMS (YOLO26, YOLOv10), dove impedisce solo che lo stesso rilevamento compaia con più etichette di classe (duplicati con IoU=1.0), senza applicare la soppressione basata sulla soglia IoU tra riquadri distinti.
batchint1Specifica la dimensione del batch per l'inferenza del modello esportato oppure il numero massimo di immagini che il modello esportato elaborerà simultaneamente in modalità predict. I formati che non includono batch negli argomenti di esportazione (Edge TPU, IMX500, DEEPX, Hailo, AMD Xilinx) esportano con batch 1 e rifiutano altri valori.
devicestrNoneSpecifica il dispositivo per l'esportazione: GPU (device=0), CPU (device=cpu), MPS per Apple silicon (device=mps), NPU Huawei Ascend (device=npu o device=npu:0) oppure DLA per NVIDIA Jetson (device=dla:0 o device=dla:1). Le esportazioni TensorRT usano automaticamente la GPU, ma TensorRT 11.0 non supporta DLA.
verboseboolFalseAumenta a VERBOSE il livello di dettaglio del log del builder TensorRT durante l'esportazione format='engine'. Gli altri formati di esportazione ignorano questa opzione.
datastrNonePercorso al file YAML del dataset, essenziale per la calibrazione della quantizzazione INT8; per la classificazione accetta invece una directory del dataset o il nome di un dataset integrato. Se non specificato con INT8 abilitato, Ultralytics seleziona un dataset di calibrazione specifico per l'attività, se necessario, oppure usa il dataset predefinito per l'attività del modello. Un checkpoint addestrato con quantize=8 contiene i propri intervalli INT8 e non richiede dati di calibrazione.
splitstr'val'Split del dataset ('train', 'val' o 'test') usato per creare il dataloader di calibrazione della quantizzazione INT8 da data.
fractionfloat, int o list1.0Sottoinsieme del dataset usato per la calibrazione INT8: un rapporto, un numero di immagini o valori [train, val, test]. 1 indica lo split completo; i numeri interi superiori a 1 indicano il numero di immagini e solo la voce opzionale test accetta 0/0.0 per indicare nessuna immagine. Gli elenchi di due elementi lasciano completo test.

La regolazione di questi parametri consente di personalizzare il processo di esportazione in base a requisiti specifici, come l'ambiente di distribuzione, i vincoli hardware e gli obiettivi di prestazioni. Scegliere il formato e le impostazioni appropriati è essenziale per ottenere il miglior equilibrio tra dimensioni del modello, velocità e accuratezza.

Formati di esportazione#

I formati di esportazione disponibili per YOLO26 sono elencati nella tabella seguente. Puoi esportare in qualsiasi formato usando l'argomento format, ad esempio format='onnx' o format='engine'. Puoi eseguire previsioni o convalide direttamente sui modelli esportati, ad esempio con yolo predict model=yolo26n.onnx. Al termine dell'esportazione, vengono mostrati esempi di utilizzo per il tuo modello. Puoi anche esportare i modelli direttamente dal browser sulla piattaforma Ultralytics, senza alcuna configurazione locale.

FormatoArgomento formatModelloMetadatiArgomenti
PyTorch-yolo26n.pt✅-
TorchScripttorchscriptyolo26n.torchscript✅imgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n.onnx✅imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n_openvino_model/✅imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n.engine✅imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n.mlpackage✅imgsz, dynamic, quantize, nms, batch, device
Apple Core AIcoreaiyolo26n.aimodel✅imgsz, batch, quantize
TF SavedModelsaved_modelyolo26n_saved_model/✅imgsz, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n.pb❌imgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n_edgetpu.tflite✅imgsz, quantize, opset, data, fraction, device
LiteRTlitertyolo26n.tflite✅imgsz, quantize, batch, data, fraction, device
PaddlePaddlepaddleyolo26n_paddle_model/✅imgsz, batch, device
MNNmnnyolo26n.mnn✅imgsz, batch, dynamic, quantize, simplify, opset, nms, device
NCNNncnnyolo26n_ncnn_model/✅imgsz, quantize, batch, device
IMX500imxyolo26n_imx_model/✅imgsz, quantize, data, fraction, nms, device
RKNNrknnyolo26n_rknn_model/✅imgsz, batch, name, quantize, simplify, opset, data, fraction, device
ExecuTorchexecutorchyolo26n_executorch_model/✅imgsz, batch, device
Axeleraaxelerayolo26n_axelera_model/✅imgsz, batch, quantize, data, fraction, device
DEEPXdeepxyolo26n_deepx_model/✅imgsz, quantize, simplify, opset, data, optimize, device
Qualcomm QNNqnnyolo26n_qnn.onnx✅imgsz, batch, name, quantize, simplify, opset, data, fraction, device
Hailohailoyolo26n_hailo_model/✅imgsz, name, quantize, data, fraction, simplify, conf, iou, device
Huawei Ascendascendyolo26n_ascend_model/✅imgsz, batch, name, quantize, opset, simplify, nms, device
AMD Xilinxxilinxyolo26n_xilinx_model/✅imgsz, name, quantize, data, fraction, opset, simplify, device

nms=None restituisce per impostazione predefinita output grezzi per NMS esterno. Imposta nms=False per selezionare una head disponibile senza NMS; i formati non supportati utilizzano il proprio percorso di output nativo. Le voci nms qui sopra identificano i formati che possono integrare NMS con nms=True.

Installazione automatica delle dipendenze per l'esportazione

La maggior parte dei formati richiede pacchetti che non vengono installati con ultralytics. Se manca un pacchetto, l'esportazione lo installa in fase di esecuzione con uv o pip e, su Linux, con apt per i pacchetti di sistema, come Java per IMX. Il compilatore Edge TPU viene scaricato senza apt o sudo. Per mantenere invariato l'ambiente, ad esempio in un'immagine container, un job CI o un servizio di produzione, imposta YOLO_AUTOINSTALL=False. L'esportazione verifica comunque la presenza dei pacchetti mancanti e li segnala, ma lascia invariato l'ambiente e non riesce finché non vengono installati.

export YOLO_AUTOINSTALL=False

Opzioni di quantizzazione#

Usa l'argomento quantize per specificare la precisione di esportazione. I valori stringa non distinguono tra maiuscole e minuscole e Ultralytics converte in modo canonico gli alias accettati prima dell'esportazione:

Valori richiestiValore canonicoSignificato
8, "8", "int8", "w8a8"8Pesi e attivazioni INT8
16, "16", "fp16", "w16a16"16Pesi e attivazioni FP16
32, "32", "fp32", "w32a32"32Esportazione FP32; equivale a non impostare il parametro, tranne per i programmi ML NMS di CoreML, che usano FP16 per impostazione predefinita
"w8a16""w8a16"Pesi INT8 con attivazioni a 16 bit (FP16; INT16 su LiteRT)
"w8a32""w8a32"Pesi INT8 con attivazioni FP32 (INT8 dinamico LiteRT, non serve la calibrazione)

I flag legacy half=True e int8=True sono ancora accettati con avvisi di deprecazione e inoltrati a quantize=16 e quantize=8.

Non tutti i formati di esportazione supportano ogni precisione. Le richieste esplicite di quantize producono la precisione richiesta oppure generano un errore prima dell'esportazione:

FormatoFP32 (32/non impostato)FP16 (16)INT8 (8)W8A16 ("w8a16")Note
PyTorch✅N/DN/DN/DFormato nativo per l'addestramento e i checkpoint.
TorchScript✅✅ Solo GPU❌❌L'esportazione TorchScript FP16 richiede device=0; l'esportazione su CPU è in FP32.
ONNX✅✅✅❌INT8 usa la quantizzazione statica di ONNX Runtime e dati di calibrazione.
OpenVINO✅✅✅❌INT8 usa la quantizzazione post-addestramento di NNCF.
TensorRT✅✅✅❌INT8 richiede dati di calibrazione rappresentativi.
CoreML✅¹✅✅✅INT8 in CoreML è una quantizzazione dei pesi; W8A16 usa pesi INT8 con attivazioni FP16. ¹Se non specificato, i programmi ML NMS usano FP16 per impostazione predefinita e le esportazioni nms=True per segmentazione e posa sono sempre in FP16.
Core AI✅✅❌❌FP32 per impostazione predefinita oppure una risorsa .aimodel FP16 con quantize=16; non è disponibile un percorso INT8.
TF SavedModel✅❌✅❌L'esportazione INT8 usa la calibrazione di TensorFlow.
TF GraphDef✅❌❌❌Nessuna conversione di precisione durante l'esportazione.
Edge TPU❌❌✅ automatico❌Edge TPU richiede INT8; se non specificato, viene attivato automaticamente.
LiteRT✅❌✅✅INT8 statico (8) e "w8a16" (pesi int8 + attivazioni int16) usano dati di calibrazione; è supportato anche INT8 dinamico "w8a32" (senza calibrazione). quantize=16 non è un'esportazione separata: un modello FP32 viene eseguito in FP16 in fase di runtime tramite il delegato GPU.
PaddlePaddle✅❌❌❌Nessuna conversione di precisione durante l'esportazione.
MNN✅✅✅❌INT8 è una quantizzazione dei pesi eseguita durante la conversione MNN.
NCNN✅✅❌❌Formato per runtime mobile/embedded.
IMX500❌❌✅ automatico❌IMX500 richiede la quantizzazione; se non specificato, INT8 viene attivato automaticamente.
RKNN❌✅ dipendente dal chip✅❌RK3588/RK3576/RK3566/RK3568/RK3562/RK2118/RV1126B supportano FP16 o INT8; le varianti RV1103/RV1106 supportano solo INT8.
ExecuTorch✅❌❌❌Nessuna conversione di precisione durante l'esportazione.
Axelera❌❌✅ automatico❌L'esportazione Axelera richiede INT8; se non specificato, viene attivato automaticamente.
DEEPX❌❌✅ automatico❌L'esportazione DEEPX richiede INT8; se non specificato, viene attivato automaticamente.
Qualcomm QNN❌❌❌✅ automaticoL'esportazione QNN HTP usa una configurazione fissa con pesi INT8 e attivazioni a 16 bit.
Hailo❌❌✅ automatico❌L'esportazione Hailo richiede INT8; se non specificato, viene attivato automaticamente.
Huawei Ascend❌✅ automatico❌❌Le convoluzioni Ascend AI Core accettano solo input FP16/INT8, quindi ATC compila in FP16; se non specificato, viene attivato automaticamente.
AMD Xilinx❌❌✅ automatico❌L'esportazione AMD Xilinx richiede Vitis AI INT8 (VINT8); se non è impostato, viene abilitato automaticamente.

Per le esportazioni INT8 e W8A16, fornisci dati di calibrazione rappresentativi con data, ad esempio data="coco8.yaml", a meno che l'integrazione di destinazione non documenti un comportamento predefinito o un'attivazione automatica. Lo schema LiteRT "w8a32" (INT8 dinamico) non richiede dati di calibrazione.

Addestramento consapevole della quantizzazione#

Le esportazioni INT8 descritte sopra usano la quantizzazione post-addestramento (PTQ): gli intervalli vengono determinati con un singolo passaggio di calibrazione su data. L'addestramento consapevole della quantizzazione (QAT), invece, apprende pesi che tollerano INT8 tramite fine-tuning con la fake quantization nel ciclo di addestramento, recuperando la precisione persa con la sola calibrazione. Passa quantize=8 a train per eseguire il fine-tuning di un checkpoint preaddestrato, quindi esportalo come di consueto:

Esempio
from ultralytics import YOLO

model = YOLO("yolo26n.pt")
model.train(
    data="coco.yaml",
    quantize=8,
    epochs=5,
    batch=64,
    optimizer="AdamW",
    lr0=0.00001,
    lrf=0.1,
    warmup_epochs=0.5,
    cos_lr=True,
    mosaic=0.0,
)
model.export(format="engine", quantize=8)  # gli intervalli sono inclusi nel checkpoint, non servono dati di calibrazione

Usa un tasso di apprendimento basso quando esegui il fine-tuning di un checkpoint preaddestrato. Il QAT può ridurre inizialmente la precisione e i vantaggi rispetto alla quantizzazione post-addestramento dipendono dal modello, dal dataset e dal budget di addestramento. Convalida il modello esportato confrontandolo sia con il checkpoint originale sia con un'esportazione quantizzata post-addestramento; i punteggi ottenuti con la fake quantization durante l'addestramento non dimostrano la precisione in fase di deployment.

L'utilità del QAT dipende da quanto bene la calibrazione del backend di esportazione gestisce il modello. I valori seguenti sono mAP50-95 su COCO val2017, misurati con motori TensorRT 10.16 a imgsz=640 e batch 1; ogni checkpoint QAT è stato addestrato con epochs=20 patience=3:

ModelloMotore FP32Motore PTQ INT8Motore QAT INT8
yolo26n0.40320.39340.3935
yolo26s0.47940.44120.4711
yolo26m0.52690.46960.5137
yolo26l0.54400.48890.5307
yolo26x0.57010.51380.5527

Rispetto a FP32, il QAT riduce mAP50-95 di 0.008–0.017 nell'intera gamma, mentre la quantizzazione post-addestramento lo riduce di 0.010 su yolo26n e di 0.038–0.057 sui modelli più grandi. Il QAT offre quindi un vantaggio minimo sul modello più piccolo, per il quale la calibrazione funziona già bene, e un vantaggio di 0.030–0.044 sugli altri. I valori possono variare con un altro dataset, formato di esportazione o versione di TensorRT: misura le prestazioni nel tuo caso.

I modelli QAT richiedono compile=False; i moduli quantizzati di ModelOpt non supportano torch.compile.

Le convoluzioni finali di output della testata vengono deliberatamente lasciate in virgola mobile per limitare la perdita di precisione INT8; TensorRT abilita la precisione mista FP16 per i livelli non quantizzati. Il QAT viene eseguito tramite NVIDIA TensorRT Model Optimizer, installato automaticamente al primo utilizzo, e per caricare il checkpoint risultante è necessario averlo installato. Gli intervalli sono inclusi nel checkpoint e le esportazioni onnx e engine li emettono come nodi Q/DQ; gli altri formati usano i dati di calibrazione e rifiutano un checkpoint QAT.

E adesso?#

Consulta la guida all'integrazione della piattaforma di deployment di destinazione — le guide per ONNX, TensorRT, CoreML e altre sono disponibili nell'elenco completo delle integrazioni — per scoprire come eseguire il modello esportato.

Domande frequenti#

  • Esportare un modello YOLO26 in formato ONNX è semplice con Ultralytics. Puoi esportare i modelli sia con Python sia tramite CLI.

    Esempio
    from ultralytics import YOLO
    
    # Carica un modello
    model = YOLO("yolo26n.pt")  # carica un modello ufficiale
    model = YOLO("path/to/best.pt")  # carica un modello addestrato personalizzato
    
    # Esporta il modello
    model.export(format="onnx")

    Per maggiori dettagli sulla procedura, incluse opzioni avanzate come la gestione di diverse dimensioni di input, consulta la guida all'integrazione ONNX.

  • L'uso di TensorRT per l'esportazione dei modelli offre notevoli miglioramenti delle prestazioni. I modelli YOLO26 esportati in TensorRT possono raggiungere una velocità GPU fino a 5 volte superiore, il che li rende ideali per le applicazioni di inferenza in tempo reale.

    • Versatilità: ottimizza i modelli per una configurazione hardware specifica.
    • Velocità: ottieni inferenze più rapide grazie a ottimizzazioni avanzate.
    • Compatibilità: integra i modelli senza problemi con l'hardware NVIDIA.

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

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

    Esempio
    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")  # Carica un modello
    model.export(format="onnx", quantize=8, data="coco8.yaml")

    La quantizzazione INT8 può essere applicata a formati come ONNX, TensorRT, OpenVINO, CoreML, Rockchip RKNN e AMD Xilinx. Per ottenere risultati di quantizzazione ottimali, fornisci un dataset rappresentativo usando il parametro data. Consulta Opzioni di quantizzazione per i valori quantize accettati e i formati supportati.

  • Le dimensioni di input dinamiche consentono al modello esportato di gestire immagini di dimensioni diverse, offrendo flessibilità e ottimizzando l'efficienza di elaborazione per diversi casi d'uso. Quando esporti in formati come ONNX o TensorRT, abilitare le dimensioni di input dinamiche permette al modello di adattarsi facilmente a forme di input diverse.

    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)

    Le dimensioni di input dinamiche sono particolarmente utili nelle applicazioni in cui le dimensioni dell'input possono variare, ad esempio nell'elaborazione video o quando si gestiscono immagini provenienti da fonti diverse.

  • Per impostazione predefinita, i modelli PyTorch e le esportazioni dinamiche usano il padding a rettangolo minimo, mentre le esportazioni statiche applicano il padding fino a imgsz; perciò le rilevazioni vicine alla soglia di confidenza possono differire. Usa rect=False per l'inferenza nativa, così da ottenere risultati corrispondenti a un'esportazione statica, oppure esporta con dynamic=True se supportato.

  • Comprendere e configurare gli argomenti di esportazione è fondamentale per ottimizzare le prestazioni del modello:

    • format: Il formato di destinazione del modello esportato (ad es. onnx, torchscript, saved_model).
    • imgsz: La dimensione dell'immagine desiderata per l'input del modello (ad es. 640 o (height, width)).
    • quantize: La precisione di quantizzazione, ad esempio 8/"int8", 16/"fp16", 32/"fp32" oppure gli schemi misti di pesi/attivazioni "w8a16" e "w8a32" (INT8 dinamico LiteRT) nei formati supportati. Consulta Opzioni di quantizzazione.
    • dynamic: Accetta dimensioni di input variabili nei formati che supportano forme dinamiche, come ONNX, OpenVINO e TensorRT.
    • nms: Seleziona output grezzi per NMS esterna (None), NMS integrata (True) o la testata senza NMS (False).
    • device: Il dispositivo usato per tracciare il modello durante l'esportazione, ad esempio cpu o 0 per la prima GPU CUDA; TorchScript FP16 richiede una GPU.

    Per il deployment su piattaforme hardware specifiche, valuta formati di esportazione specializzati come TensorRT per le GPU NVIDIA, CoreML per i dispositivi Apple o Edge TPU per i dispositivi Google Coral.

  • Quando esporti un modello YOLO in formati come ONNX o TensorRT, la struttura del tensore di output dipende dall'attività del modello. Comprendere questi output è importante per implementare inferenze personalizzate.

    Per i modelli di rilevamento YOLO26 (ad es. yolo26n.pt) esportati con nms=False, i formati supportati producono un output senza NMS con forma (batch_size, max_detections, 6) e valori [x1, y1, x2, y2, confidence, class_id]. Con il valore predefinito max_det=300, in genere è (batch_size, 300, 6). Alcuni formati soggetti a vincoli ripiegano automaticamente sul layout di output tradizionale quando gli operatori end-to-end non sono supportati.

    Per impostazione predefinita (nms=None), i modelli di rilevamento, incluso YOLO26, esportano le predizioni grezze one-to-many: l'output è in genere un singolo tensore con forma (batch_size, 4 + num_classes, num_predictions), in cui i canali rappresentano le coordinate dei riquadri più i punteggi per classe, mentre num_predictions dipende dalla risoluzione di input dell'esportazione (e può essere dinamico). La guida al rilevamento end-to-end spiega quali formati mantengono l'output end-to-end.

    Per i modelli di segmentazione (ad es. yolo26n-seg.pt), in genere ottieni due output: il primo tensore con forma (batch_size, 4 + num_classes + mask_dim, num_predictions) (riquadri, punteggi di classe e coefficienti delle maschere) e il secondo tensore con forma (batch_size, mask_dim, proto_h, proto_w), contenente i prototipi delle maschere usati insieme ai coefficienti per generare le maschere delle istanze. Le dimensioni dipendono dalla risoluzione di input dell'esportazione (e possono essere dinamiche).

    Per i modelli pose (ad es. yolo26n-pose.pt), il tensore di output ha in genere forma (batch_size, 4 + num_classes + keypoint_dims, num_predictions), mentre keypoint_dims dipende dalla specifica della posa (ad es. dal numero di punti chiave e dall'inclusione o meno della confidenza) e num_predictions dipende dalla risoluzione di input dell'esportazione (e può essere dinamico).

    Gli esempi in Esempi di inferenza ONNX illustrano come elaborare questi output per ogni tipo di modello.

  • Ultralytics al momento non fornisce un'API dedicata di inferenza C++ per i modelli YOLO. Per le distribuzioni C++, esporta il modello in un formato di runtime come ONNX, TensorRT, TorchScript o MNN, quindi carica l'artefatto esportato con l'API C++ nativa del runtime.

    Ad esempio, esporta un modello di rilevamento con yolo export model=yolo26n.pt format=onnx ed esegui il file .onnx con ONNX Runtime C++, oppure esporta con format=engine ed esegui il motore TensorRT da un'applicazione C++ TensorRT. Quando usi una post-elaborazione C++ personalizzata, fai corrispondere il layout del tensore di output all'attività e alle impostazioni di esportazione; le esportazioni predefinite di rilevamento YOLO26 restituiscono tensori di predizione grezzi che richiedono NMS esterna. Esporta con nms=False per ottenere rilevamenti senza NMS con forma (batch, max_det, 6), oppure con nms=True per incorporare NMS nei formati supportati.

  • Quando esporti con quantize=16 (FP16) o quantize=8 (INT8), la maggior parte dei tensori viene convertita a una precisione inferiore per ridurre le dimensioni del modello e migliorare le prestazioni. Tuttavia, quando è abilitato nms=False, la post-elaborazione (inclusi gli indici di classe) viene incorporata direttamente nel grafo esportato.

    Il tensore output0 contiene indici di classe, rappresentati internamente come valori in virgola mobile. A causa della precisione limitata della mantissa, FP16 non è in grado di rappresentare in modo affidabile valori interi superiori a 2048. Per evitare potenziali perdite di precisione o ID di classe errati, output0 viene mantenuto intenzionalmente in FP32.

    Se ti servono output interamente in FP16, esporta con nms=None su una GPU ed esegui la post-elaborazione esternamente. Le esportazioni ONNX FP16 su CPU mantengono comunque input e output FP32, convertendo solo il grafo interno.

Commenti