Exportación a CoreML para modelos YOLO26#
Apple incluye silicio dedicado para IA (el Neural Engine) en cada iPhone, iPad y Mac modernos, y CoreML es la vía recomendada por Ultralytics para desplegar modelos en él hoy en día. Exportar modelos de Ultralytics YOLO26 a CoreML convierte un archivo de puntos de control entrenado de .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 los datos salgan del dispositivo.
El SDK oficial de Ultralytics YOLO para iOS y el complemento de Flutter ejecutan exportaciones de CoreML en el Apple Neural Engine de forma nativa: inferencia de cámara en tiempo real, predicción de imagen única y descarga automática de modelos para las siete tareas de YOLO26, incluida la profundidad. Para despliegues en NPU de Android, consulta la integración con Qualcomm QNN.
Exporta modelos de clasificación en imgsz=224. Exporta modelos de detección, segmentación, semántica, profundidad, pose y OBB en
imgsz=640. Este estándar de 224/640 es compartido por los recursos móviles oficiales de CoreML, LiteRT y QNN.
Apple ha introducido el nuevo Core AI framework y .aimodel format 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 SDKs de iOS y Flutter de Ultralytics y para una mayor compatibilidad con dispositivos Apple.
Watch: How to Export Ultralytics YOLO26 to CoreML with INT8 Quantization | Apple Deployment | iOS/MacOS 🍎
¿Qué es CoreML?#
CoreML (denominado "Core ML" por Apple) es el marco de aprendizaje automático en el dispositivo de Apple. Carga modelos en el formato moderno ML Program (el paquete .mlpackage que produce el exportador de Ultralytics) y los programa en la CPU, la GPU y el Apple Neural Engine (ANE) del dispositivo, la NPU dedicada en cada chip con silicio 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 marco Vision de Apple, que gestiona el escalado y la orientación de la imagen en su camino hacia el modelo; así es como el SDK de iOS de Ultralytics alimenta los 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 planifica las operaciones compatibles en el Neural Engine de Apple para la inferencia en el dispositivo de baja latencia. Consulta la tabla de dispositivos físicos a continuación y evalúa tu exportación exacta en tu hardware de destino.
- Sin NMS por diseño: YOLO26 es de extremo a extremo, por lo que el grafo exportado no necesita ninguna tubería de NMS y la decodificación toma menos de un milisegundo. Los modelos de detección más antiguos, como YOLO11, pueden integrar una tubería de NMS de CoreML con
nms=True. - Privado y sin conexión: Todo el cálculo permanece en el dispositivo; sin idas y vueltas a la nube, sin claves de API y con total privacidad de los datos.
- Una exportación, todo el ecosistema: El mismo
.mlpackagese ejecuta en iOS, iPadOS, macOS, watchOS, tvOS y visionOS, y alimenta el SDK de iOS y el complemento de Flutter oficiales de Ultralytics.
Rendimiento medido#
Inferencia de extremo a extremo para una sola imagen para los recursos CoreML INT8 de YOLO26n estandarizados v8.3.0 en un
iPhone 17 Pro con 12 GB de memoria e iOS 26.5.2. Su A19 Pro cuenta con una CPU de 6 núcleos
(2 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 + postprocesamiento, excluyendo
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 registra 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 | Detectar | 640 | 9.2 0.0 / 9.2 / 0.0 | 3.2 0.0 / 3.2 / 0.0 |
| YOLO26n-seg | Segmentar | 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 | Clasificar | 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 de lanzamiento exactos de
v8.3.0declaran entradas de 224×224 para clasificación y de 640×640 para cualquier otra tarea. - Los valores de velocidad son latencias de ráfaga para una sola imagen: la media de 15 ejecuciones tras 3 ejecuciones de calentamiento en
bus.jpg, medidas a través de la temporización por etapa del SDK de iOS mediante el banco de pruebas del complemento de Flutter en modo de perfil (código nativo optimizado). El orden de CPU/acelerador alternó entre tareas en un barrido secuencial. Las filas de CPU solicitan Core ML.cpuOnly; las filas de CPU + ANE preferido solicitan.cpuAndNeuralEngine, y la ubicación final de la operación la controla Core ML. La operación continua de la cámara en tiempo real se ejecuta a un nivel superior porque incluye la captura y la tubería de escalado más el asentamiento térmico. Un barrido de cámara preestándar histórico midió 11,3 ms/fotograma para la detección de YOLO26n y 16,5 ms/fotograma para la profundidad de YOLO26n en el mismo dispositivo; consulta el documento de rendimiento del SDK de iOS para ver la perfilación en estado estacionario. - Compara los resultados de CPU/GPU en Android en la integración con LiteRT y los resultados de la NPU Snapdragon en la integración con Qualcomm QNN.
Tareas compatibles#
La exportación a CoreML es compatible con 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.
Exportar modelos YOLO26 a CoreML#
Instalación#
Para instalar el paquete necesario, ejecuta:
# Install the required package for YOLO26
pip install ultralyticsEl conversor de coremltools se instala automáticamente en la primera exportación. La exportación se ejecuta en macOS o Linux x86; para obtener instrucciones detalladas y mejores prácticas, consulta nuestra guía de instalación y la guía de problemas comunes.
Uso#
El formato CoreML es compatible con los modos Export, Predict y Validate. La inferencia y la validación con CoreML se ejecutan únicamente en macOS. Exporta tu modelo y luego cárgalo para ejecutar la inferencia 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 para el modelo exportado, definiendo 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 número 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 en FP16), o 32/sin definir (FP32). Los programas de NMS ML usan FP16 (para la vista previa de Xcode, y requerido por segmentación y pose); pasa 32 para anularlo en detección. Reemplaza las banderas obsoletas half/int8. |
nms | bool | False | Incrusta NMS en el modelo exportado. Es compatible con detección, segmentación y pose (se ignora con una advertencia para otras tareas); no es necesario para YOLO26 sin NMS, úsalo para modelos anteriores como YOLO11. |
dynamic | bool | False | Permite tamaños de entrada dinámicos, mejorando la flexibilidad al manejar diferentes dimensiones de imagen. |
batch | int | 1 | Especifica el tamaño de inferencia por lotes del modelo de exportación o el número máximo de imágenes que el modelo exportado procesará simultáneamente en el modo predict. |
device | str | None | Especifica el dispositivo para la exportación: GPU (device=0), CPU (device=cpu), MPS para Apple silicon (device=mps). |
Para más detalles sobre el proceso de exportación, visita la página de documentación de Ultralytics sobre exportación.
Dirigido al Neural Engine#
CoreML selecciona el hardware mediante MLModelConfiguration.computeUnits. El SDK de iOS de Ultralytics utiliza de forma predeterminada .cpuAndNeuralEngine en iOS 16+ 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 conflictos y fluctuaciones en el tiempo de los fotogramas mientras el ANE realiza el trabajo pesado. Fija .cpuOnly únicamente para pruebas de compatibilidad; la tabla anterior muestra lo que cuesta.
Ejecutar un modelo CoreML desde Python en un Mac host (a través de Ultralytics o coremltools) sigue la misma regla: Ultralytics se carga con ComputeUnit.CPU_AND_NE (macOS 13+, recurriendo a CPU_ONLY en macOS más antiguos), manteniendo la inferencia en el Neural Engine (~3 veces más rápido que la CPU). Esto también evita una limitación actual del host macOS donde el ComputeUnit.ALL / CPU_AND_GPU predeterminado —que añade la ruta de compilación de GPU/MPSGraph— aborta el proceso con una aserción de Error: MLIR pass manager failed en coremltools 9.x.
Desplegar modelos CoreML de YOLO26 exportados#
La vía más rápida es el SDK oficial de Ultralytics YOLO para iOS, el mismo paquete de Swift que impulsa la aplicación de iOS de Ultralytics y el complemento de Flutter. Resuelve automáticamente los nombres oficiales de los modelos, descarga y almacena en caché el .mlpackage, y devuelve resultados totalmente 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 inferencia en tiempo real con superposiciones nativas, o utiliza el complemento de Flutter para aplicaciones multiplataforma que comparten una misma base de código con Android.
Integrar un .mlpackage en bruto por ti mismo también es sencillo con la pila de Apple: cárgalo con MLModel, envuélvelo en un VNCoreMLRequest y alimenta las imágenes a través de VNImageRequestHandler. Estos recursos cubren los detalles:
- Integrating a Core ML Model into Your App: La guía de Apple para empaquetar y llamar a un modelo CoreML.
- CoreML Tools: Referencia de conversión, cuantización y optimización para la cadena de herramientas
coremltoolsque impulsa esta exportación. - Xcode Core ML Performance Reports: Ubicación del dispositivo por capa y perfilado de latencia para tu modelo y dispositivo exactos.
Distribuye el modelo ya sea integrado en el paquete de la aplicación (disponibilidad instantánea, ideal para modelos nano/small) o descargado en la primera ejecución y almacenado en caché (binario más pequeño, actualizaciones de modelos sencillas). Las aplicaciones oficiales combinan ambos enfoques: los modelos nano predeterminados se empaquetan para un uso inmediato, mientras que las variantes más grandes se descargan bajo demanda y se almacenan en caché localmente.
Flujo de trabajo recomendado#
- Entrena tu modelo con el modo Train de Ultralytics, o comienza a partir 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 perfila con un informe de rendimiento de Xcode Core ML en tu dispositivo de destino - Despliega con el SDK de iOS, el complemento de Flutter o tu propia integración de Vision, apuntando a
.cpuAndNeuralEngine
Resumen#
En esta guía, has aprendido a exportar modelos de Ultralytics YOLO26 al formato .mlpackage de CoreML, cuantizarlos para el Apple Neural Engine y desplegarlos con latencias de un solo dígito en milisegundos, ya sea a través del SDK de iOS y el complemento de Flutter oficiales o de tu propia integración de Vision. Para otros destinos de despliegue, explora la página de la guía de integración y compara formatos con el modo Benchmark.
FAQ#
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. Utilizaimgsz=224para la clasificación y añadequantize=8para que coincida con los modelos oficiales de la aplicación. La exportación produce un programa MLyolo26n.mlpackagelisto para Xcode, el SDK de iOS o el complemento de Flutter.No. YOLO26 no requiere NMS de extremo a extremo, por lo que el gráfico exportado ya emite detecciones finales y costos de decodificación muy por debajo de un milisegundo. La opción
nms=Trueexiste para modelos anteriores como YOLO11, donde incrusta NMS para que tu aplicación no tenga que implementar la supresión. Es compatible con modelos de detección, segmentación y pose;nms=Truese ignora con una advertencia para otras tareas.Los modelos oficiales de la aplicación de Ultralytics se distribuyen como INT8, lo que minimiza el tamaño de descarga y se ejecuta a las velocidades de la tabla anterior.
quantize=16(FP16) es una alternativa conservadora prácticamente sin pérdida de precisión. Valida tu exportación exacta conmodel.val()en un Mac antes de realizar el lanzamiento.Configura
MLModelConfiguration.computeUnits = .cpuAndNeuralEngine(el valor predeterminado del SDK de iOS en iOS 16+). Evita.allen aplicaciones de cámara: la GPU está ocupada componiendo la vista previa y programar la inferencia allí provoca fluctuaciones en el tiempo de los fotogramas. Confirma la ubicación con un informe de rendimiento de Xcode Core ML.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 y Windows.Utiliza el SDK oficial de Ultralytics YOLO para iOS (paquete de Swift) o el complemento de Flutter. Ambos cargan modelos oficiales por nombre con descarga y almacenamiento en caché automáticos, los ejecutan en el Neural Engine e incluyen interfaces de usuario de cámara en tiempo real completas; la tabla de rendimiento medida anterior se produjo exactamente con esta pila.