Ultralytics YOLO27:

Esportazione dei modelli con Ultralytics YOLO#

Ultralytics YOLO ecosystem and integrations

Introduzione#

L'obiettivo fondamentale 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 mostrarti le sfumature dell'esportazione dei modelli, evidenziando come ottenere la massima compatibilità e prestazioni.

Consulta l'anteprima unreleased YOLO27 preview per il supporto all'esportazione pianificato.



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 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 Python e CLI per un'esportazione dei modelli rapida e lineare.

Funzionalità chiave 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 a 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'accelerazione CPU fino a 3x.
  • Esporta in TensorRT per un'accelerazione GPU fino a 5x.

Esempi di utilizzo#

Esporta un modello YOLO26n in un formato diverso come ONNX o TensorRT. Consulta la sezione Argomenti sottostante 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 descrive in dettaglio 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 vari piattaforme e ambienti. Una configurazione corretta garantisce 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, ad esempio 'onnx', 'torchscript', 'engine' (TensorRT) o altri. Ogni formato abilita la compatibilità con diversi ambienti di deployment.
namestrNoneNome della destinazione hardware per i formati che lo richiedono: architettura Hailo ('hailo8', 'hailo8l', 'hailo10h', 'hailo15h', 'hailo15l'; predefinito 'hailo8l'), chip Rockchip RKNN (predefinito 'rk3588'), SoC Huawei Ascend (un --soc_version CANN; predefinito 'Ascend310B4') o destinazione Qualcomm QNN HTP (predefinita '73'). Distinta dalla coppia di denominazione delle esecuzioni project/name utilizzata dalle altre modalità.
imgszint o tuple640Dimensione desiderata dell'immagine per l'input del modello. Può essere un numero intero per immagini quadrate (ad esempio 640 per 640×640) oppure una tupla (height, width) per dimensioni specifiche. Se non viene passata, l'esportazione riutilizza la dimensione di training registrata nel checkpoint caricato: i checkpoint ufficiali YOLO26 registrano 768 per depth, 224 per classify, 1024 per OBB e 640 per le altre attività, mentre un fine-tuning registra il valore imgsz con cui è stato addestrato. Un modello creato da un YAML non ha una dimensione di training registrata e usa 640.
kerasboolFalseAbilita l'esportazione nel formato Keras per TensorFlow SavedModel, fornendo compatibilità con il serving e le API TensorFlow.
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ò accelerare l'inferenza sull'hardware supportato) o 8 (INT8/PTQ, comprime ulteriormente il modello con una minima perdita di accuracy, principalmente per i edge devices; richiede calibrazione data/fraction); 32/non impostato è FP32. Un checkpoint addestrato con quantize=8 esporta sempre INT8: onnx e engine esportano dagli intervalli che trasportano senza calibrazione e altri formati o precisioni vengono rifiutati. I formati di esportazione che supportano la precisione mista di pesi/attivazioni accettano anche la notazione 'w8a8'/'w16a16'/'w8a16'/'w8a32'. Sostituisce i flag deprecati half/int8 (half=True16, int8=True8, 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 e CoreML, aumentando la flessibilità nella gestione di immagini con dimensioni variabili.
simplifyboolTrueSemplifica il grafo ONNX intermedio con onnxslim per le esportazioni che ne creano uno (vedi Formati di esportazione), migliorando potenzialmente le prestazioni e la compatibilità con i motori di inferenza.
opsetintNoneSpecifica la versione dell'opset ONNX per le esportazioni che creano un grafo ONNX (vedi Formati di esportazione), per la compatibilità con diversi parser e runtime ONNX. Se non impostata, usa l'ultima versione supportata.
workspacefloat o NoneNoneImposta la dimensione massima dello spazio 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 del dispositivo.
nmsbool, facoltativoNoneNone esporta previsioni grezze uno-a-molti per NMS esterni; True incorpora NMS ove supportato; False seleziona la testa senza NMS quando disponibile. L'NMS incorporato in CoreML supporta rilevamento, segmentazione e stima della posa con forme statiche. Consulta la guida al rilevamento end-to-end.
conffloatNoneSoglia di confidenza utilizzata ovunque venga generata la NMS al momento dell'esportazione: esportazioni nms=True; esportazioni Hailo di rilevamento non end-to-end; ed esportazioni IMX di rilevamento, posa e segmentazione, che impongono internamente nms=True. Il valore predefinito è 0.25 se non impostato.
ioufloat0.7Soglia IoU utilizzata ovunque venga generata la NMS al momento dell'esportazione: esportazioni nms=True; esportazioni Hailo di rilevamento non end-to-end; ed esportazioni IMX di rilevamento, posa e segmentazione, che impongono internamente nms=True.
max_detint300Numero massimo di rilevamenti conservati nell'output del modello esportato. Si applica alle esportazioni di nms=True su qualsiasi formato ad eccezione del rilevamento CoreML, il cui flusso nativo NMS non ha limiti di rilevamento, oltre alle esportazioni di rilevamento end-to-end senza NMS (YOLO26, YOLOv10, limitate al numero di ancoraggi disponibili) e alle esportazioni di rilevamento, posa e segmentazione di IMX.
agnostic_nmsboolFalseAbilita la NMS indipendente dalla classe ovunque venga generata la NMS al momento dell'esportazione tramite la pipeline standard nms=True, inclusa la fase NMS propria di CoreML, sopprimendo i riquadri sovrapposti con punteggio inferiore tra classi diverse anziché solo all'interno della stessa classe. Non viene rispettata dalle configurazioni NMS generate da Hailo o IMX, che non dispongono di un'opzione indipendente dalla classe e rimangono consapevoli della classe indipendentemente da questo flag. Viene inoltre incorporata nelle esportazioni end-to-end senza NMS (YOLO26, YOLOv10), dove impedisce solo che la stessa rilevazione compaia con più etichette di classe (duplicati IoU=1.0), non la soppressione basata sulla soglia IoU tra riquadri distinti.
batchint1Specifica la dimensione del batch per l'inferenza del modello esportato o il numero massimo di immagini che il modello esportato elaborerà contemporaneamente in modalità predict. Per le esportazioni Edge TPU, viene impostata automaticamente su 1.
devicestrNoneSpecifica il dispositivo per l'esportazione: GPU (device=0), CPU (device=cpu), MPS per il silicio Apple (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 il log del builder TensorRT al livello di severità VERBOSE durante l'esportazione format='engine'. Gli altri formati di esportazione lo ignorano.
datastrNonePercorso del file YAML del dataset, essenziale per la calibrazione della quantizzazione INT8; la classificazione richiede invece una directory di dataset o un nome di dataset integrato. Se non specificato con INT8 abilitato, Ultralytics seleziona un dataset di calibrazione specifico per il task ove necessario, o torna al dataset predefinito per il task del modello. Un checkpoint addestrato con quantize=8 trasporta i propri intervalli INT8 e non necessita di dati di calibrazione.
splitstr'val'Suddivisione del dataset ('train', 'val' o 'test') utilizzata per creare il dataloader di calibrazione della quantizzazione INT8 da data.
fractionfloat, int o list1.0Sottoinsieme del dataset utilizzato per la calibrazione INT8: una proporzione, un numero di immagini oppure valori [train, val, test]. 1 indica l'intera suddivisione, gli interi superiori a 1 indicano il numero di immagini e solo la voce facoltativa test accetta 0/0.0 per indicare nessuna immagine. Gli elenchi di due elementi lasciano completo test.

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

Formati di esportazione#

I formati di esportazione disponibili per YOLO26 sono nella tabella sottostante. Puoi esportare in qualsiasi formato usando l'argomento format, ovvero format='onnx' o format='engine'. Puoi effettuare previsioni o validazioni direttamente sui modelli esportati, ovvero yolo predict model=yolo26n.onnx. Gli esempi di utilizzo vengono mostrati per il tuo modello al termine dell'esportazione. I modelli possono anche essere esportati direttamente dal browser su Ultralytics Platform senza alcuna configurazione locale.

FormatoArgomento formatModelloMetadatiArgomenti
PyTorch-yolo26n.pt-
TorchScripttorchscriptyolo26n.torchscriptimgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n.onnximgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n_openvino_model/imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n.engineimgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n.mlpackageimgsz, dynamic, quantize, nms, batch, device
TF SavedModelsaved_modelyolo26n_saved_model/imgsz, keras, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n.pbimgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n_edgetpu.tfliteimgsz, quantize, opset, data, fraction, device
PaddlePaddlepaddleyolo26n_paddle_model/imgsz, batch, device
MNNmnnyolo26n.mnnimgsz, 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.onnximgsz, batch, name, quantize, simplify, opset, data, fraction, device
LiteRTlitertyolo26n.tfliteimgsz, quantize, batch, data, fraction, device
Hailohailoyolo26n_hailo_model/imgsz, name, quantize, data, fraction, simplify, conf, iou
Huawei Ascendascendyolo26n_ascend_model/imgsz, batch, name, quantize, opset, simplify, nms
Apple Core AIcoreaiyolo26n.aimodelimgsz, batch, quantize

nms=None utilizza i valori predefiniti per gli output grezzi per la NMS esterna. Imposta nms=False per selezionare una testa senza NMS disponibile; i formati non supportati ricorrono al loro percorso di output nativo. Le voci nms sopra indicano i formati che possono incorporare la NMS con nms=True.

Installazione automatica delle dipendenze di esportazione

La maggior parte dei formati richiede pacchetti non installati con ultralytics. Quando ne manca uno, l'esportazione lo installa a runtime con uv o pip, e su Linux con apt per pacchetti di sistema come il compilatore Edge TPU o Java per IMX. Per mantenere l'ambiente fisso, ad esempio in un'immagine container, in un lavoro CI o in un servizio di produzione, imposta YOLO_AUTOINSTALL=False. L'esportazione verifica comunque la presenza dei pacchetti mancanti e li segnala, ma lascia l'ambiente invariato e fallisce finché non vengono installati.

export YOLO_AUTOINSTALL=False

Opzioni di quantizzazione#

Usa l'argomento quantize per richiedere la precisione di esportazione. I valori di tipo stringa non sono case-sensitive e Ultralytics canonizza gli alias accettati prima dell'esportazione:

Valori di richiestaValore canonicoSignificato
8, "8", "int8", "w8a8"8Pesi e attivazioni INT8
16, "16", "fp16", "w16a16"16Pesi e attivazioni FP16
32, "32", "fp32", "w32a32"32Esportazione FP32; identico a non impostato tranne per i Programmi NMS ML di CoreML, che preimpostano a FP16
"w8a16""w8a16"Pesi INT8 con attivazioni a 16 bit (FP16; INT16 su LiteRT)
"w8a32""w8a32"Pesi INT8 con attivazioni FP32 (INT8 dinamico LiteRT, nessuna calibrazione necessaria)

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

Non tutti i formati di esportazione supportano qualsiasi precisione. Le richieste esplicite di quantize producono quella precisione oppure falliscono prima dell'esportazione:

FormatoFP32 (32/non impostato)FP16 (16)INT8 (8)W8A16 ("w8a16")Note
PyTorchN/DN/DN/DFormato nativo di addestramento/checkpoint.
TorchScript✅ Solo GPUL'esportazione FP16 di TorchScript richiede device=0; l'esportazione su CPU è FP32.
ONNXINT8 utilizza la quantizzazione statica e i dati di calibrazione di ONNX Runtime.
OpenVINOINT8 utilizza la quantizzazione post-addestramento NNCF.
TensorRTINT8 necessita di dati di calibrazione rappresentativi.
CoreML✅¹CoreML INT8 è una quantizzazione dei pesi; W8A16 utilizza pesi INT8 con attivazioni FP16. ¹I Programmi NMS ML non impostati preimpostano a FP16.
TF SavedModelL'esportazione INT8 utilizza la calibrazione TensorFlow.
TF GraphDefNessuna conversione di precisione in fase di esportazione.
Edge TPU✅ automaticoEdge TPU richiede INT8; viene abilitato automaticamente se non impostato.
PaddlePaddleNessuna conversione di precisione in fase di esportazione.
MNNINT8 è una quantizzazione dei pesi tramite conversione MNN.
NCNNFormato di runtime mobile/incorporato.
IMX500✅ automaticoIMX500 richiede la quantizzazione; INT8 viene abilitato automaticamente se non impostato.
RKNN✅ dipendente dal chipRK3588/RK3576/RK3566/RK3568/RK3562/RK2118/RV1126B supportano FP16 o INT8; le varianti RV1103/RV1106 supportano solo INT8.
ExecuTorchNessuna conversione di precisione in fase di esportazione.
Axelera✅ automaticoL'esportazione Axelera richiede INT8; viene abilitata automaticamente se non impostata.
DEEPX✅ automaticoL'esportazione DEEPX richiede INT8; viene abilitata automaticamente se non impostata.
Qualcomm QNN✅ automaticoL'esportazione QNN HTP è fissa su pesi INT8 con attivazioni a 16 bit.
LiteRTINT8 statico (8) e "w8a16" (pesi int8 + attivazioni int16) utilizzano dati di calibrazione; supportano anche "w8a32" INT8 dinamico (senza calibrazione). quantize=16 non è un'esportazione separata; un modello FP32 viene eseguito in FP16 a runtime tramite il delegato GPU.
Hailo✅ automaticoL'esportazione su Hailo richiede INT8; viene abilitata automaticamente se non è impostata.
Huawei Ascend✅ automaticoLe convoluzioni di Ascend AI Core accettano solo input FP16/INT8, quindi ATC compila in FP16; viene abilitato automaticamente se non impostato.
Core AIFP32 per impostazione predefinita o un asset FP16 .aimodel con quantize=16; nessun percorso INT8.

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

Addestramento consapevole della quantizzazione#

Le esportazioni INT8 sopra indicate sono quantizzazioni post-training (PTQ): gli intervalli vengono osservati in un singolo passaggio di calibrazione su data. L'addestramento consapevole della quantizzazione (QAT) apprende invece pesi che tollerano INT8 eseguendo il fine-tuning con la quantizzazione fittizia nel ciclo, il che recupera l'accuratezza che la sola calibrazione perde. Passa quantize=8 a train per eseguire il fine-tuning di un checkpoint pre-addestrato, quindi esportalo come al solito:

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)  # ranges travel with the checkpoint, no calibration data needed

Usa un tasso di apprendimento piccolo quando effettui il fine-tuning di un checkpoint preaddestrato. L'addestramento consapevole della quantizzazione può inizialmente ridurre la precisione e il suo vantaggio rispetto alla quantizzazione post-addestramento dipende dal modello, dal dataset e dal budget di addestramento. Valuta il modello esportato rispetto sia al checkpoint originale sia a un'esportazione quantizzata post-addestramento; i punteggi di quantizzazione fittizia durante l'addestramento non stabiliscono la precisione di distribuzione.

Quanto vale la QAT dipende da quanto bene la calibrazione del backend di esportazione gestisce il modello. I valori sottostanti sono mAP50-95 su COCO val2017, misurati con motori TensorRT 10.16 a imgsz=640 e batch 1, in cui ciascun 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

La QAT costa da 0,008 a 0,017 mAP50-95 rispetto a FP32 su tutta la gamma, mentre la quantizzazione post-training costa 0,010 su yolo26n e da 0,038 a 0,057 sui modelli più grandi. Pertanto, la QAT non offre quasi nulla sul modello più piccolo, dove la calibrazione funziona già bene, e offre da 0,030 a 0,044 sul resto. Aspettati cifre diverse su un altro set di dati, formato di esportazione o versione di TensorRT, e misura i tuoi valori.

I modelli di addestramento consapevole della quantizzazione richiedono compile=False; i moduli quantizzati di ModelOpt non supportano torch.compile.

Le convoluzioni di output finale della testa sono lasciate deliberatamente in float per limitare la perdita di precisione INT8; TensorRT abilita la precisione mista FP16 per i suoi strati non quantizzati. Il QAT viene eseguito tramite NVIDIA TensorRT Model Optimizer, installato automaticamente al primo utilizzo, e il checkpoint risultante richiede che NVIDIA TensorRT Model Optimizer sia installato per essere caricato. Tali intervalli viaggiano con il checkpoint e le esportazioni di onnx e engine emettono tali intervalli come nodi Q/DQ; altri formati leggono la calibrazione e rifiutano un checkpoint QAT.

E adesso?#

Trova la guida all'integrazione della tua destinazione di distribuzione — ONNX, TensorRT, CoreML e altre sono presenti nell'elenco completo delle integrazioni — per scoprire come eseguire il modello esportato.

FAQ#

  • L'esportazione di un modello YOLO26 nel formato ONNX è semplice con Ultralytics. Fornisce sia metodi Python che 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 ulteriori dettagli sul processo, incluse opzioni avanzate come la gestione di diverse dimensioni di input, fai riferimento alla guida all'integrazione di ONNX.

  • L'utilizzo di TensorRT per l'esportazione dei modelli offre significativi miglioramenti delle prestazioni. I modelli YOLO26 esportati in TensorRT possono raggiungere fino a 5x di accelerazione GPU, rendendolo ideale 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à: Integrati senza problemi con l'hardware NVIDIA.

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

  • La quantizzazione INT8 è un modo eccellente per comprimere il modello e accelerare 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="onnx", quantize=8, data="coco8.yaml")

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

  • La dimensione di input dinamica consente al modello esportato di gestire dimensioni di immagine variabili, offrendo flessibilità e ottimizzando l'efficienza di elaborazione per diversi casi d'uso. Durante l'esportazione verso formati come ONNX o TensorRT, l'abilitazione della 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 dimensionamento 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 provenienti da fonti diverse.

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

    • format: Il formato di destinazione per il 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: Precisione della quantizzazione, come 8/"int8", 16/"fp16", 32/"fp32", oppure gli schemi misti di pesi/attivazioni "w8a16" e "w8a32" (INT8 dinamico LiteRT) sui formati supportati. Consulta le Opzioni di quantizzazione.
    • optimize: Abilita una maggiore ottimizzazione del compilatore per le esportazioni DEEPX.

    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.

  • Quando esporti un modello YOLO in formati come ONNX o TensorRT, la struttura del tensore di output dipende dal task del modello. Comprendere questi output è importante per implementazioni di inferenza personalizzate.

    Per i modelli di rilevamento YOLO26 (ad es., yolo26n.pt) esportati con nms=False, i formati supportati producono un output senza NMS strutturato come (batch_size, max_detections, 6) con valori [x1, y1, x2, y2, confidence, class_id]. Con il parametro predefinito max_det=300, questo è comunemente (batch_size, 300, 6). Alcuni formati vincolati passano automaticamente al layout di output tradizionale quando gli operatori end-to-end non sono supportati.

    Per impostazione predefinita (nms=None), i modelli di rilevamento inclusi YOLO26 esportano previsioni grezze da uno a molti: l'output è in genere un singolo tensore strutturato come (batch_size, 4 + num_classes, num_predictions) in cui i canali rappresentano le coordinate dei bounding box più i punteggi per classe, e num_predictions dipende dalla risoluzione di input dell'esportazione (e può essere dinamica). La guida al rilevamento end-to-end illustra quali formati mantengono l'output end-to-end.

    Per i modelli di segmentazione (ad es. yolo26n-seg.pt), otterrai tipicamente due output: il primo tensore con una forma simile a (batch_size, 4 + num_classes + mask_dim, num_predictions) (box, punteggi di classe e coefficienti delle maschere) e il secondo tensore con una forma simile a (batch_size, mask_dim, proto_h, proto_w) contenente i prototipi di maschera utilizzati con i coefficienti per generare le maschere di istanza. Le dimensioni dipendono dalla risoluzione dell'input di esportazione (e possono essere dinamiche).

    Per i modelli di stima deipose (ad es. yolo26n-pose.pt), il tensore di output ha tipicamente una forma simile a (batch_size, 4 + num_classes + keypoint_dims, num_predictions), in cui keypoint_dims dipende dalla specifica dei pose (ad es. numero di keypoint e se è inclusa la confidenza) e num_predictions dipende dalla risoluzione dell'input di esportazione (e può essere dinamica).

    Gli esempi presenti negli esempi di inferenza ONNX mostrano come elaborare questi output per ciascun tipo di modello.

  • Al momento Ultralytics non fornisce un'API di inferenza C++ dedicata per i modelli YOLO. Per le distribuzioni in 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 di quel 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++ di TensorRT. Quando utilizzi la post-elaborazione C++ personalizzata, adatta il layout del tensore di output per la tua attività e le tue impostazioni di esportazione; le esportazioni di rilevamento YOLO26 predefinite restituiscono tensori di previsione grezzi che richiedono un NMS esterno. Esporta con nms=False per rilevamenti senza NMS strutturati come (batch, max_det, 6), oppure nms=True per incorporare l'NMS nei formati supportati.

  • Durante l'esportazione 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 nms=False è abilitato, la post-elaborazione (inclusi gli indici di classe) viene incorporata direttamente nel grafo esportato.

    Il tensore output0 contiene gli indici di classe, che sono internamente rappresentati come valori in 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 è necessario preservare la fedeltà degli indici di classe.

    Se sono necessari output FP16 completi, esporta con nms=None ed esegui la post-elaborazione esternamente.

Commenti