Esportazione di modelli YOLO26 in CoreML#
Apple integra un silicio AI dedicato — il Neural Engine — in ogni iPhone, iPad e Mac moderno, e CoreML è oggi il percorso supportato da Ultralytics per eseguire modelli su di esso. L'esportazione dei modelli Ultralytics YOLO26 in CoreML trasforma un checkpoint .pt addestrato in un .mlpackage nativo che esegue tutte e sette le attività YOLO sul dispositivo con bassa latenza, senza connessione di rete e senza che i dati lascino il dispositivo.
L'Ultralytics YOLO iOS SDK ufficiale e il plugin Flutter eseguono le esportazioni CoreML sul Neural Engine di Apple senza configurazione — inferenza in tempo reale dalla fotocamera, predizione di immagini singole e download automatico dei modelli per tutte e sette le attività YOLO26, inclusa Depth. Per la distribuzione su NPU Android, consulta l'integrazione Qualcomm QNN.
Esporta i modelli di classificazione con imgsz=224. Esporta i modelli di rilevamento, segmentazione, segmentazione semantica, profondità, posa e OBB con
imgsz=640. Questo standard 224/640 è condiviso dagli asset mobili ufficiali CoreML, LiteRT e QNN.
Apple ha introdotto il nuovo framework Core AI e il formato .aimodel per la generazione iOS 27 e macOS 27, e Ultralytics lo esporta con format="coreai". CoreML rimane il formato consigliato per gli SDK Ultralytics iOS e Flutter e per una compatibilità più ampia con i dispositivi Apple.
Watch: How to Export Ultralytics YOLO26 to CoreML with INT8 Quantization | Apple Deployment | iOS/MacOS 🍎
Che cos'è CoreML?#
CoreML (indicato come "Core ML" da Apple) è il framework di machine learning on-device di Apple. Carica i modelli nel moderno formato ML Program — il bundle .mlpackage prodotto dall'esportatore Ultralytics — e li distribuisce tra CPU, GPU e Apple Neural Engine (ANE) del dispositivo, la NPU dedicata presente in ogni chip Apple silicon. Poiché tutto viene eseguito localmente, l'inferenza funziona offline, non aggiunge latenza di rete e mantiene i dati dell'utente sul dispositivo.
CoreML si integra direttamente con il framework Vision di Apple, che gestisce il ridimensionamento e l'orientamento delle immagini prima dell'ingresso nel modello: è così che l'Ultralytics iOS SDK fornisce a YOLO i fotogrammi della fotocamera con un costo di preprocessing praticamente nullo.
Perché esportare YOLO26 in CoreML?#
- Velocità del Neural Engine: CoreML assegna le operazioni supportate al Neural Engine di Apple per un'inferenza on-device a bassa latenza. Consulta la tabella dei dispositivi fisici qui sotto e verifica le prestazioni della tua esportazione esatta sull'hardware di destinazione.
- Scegli l'output: Le esportazioni predefinite lasciano l'NMS alla tua applicazione. Usa
nms=Trueper incorporare l'NMS onms=Falseper la testa senza NMS di YOLO26. - Privato e offline: tutti i calcoli restano sul dispositivo — nessun round-trip verso il cloud, nessuna chiave API, piena privacy dei dati.
- Una sola esportazione, tutto l'ecosistema: lo stesso
.mlpackagefunziona su iOS, iPadOS, macOS, watchOS, tvOS e visionOS e alimenta l'iOS SDK e il plugin Flutter ufficiali di Ultralytics.
Prestazioni misurate#
Inferenza end-to-end su immagini singole per gli asset CoreML YOLO26n INT8 standardizzati v8.3.0 su un iPhone 17 Pro con 12 GB di memoria e iOS 26.5.2. Il suo A19 Pro dispone di una CPU a 6 core (2 core Performance e 4 core Efficiency), una GPU a 6 core con Neural Accelerators e un Neural Engine a 16 core. Ogni cella mostra il tempo totale (preprocessing + inferenza + postprocessing, esclusa l'annotazione), con la suddivisione per fase riportata sotto. Su iOS, Vision esegue il ridimensionamento dell'input all'interno della richiesta di inferenza, quindi il preprocessing è riportato come 0 e il relativo costo è incluso nell'inferenza.
| Modello | Attività | dimensione (pixel) | CPU Core ML .cpuOnly(ms) | CPU + ANE preferita Core ML .cpuAndNeuralEngine(ms) |
|---|---|---|---|---|
| YOLO26n | Detect | 640 | 9.2 0.0 / 9.2 / 0.0 | 3.2 0.0 / 3.2 / 0.0 |
| YOLO26n-seg | Segment | 640 | 12.6 0.0 / 12.0 / 0.5 | 4.8 0.0 / 4.2 / 0.6 |
| YOLO26n-sem | Semantica | 640 | 9.7 0.0 / 9.2 / 0.5 | 4.6 0.0 / 4.2 / 0.5 |
| YOLO26n-depth | Profondità | 640 | 25.0 0.0 / 24.1 / 0.9 | 5.3 0.0 / 4.5 / 0.9 |
| YOLO26n-cls | Classificazione | 224 | 2.2 0.0 / 2.2 / 0.0 | 1.9 0.0 / 1.9 / 0.0 |
| YOLO26n-pose | Posa | 640 | 11.9 0.0 / 11.9 / 0.0 | 3.9 0.0 / 3.9 / 0.0 |
| YOLO26n-obb | OBB | 640 | 10.6 0.0 / 10.6 / 0.0 | 3.4 0.0 / 3.4 / 0.0 |
- Gli asset della release esatta
v8.3.0dichiarano input 224×224 per la classificazione e 640×640 per tutte le altre attività. - I valori di Speed sono latenze burst su immagini singole: la media di 15 esecuzioni dopo 3 esecuzioni di riscaldamento su
bus.jpg, misurata tramite la temporizzazione per fase dell'iOS SDK attraverso l'harness di benchmark del plugin Flutter in modalità profile (codice nativo ottimizzato). L'ordine CPU/acceleratore è stato alternato tra le attività in un'unica sequenza. Le righe CPU richiedono Core ML.cpuOnly; le righe CPU + ANE preferita richiedono.cpuAndNeuralEngine, mentre il posizionamento finale delle operazioni è controllato da Core ML. Il funzionamento prolungato della fotocamera in tempo reale raggiunge valori più elevati perché include la pipeline di acquisizione e ridimensionamento, oltre alla stabilizzazione termica. Una precedente scansione della fotocamera, eseguita prima della standardizzazione, ha misurato 11.3 ms/frame per il rilevamento YOLO26n e 16.5 ms/frame per YOLO26n Depth sullo stesso dispositivo: consulta la documentazione sulle prestazioni dell'iOS SDK per il profiling a regime. - Confronta i risultati CPU/GPU Android nell'integrazione LiteRT e i risultati NPU Snapdragon nell'integrazione Qualcomm QNN.
Attività supportate#
L'esportazione CoreML supporta tutte e sette le attività Ultralytics. La segmentazione semantica e la stima della profondità sono disponibili solo con YOLO26, l'unica famiglia che distribuisce queste head.
| Attività | YOLOv8 | YOLO11 | YOLO26 |
|---|---|---|---|
| Rilevamento | ✅ | ✅ | ✅ |
| Segmentazione | ✅ | ✅ | ✅ |
| Semantica | ❌ | ❌ | ✅ |
| Profondità | ❌ | ❌ | ✅ |
| Classificazione | ✅ | ✅ | ✅ |
| Posa | ✅ | ✅ | ✅ |
| OBB | ✅ | ✅ | ✅ |
Esportazione dei modelli YOLO26 in CoreML#
Installazione#
Per installare il pacchetto richiesto, esegui:
# Install the required package for YOLO26
pip install ultralyticsIl convertitore coremltools viene installato automaticamente alla prima esportazione. L'esportazione viene eseguita su macOS o Linux x86; per istruzioni dettagliate e best practice, consulta la nostra guida all'installazione e la guida ai problemi comuni.
Utilizzo#
Il formato CoreML supporta le modalità Export, Predict e Validate. L'inferenza e la validazione con CoreML funzionano solo su macOS. Esporta il modello, quindi carica il modello esportato per eseguire l'inferenza o validarne l'accuratezza.
from ultralytics import YOLO
# Load a YOLO26 model
model = YOLO("yolo26n.pt")
# Export to CoreML with INT8 weight quantization, matching the official app models
model.export(format="coreml", quantize=8, imgsz=640) # use imgsz=224 for classificationfrom ultralytics import YOLO
# Load the exported CoreML model (macOS)
model = YOLO("yolo26n.mlpackage")
# Run inference
results = model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Load the exported CoreML model (macOS)
model = YOLO("yolo26n.mlpackage")
# Validate accuracy on the COCO8 dataset
metrics = model.val(data="coco8.yaml")Argomenti di esportazione#
| Argomento | Tipo | Predefinito | Descrizione |
|---|---|---|---|
format | str | 'coreml' | Formato di destinazione del modello esportato, che definisce la compatibilità con diversi ambienti di distribuzione. |
imgsz | int o tuple | 640 | Dimensione desiderata dell'immagine per l'input del modello. Può essere un numero intero per immagini quadrate o una tupla (height, width) per dimensioni specifiche. |
quantize | int o str | None | Precisione della quantizzazione (solo pesi per CoreML): 16 (FP16), 8 (INT8), "w8a16" (pesi INT8 con attivazioni FP16) oppure 32/non impostato (FP32). I programmi ML NMS usano FP16 (per l'anteprima Xcode e richiesto da segmentazione e posa); passa 32 per sovrascrivere il valore nel rilevamento. Sostituisce i flag deprecati half/int8. |
nms | bool, facoltativo | None | Seleziona l'output grezzo (None, predefinito), l'NMS incorporato (True) o la testa senza NMS (False). L'NMS incorporato supporta rilevamento, segmentazione e posa con dynamic=False. |
dynamic | bool | False | Consente dimensioni di input dinamiche. Non è supportato per i modelli di classificazione o RT-DETR e non può essere combinato con nms=True. |
batch | int | 1 | Specifica la dimensione dell'inferenza in batch del modello esportato o il numero massimo di immagini che il modello esportato elaborerà contemporaneamente in modalità predict. Valori superiori a 1 richiedono dynamic=True. |
device | str | None | Specifica il dispositivo per l'esportazione: GPU (device=0), CPU (device=cpu), MPS per Apple silicon (device=mps). |
Per ulteriori dettagli sul processo di esportazione, visita la pagina della documentazione Ultralytics sull'esportazione.
Utilizzo del Neural Engine come destinazione#
CoreML sceglie l'hardware tramite MLModelConfiguration.computeUnits. L'Ultralytics iOS SDK usa per impostazione predefinita .cpuAndNeuralEngine su iOS 16+, invece di .all: in un'app con fotocamera in tempo reale, la GPU è già impegnata nel compositing dell'anteprima e delle sovrimpressioni, quindi escluderla evita contesa e variazioni del frame time mentre l'ANE esegue il lavoro pesante. Imposta .cpuOnly solo per i test di compatibilità: la tabella sopra mostra il relativo costo.
L'esecuzione di un modello CoreML da Python su un host Mac (tramite Ultralytics o coremltools) segue la stessa regola: Ultralytics carica con ComputeUnit.CPU_AND_NE (macOS 13+, con fallback a CPU_ONLY sulle versioni precedenti di macOS), mantenendo l'inferenza sul Neural Engine (circa 3× più veloce della CPU). Questo evita anche una limitazione attuale dell'host macOS, per cui il valore predefinito ComputeUnit.ALL / CPU_AND_GPU — che aggiunge il percorso di compilazione GPU/MPSGraph — interrompe il processo con un'asserzione Error: MLIR pass manager failed su coremltools 9.x.
Distribuzione dei modelli YOLO26 CoreML esportati#
Il percorso più rapido è l'Ultralytics YOLO iOS SDK ufficiale, lo stesso pacchetto Swift che alimenta l'app Ultralytics per iOS e il plugin Flutter. Risolve automaticamente i nomi ufficiali dei modelli, scarica e memorizza nella cache .mlpackage e restituisce risultati completamente decodificati:
import UltralyticsYOLO
// Loads the official INT8 model (downloaded and cached on first use), then runs inference
let yolo = YOLO("yolo26n", task: .detect) { result in
if case .success(let model) = result {
let results = model(uiImage) // boxes, labels, confidences, timing
}
}Per le app con fotocamera, inserisci YOLOView dell'SDK per ottenere inferenza in tempo reale con sovrimpressioni native oppure usa il plugin Flutter per app multipiattaforma che condividono una base di codice con Android.
Integrare autonomamente un .mlpackage grezzo è altrettanto semplice con lo stack Apple: caricalo con MLModel, racchiudilo in un VNCoreMLRequest e fornisci le immagini tramite VNImageRequestHandler. Queste risorse illustrano i dettagli:
- Integrazione di un modello Core ML nella tua app: la guida di Apple per includere e chiamare un modello CoreML.
- CoreML Tools: riferimento per conversione, quantizzazione e ottimizzazione della toolchain
coremltoolsalla base di questa esportazione. - Report sulle prestazioni di Core ML in Xcode: profiling del posizionamento per livello sul dispositivo e della latenza per il tuo modello e dispositivo specifici.
Distribuisci il modello incorporandolo nel bundle dell'app (disponibilità immediata, ideale per modelli nano/piccoli) oppure scaricandolo al primo avvio e memorizzandolo nella cache (binario più piccolo, aggiornamenti semplici del modello). Le app ufficiali combinano entrambi gli approcci: i modelli nano predefiniti sono inclusi per l'uso immediato, mentre le varianti più grandi vengono scaricate su richiesta e memorizzate localmente nella cache.
Flusso di lavoro consigliato#
- Addestra il tuo modello con la modalità Train di Ultralytics oppure parti dai pesi ufficiali YOLO26
- Esporta con
model.export(format="coreml", quantize=8, imgsz=640)su macOS o Linux x86 (imgsz=224per la classificazione) - Verifica l'accuratezza con
model.val()su un Mac e crea un profilo con un report sulle prestazioni Core ML di Xcode sul dispositivo di destinazione - Distribuisci con l'iOS SDK, il plugin Flutter o la tua integrazione Vision, scegliendo come destinazione
.cpuAndNeuralEngine
Riepilogo#
In questa guida hai imparato a esportare i modelli Ultralytics YOLO26 nel formato .mlpackage di CoreML, a quantizzarli per l'Apple Neural Engine e a distribuirli con latenze di pochi millisecondi, tramite l'iOS SDK e il plugin Flutter ufficiali oppure la tua integrazione Vision. Per altre destinazioni di distribuzione, consulta la pagina della guida alle integrazioni e confronta i formati con la modalità Benchmark.
FAQ#
Esegui
model.export(format="coreml", imgsz=640)in Python oppureyolo export model=yolo26n.pt format=coreml imgsz=640dalla CLI su macOS o Linux x86. Usaimgsz=224per la classificazione e aggiungiquantize=8per ottenere modelli corrispondenti a quelli delle app ufficiali. L'esportazione produce un programma MLyolo26n.mlpackagepronto per Xcode, l'iOS SDK o il plugin Flutter.Usa
nms=Truese la tua applicazione ha bisogno di rilevamenti con NMS incluso. L'impostazione predefinitanms=Noneesporta output grezzi da uno a molti che la tua applicazione deve elaborare;nms=Falseseleziona la testa senza NMS di YOLO26. L'NMS incorporato supporta rilevamento, segmentazione e posa con forme statiche; gli altri task mantengono i propri output nativi.I modelli ufficiali delle app Ultralytics vengono distribuiti come INT8, riducendo al minimo le dimensioni del download e funzionando alle velocità indicate nella tabella sopra.
quantize=16(FP16) è un'alternativa conservativa che non comporta praticamente alcuna perdita di accuratezza. Valida la tua esportazione esatta conmodel.val()su un Mac prima della distribuzione.Imposta
MLModelConfiguration.computeUnits = .cpuAndNeuralEngine(il valore predefinito dell'iOS SDK su iOS 16+). Evita.allnelle app con fotocamera: la GPU è impegnata nel compositing dell'anteprima e pianificare lì l'inferenza causa variazioni del frame time. Conferma il posizionamento con un report sulle prestazioni Core ML di Xcode.Sì, su macOS:
yolo predict model=yolo26n.mlpackage source=image.jpgeyolo val model=yolo26n.mlpackage data=coco8.yamlfunzionano come qualsiasi altro formato. L'esecuzione CoreML richiede hardware Apple, quindi queste modalità non sono disponibili su Linux e Windows.Usa l'Ultralytics YOLO iOS SDK ufficiale (Swift Package) oppure il plugin Flutter. Entrambi caricano i modelli ufficiali in base al nome, con download e caching automatici, li eseguono sul Neural Engine e includono interfacce complete per la fotocamera in tempo reale: la tabella delle prestazioni misurate sopra è stata prodotta esattamente con questo stack.