Exportación de CoreML para modelos YOLO26#
Apple incluye silicio dedicado para IA —el Neural Engine— en todos los iPhone, iPad y Mac modernos, y CoreML es actualmente la vía compatible de Ultralytics para desplegar modelos en él. Exportar modelos de Ultralytics YOLO26 a CoreML convierte un checkpoint entrenado .pt en un .mlpackage nativo que ejecuta las siete tareas de YOLO en el dispositivo con baja latencia, sin conexión de red y sin que ningún dato salga del dispositivo.
El SDK oficial de Ultralytics YOLO para iOS y el plugin de Flutter ejecutan exportaciones de CoreML en el Apple Neural Engine directamente —inferencia de cámara en tiempo real, predicción de imágenes individuales y descarga automática del modelo para las siete tareas de YOLO26, incluida Depth. Para el despliegue en la NPU de Android, consulta la integración de Qualcomm QNN.
Exporta los modelos de clasificación con imgsz=224. Exporta los modelos de detección, segmentación, segmentación semántica, profundidad, pose y OBB con
imgsz=640. Este estándar 224/640 es común a los recursos móviles oficiales de CoreML, LiteRT y QNN.
Apple ha introducido el nuevo framework Core AI y el formato .aimodel para la generación de iOS 27 y macOS 27, y Ultralytics lo exporta con format="coreai". CoreML sigue siendo el formato recomendado para los SDK de Ultralytics para iOS y Flutter, así como para una compatibilidad más amplia con dispositivos Apple.
Watch: How to Export Ultralytics YOLO26 to CoreML with INT8 Quantization | Apple Deployment | iOS/MacOS 🍎
¿Qué es CoreML?#
CoreML (Apple lo presenta como «Core ML») es el framework de aprendizaje automático en el dispositivo de Apple. Carga modelos en el formato moderno ML Program —el paquete .mlpackage que genera el exportador de Ultralytics— y los distribuye entre la CPU, la GPU y el Apple Neural Engine (ANE) del dispositivo, la NPU dedicada de todos los chips de Apple. Como todo se ejecuta localmente, la inferencia funciona sin conexión, no añade latencia de red y mantiene los datos del usuario en el dispositivo.
CoreML se integra directamente con el framework Vision de Apple, que gestiona el escalado y la orientación de la imagen al introducirla en el modelo; así es como el SDK de Ultralytics para iOS proporciona fotogramas de la cámara a YOLO con un coste de preprocesamiento prácticamente nulo.
¿Por qué exportar YOLO26 a CoreML?#
- Velocidad del Neural Engine: CoreML distribuye las operaciones compatibles en el Neural Engine de Apple para lograr una inferencia en el dispositivo con baja latencia. Consulta la tabla de dispositivos físicos que aparece a continuación y compara tu exportación exacta en el hardware de destino.
- Elige la salida: Las exportaciones predeterminadas dejan NMS a tu aplicación. Usa
nms=Truepara integrar NMS, onms=Falsepara la cabeza sin NMS de YOLO26. - Privado y sin conexión: Todo el procesamiento permanece en el dispositivo —sin comunicaciones de ida y vuelta con la nube, sin claves de API y con privacidad de los datos total.
- Una exportación para todo el ecosistema: El mismo
.mlpackagefunciona en iOS, iPadOS, macOS, watchOS, tvOS y visionOS, y es la base del SDK para iOS oficial de Ultralytics y del plugin de Flutter.
Rendimiento medido#
Inferencia de extremo a extremo de una sola imagen para los recursos estandarizados de CoreML v8.3.0 YOLO26n INT8 en un
iPhone 17 Pro con 12 GB de memoria y iOS 26.5.2. Su A19 Pro tiene una CPU de 6 núcleos
(2 núcleos de rendimiento y 4 de eficiencia), una GPU de 6 núcleos con aceleradores neuronales y un Neural Engine de 16 núcleos. Cada celda
muestra el tiempo total (preprocesamiento + inferencia + posprocesamiento, sin incluir
la anotación), con el desglose por etapa debajo. En iOS, Vision realiza el escalado de entrada dentro de la solicitud de inferencia,
por lo que el preprocesamiento se indica como 0 y su coste se incluye en la inferencia.
| Modelo | Tarea | tamaño (píxeles) | CPU Core ML .cpuOnly(ms) | CPU + ANE preferido 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 | Semántica | 640 | 9.7 0.0 / 9.2 / 0.5 | 4.6 0.0 / 4.2 / 0.5 |
| YOLO26n-depth | Profundidad | 640 | 25.0 0.0 / 24.1 / 0.9 | 5.3 0.0 / 4.5 / 0.9 |
| YOLO26n-cls | Clasificación | 224 | 2.2 0.0 / 2.2 / 0.0 | 1.9 0.0 / 1.9 / 0.0 |
| YOLO26n-pose | Pose | 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 |
- Los recursos exactos de la versión
v8.3.0declaran entradas de 224×224 para la clasificación y de 640×640 para todas las demás tareas. - Los valores de velocidad son latencias de ráfaga para una sola imagen: la media de 15 ejecuciones después de 3 ejecuciones de calentamiento en
bus.jpg, medidas mediante la temporización por etapas del SDK de iOS a través del sistema de pruebas del plugin de Flutter en modo de perfil (código nativo optimizado). El orden de CPU/acelerador se alternó entre tareas en un único recorrido secuencial. Las filas de CPU solicitan Core ML.cpuOnly; las filas de CPU + ANE preferido solicitan.cpuAndNeuralEngine, y Core ML controla la asignación final de las operaciones. El funcionamiento sostenido de la cámara en tiempo real alcanza valores superiores porque incluye la canalización de captura y escalado, además de la estabilización térmica. En una prueba histórica de cámara anterior a la estandarización se midieron 11.3 ms/fotograma para la detección con YOLO26n y 16.5 ms/fotograma para Depth con YOLO26n en el mismo dispositivo; consulta la documentación de rendimiento del SDK de iOS para el perfilado en régimen estable. - Compara los resultados de CPU/GPU de Android en la integración de LiteRT y los resultados de la NPU de Snapdragon en la integración de Qualcomm QNN.
Tareas compatibles#
La exportación de CoreML admite las siete tareas de Ultralytics. La segmentación semántica y la estimación de profundidad solo están disponibles con YOLO26, la única familia que incluye esas cabezas.
| Tarea | YOLOv8 | YOLO11 | YOLO26 |
|---|---|---|---|
| Detección | ✅ | ✅ | ✅ |
| Segmentación | ✅ | ✅ | ✅ |
| Semántica | ❌ | ❌ | ✅ |
| Profundidad | ❌ | ❌ | ✅ |
| Clasificación | ✅ | ✅ | ✅ |
| Pose | ✅ | ✅ | ✅ |
| OBB | ✅ | ✅ | ✅ |
Exportar modelos YOLO26 a CoreML#
Instalación#
Para instalar el paquete necesario, ejecuta:
# Install the required package for YOLO26
pip install ultralyticsEl convertidor coremltools se instala automáticamente durante la primera exportación. La exportación se ejecuta en macOS o Linux x86; para consultar instrucciones detalladas y buenas prácticas, revisa nuestra guía de instalación y la guía de problemas habituales.
Uso#
El formato CoreML admite los modos Export, Predict y Validate. La inferencia y la validación con CoreML solo se ejecutan en macOS. Exporta tu modelo y, después, carga el modelo exportado para ejecutar inferencias o validar su precisión.
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")Argumentos de exportación#
| Argumento | Tipo | Predeterminado | Descripción |
|---|---|---|---|
format | str | 'coreml' | Formato de destino del modelo exportado, que define la compatibilidad con diversos entornos de despliegue. |
imgsz | int o tuple | 640 | Tamaño de imagen deseado para la entrada del modelo. Puede ser un entero para imágenes cuadradas o una tupla (height, width) para dimensiones específicas. |
quantize | int o str | None | Precisión de cuantización (solo pesos para CoreML): 16 (FP16), 8 (INT8), "w8a16" (pesos INT8 con activaciones FP16) o 32/sin definir (FP32). Los ML Program de NMS usan FP16 (para la vista previa de Xcode y porque es obligatorio para segmentación y pose); pasa 32 para anularlo en detección. Sustituye a las opciones obsoletas half/int8. |
nms | bool, opcional | None | Selecciona la salida en bruto (None, predeterminada), NMS integrado (True), o la cabeza sin NMS (False). El NMS integrado admite detección, segmentación y pose con dynamic=False. |
dynamic | bool | False | Permite tamaños de entrada dinámicos. No es compatible con modelos de clasificación o RT-DETR, y no se puede combinar con nms=True. |
batch | int | 1 | Especifica el tamaño de inferencia por lotes del modelo exportado o el número máximo de imágenes que el modelo exportado procesará de forma concurrente en el modo predict. Los valores superiores a 1 requieren dynamic=True. |
device | str | None | Especifica el dispositivo para la exportación: GPU (device=0), CPU (device=cpu) o MPS para Apple silicon (device=mps). |
Para obtener más información sobre el proceso de exportación, visita la página de la documentación de Ultralytics sobre exportación.
Orientación al Neural Engine#
CoreML selecciona el hardware mediante MLModelConfiguration.computeUnits. El SDK de Ultralytics para iOS utiliza .cpuAndNeuralEngine de forma predeterminada en iOS 16 y versiones posteriores, en lugar de .all: en una aplicación de cámara en tiempo real, la GPU ya está ocupada componiendo la vista previa y las superposiciones, por lo que excluirla evita la competencia por recursos y las variaciones del tiempo por fotograma mientras el ANE realiza la mayor parte del trabajo. Fija .cpuOnly solo para pruebas de compatibilidad; la tabla anterior muestra el coste.
Ejecutar un modelo de CoreML desde Python en un Mac anfitrión (mediante Ultralytics o coremltools) sigue la misma regla: Ultralytics carga con ComputeUnit.CPU_AND_NE (macOS 13 o posterior, y recurre a CPU_ONLY en versiones anteriores de macOS), manteniendo la inferencia en el Neural Engine (aproximadamente 3 veces más rápida que en la CPU). Esto también evita una limitación actual del anfitrión macOS por la que los valores predeterminados ComputeUnit.ALL / CPU_AND_GPU —que añaden la ruta de compilación GPU/MPSGraph— interrumpen el proceso con una aserción Error: MLIR pass manager failed en coremltools 9.x.
Desplegar modelos YOLO26 de CoreML exportados#
La vía más rápida es el SDK oficial de Ultralytics YOLO para iOS, el mismo paquete Swift que impulsa la aplicación de Ultralytics para iOS y el plugin de Flutter. Resuelve automáticamente los nombres oficiales de los modelos, descarga y almacena en caché el .mlpackage, y devuelve resultados completamente decodificados:
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
}
}Para aplicaciones de cámara, añade el YOLOView del SDK para obtener inferencia en tiempo real con superposiciones nativas, o utiliza el plugin de Flutter para aplicaciones multiplataforma que compartan una base de código con Android.
También es sencillo integrar directamente un .mlpackage sin procesar con la pila de Apple: cárgalo con MLModel, envuélvelo en un VNCoreMLRequest y proporciona las imágenes mediante VNImageRequestHandler. Estos recursos explican los detalles:
- Integrar un modelo de Core ML en tu aplicación: guía de Apple para empaquetar y utilizar un modelo de CoreML.
- CoreML Tools: referencia de conversión, cuantización y optimización para la cadena de herramientas
coremltoolsque impulsa esta exportación. - Informes de rendimiento de Core ML de Xcode: perfilado de la asignación de cada capa al dispositivo y de la latencia para tu modelo y dispositivo concretos.
Incluye el modelo en el paquete de la aplicación (disponibilidad inmediata, ideal para modelos nano/pequeños) o descárgalo durante la primera ejecución y guárdalo en caché (binario más pequeño y actualizaciones sencillas del modelo). Las aplicaciones oficiales combinan ambos enfoques: los modelos nano predeterminados se incluyen para poder utilizarlos de inmediato, mientras que las variantes más grandes se descargan bajo demanda y se almacenan localmente en caché.
Flujo de trabajo recomendado#
- Entrena tu modelo con el modo Train de Ultralytics o parte de los pesos oficiales de YOLO26
- Exporta con
model.export(format="coreml", quantize=8, imgsz=640)en macOS o Linux x86 (imgsz=224para clasificación) - Verifica la precisión con
model.val()en un Mac y crea un perfil con un informe de rendimiento de Core ML de Xcode en tu dispositivo de destino - Despliega con el SDK para iOS, el plugin de Flutter o tu propia integración con Vision, orientada a
.cpuAndNeuralEngine
Resumen#
En esta guía has aprendido a exportar modelos Ultralytics YOLO26 al formato .mlpackage de CoreML, cuantificarlos para el Apple Neural Engine y desplegarlos con latencias de un solo dígito en milisegundos, ya sea mediante el SDK oficial para iOS y el plugin de Flutter o mediante tu propia integración con Vision. Para conocer otros destinos de despliegue, consulta la página de la guía de integraciones y compara formatos con el modo Benchmark.
Preguntas frecuentes#
Ejecuta
model.export(format="coreml", imgsz=640)en Python oyolo export model=yolo26n.pt format=coreml imgsz=640desde la CLI en macOS o Linux x86. Usaimgsz=224para clasificación y añadequantize=8para que coincida con los modelos de las aplicaciones oficiales. La exportación produce un ML Programyolo26n.mlpackagelisto para Xcode, el SDK para iOS o el plugin de Flutter.Usa
nms=Truesi tu aplicación necesita detecciones con NMS incluido. La opción predeterminadanms=Noneexporta salidas en bruto de uno a muchos para que tu aplicación las procese;nms=Falseselecciona la cabeza sin NMS de YOLO26. El NMS integrado admite detección, segmentación y pose con formas estáticas; otras tareas conservan sus salidas nativas.Los modelos de las aplicaciones oficiales de Ultralytics se distribuyen como INT8, lo que minimiza el tamaño de descarga y ofrece las velocidades de la tabla anterior.
quantize=16(FP16) es una alternativa conservadora que prácticamente no pierde precisión. Valida tu exportación exacta conmodel.val()en un Mac antes de distribuirla.Establece
MLModelConfiguration.computeUnits = .cpuAndNeuralEngine(el valor predeterminado del SDK para iOS en iOS 16 y versiones posteriores). Evita.allen aplicaciones de cámara: la GPU está ocupada componiendo la vista previa y programar allí la inferencia provoca variaciones en el tiempo por fotograma. Confirma la asignación con un informe de rendimiento de Core ML de Xcode.Sí, en macOS:
yolo predict model=yolo26n.mlpackage source=image.jpgyyolo val model=yolo26n.mlpackage data=coco8.yamlfuncionan como cualquier otro formato. La ejecución de CoreML requiere hardware de Apple, por lo que estos modos no están disponibles en Linux ni Windows.Utiliza el SDK oficial de Ultralytics YOLO para iOS (paquete Swift) o el plugin de Flutter. Ambos cargan los modelos oficiales por nombre con descarga y almacenamiento en caché automáticos, los ejecutan en el Neural Engine e incluyen interfaces completas de cámara en tiempo real; la tabla de rendimiento medido anterior se elaboró exactamente con esta pila.