Conversión de Modelos Core ML: qué es, etapas y métodos de conversión

Autor: IT Sectr Publicado: 2026-07-17 Tiempo de lectura: 6 min

Core ML Model Conversion es el proceso de transformar modelos de machine learning entrenados desde frameworks populares al formato Core ML (.mlmodel), optimizado para ejecución en dispositivos Apple. La conversión es necesaria porque PyTorch, TensorFlow y otros frameworks usan sus propios formatos incompatibles con Core ML Runtime. Según la documentación de coremltools, 2025, la biblioteca admite conversión desde PyTorch, TensorFlow 1.x y 2.x, Keras, ONNX, scikit-learn y libsvm. coremltools reemplaza automáticamente las operaciones no soportadas por equivalentes, preservando la precisión numérica del modelo.

Puntos Clave

  • Core ML Model Conversion — transformación de modelos ML al formato .mlmodel para ejecución en dispositivos Apple.
  • La herramienta principal es coremltools, una biblioteca Python de código abierto de Apple.
  • Admite PyTorch, TensorFlow, Keras, ONNX y scikit-learn.
  • El proceso incluye trazado del grafo, reemplazo de operaciones y verificación de precisión.
  • Después de la conversión, el modelo se puede cuantizar a FP16 o INT8 para aceleración.

Qué es Core ML Model Conversion

Core ML Model Conversion es el proceso de transformar un modelo de machine learning entrenado desde el formato del framework de origen al formato .mlmodel que entiende Core ML Runtime en dispositivos Apple. Sin conversión, un modelo entrenado en PyTorch o TensorFlow no puede cargarse ni ejecutarse directamente en iOS o macOS.

El proceso de conversión incluye la traducción del grafo de cálculo: cada operador del framework de origen (Conv2D, BatchNorm, ReLU) se asigna al operador Core ML correspondiente. Si no existe un reemplazo directo, coremltools utiliza operaciones compuestas o capas personalizadas. Según Apple ML Research, la biblioteca cubre más de 200 operadores de diversos frameworks.

Después de la conversión, el modelo se guarda en el formato de paquete .mlmodel, que incluye una descripción del grafo en protobuf, pesos en forma binaria y metadatos. Este archivo luego se compila en mlmodelc para su ejecución en el dispositivo de destino.

Frameworks y Formatos Soportados

coremltools versión 7.x admite la conversión desde seis fuentes. PyTorch — mediante torch.jit.trace o torch.export, TensorFlow 2.x — mediante SavedModel y Keras H5, TensorFlow 1.x — mediante grafo congelado .pb. Para ONNX se utiliza una representación intermedia que luego se traduce a Core ML.

Matriz de Compatibilidad de Frameworks

FrameworkFormato de EntradaAPI de coremltools
PyTorchTorchScript, torch.exportCTConverter / convert()
TensorFlow 2.xSavedModel, Keras H5convert()
TensorFlow 1.xFrozen .pbconvert()
ONNX.onnxonnx_to_coreml()
scikit-learn.pkl / Pipelineconverters.sklearn.convert()
Keras.h5 / .kerasconvert()

Herramientas de Conversión: coremltools

coremltools es la biblioteca Python oficial de código abierto de Apple, disponible mediante pip install coremltools. La biblioteca proporciona una API unificada para la conversión desde todos los frameworks soportados, así como herramientas de postprocesamiento: cuantización, verificación de precisión y visualización del grafo.

Instalación y conversión básica de modelo desde PyTorch:

python
import coremltools as ct
import torch
import torchvision

model = torchvision.models.resnet18(pretrained=True)
model.eval()

example_input = torch.rand(1, 3, 224, 224)
traced_model = torch.jit.trace(model, example_input)

mlmodel = ct.convert(
    traced_model,
    source="pytorch",
    inputs=[ct.ImageType(shape=example_input.shape)]
)
mlmodel.save("ResNet18.mlmodel")

Para la conversión desde TensorFlow, use SavedModel como origen. coremltools determina automáticamente los tensores de entrada y salida según signature_def:

python
import coremltools as ct

mlmodel = ct.convert(
    "saved_model_dir",
    source="tensorflow",
    @minimum_deployment_target=ct.target.iOS16
)
mlmodel.save("MyTFModel.mlmodel")

Etapas de Conversión del Modelo

El proceso de conversión consta de cuatro etapas. En la primera etapa, coremltools carga el modelo de origen y realiza el trazado (tracing) o escaneo del grafo. Para PyTorch se utiliza torch.jit.trace, que ejecuta una entrada de muestra a través del modelo y registra la secuencia de operaciones.

En la segunda etapa se realiza el mapeo de operadores. Cada operador del grafo de origen se asigna a un operador de Core ML. Si no existe un reemplazo directo, coremltools divide el operador en una secuencia de operadores soportados. Según la documentación de coremltools, la cobertura de operadores de PyTorch supera el 95% para arquitecturas típicas.

La tercera etapa es la optimización del grafo. coremltools realiza fusión de operaciones (por ejemplo, conv + batch norm), eliminación de transformaciones innecesarias y reordenamiento de operadores para mejorar la eficiencia. La cuarta etapa es la serialización en el formato .mlmodel con preservación de pesos y metadatos.

Problemas Comunes y Sus Soluciones

El problema más frecuente en la conversión son las operaciones no soportadas. Si el modelo contiene un operador que falta en Core ML, coremltools informa un error con el nombre de la operación. La solución es reemplazar el operador con una combinación equivalente de operadores soportados o implementar una capa personalizada mediante la API de capas personalizadas.

El segundo problema es la discrepancia de dimensiones. PyTorch usa el formato NCHW, mientras que Core ML usa NHWC por defecto. coremltools inserta automáticamente la transposición, pero a veces el orden de los ejes se determina incorrectamente. Verifique las dimensiones de entrada y salida en los registros de conversión y, si es necesario, especifique input_features con los nombres correctos.

El tercer problema es la pérdida de precisión después de la cuantización. Al convertir con paleta FP16 o INT8, la precisión del modelo puede disminuir. coremltools proporciona la utilidad ct.models.CompiledModel para comparar las salidas del modelo original y convertido con los mismos datos de entrada. Si la discrepancia supera el 1%, use cuantización con paleta FP16 sin calibración o evite la cuantización por completo.

Ejemplos de Conversión desde PyTorch y TensorFlow

Un ejemplo de conversión del modelo MobileNetV3 desde PyTorch con especificación del tipo de entrada y versión mínima de iOS. Use ct.ImageType para la normalización automática de imágenes:

python
import coremltools as ct
import torchvision

model = torchvision.models.mobilenet_v3_small(
    pretrained=True
)
model.eval()
example = torch.rand(1, 3, 224, 224)
traced = torch.jit.trace(model, example)

mlmodel = ct.convert(
    traced,
    source="pytorch",
    inputs=[ct.ImageType(
        shape=example.shape,
        scale=1.0/255.0,
        bias=[0, 0, 0]
    )],
    @minimum_deployment_target=ct.target.iOS16
)

# Guardar en .mlmodel para compilación posterior en Xcode
mlmodel.save("MobileNetV3.mlmodel")

Un ejemplo de conversión desde TensorFlow Keras con cuantización FP16. Especifique minimum_deployment_target para habilitar soporte FP16 en dispositivos con Apple A13 y posteriores:

python
import coremltools as ct
from tensorflow import keras

keras_model = keras.applications.EfficientNetB0(
    weights="imagenet"
)

mlmodel = ct.convert(
    keras_model,
    source="tensorflow",
    @minimum_deployment_target=ct.target.iOS17
)

# Cuantizar pesos a FP16 para reducción de tamaño 2x
mlmodel_fp16 = ct.models.neural_network.quantization_utils.quantize_weights(
    mlmodel, 16
)
mlmodel_fp16.save("EfficientNetB0_fp16.mlmodel")

Preguntas Frecuentes

¿Puedo convertir un modelo sin acceso al código fuente?

Sí, si el modelo está guardado en formato TorchScript, SavedModel u ONNX. coremltools carga estos formatos sin necesidad del código fuente y realiza la conversión basándose en el grafo de cálculo.

¿Cómo saber qué operaciones no son compatibles en Core ML?

coremltools muestra la lista de operaciones no soportadas en el registro durante la conversión. Use ct.utils.get_coreml_operations() para obtener la lista completa de operadores disponibles de Core ML.

¿Qué es una paleta de cuantización en coremltools?

Una paleta de cuantización es un conjunto de parámetros para comprimir los pesos del modelo: fp16, int8 o paletización. coremltools admite paletas de 8 bits, 16 bits y cuantización LUT con diferentes profundidades de bits.

¿Se requiere compilación después de la conversión?

Sí, el .mlmodel debe compilarse en mlmodelc antes de ejecutarse en el dispositivo. La compilación se realiza automáticamente en Xcode durante la compilación o en el dispositivo mediante MLModel.compile(at:).

¿Cómo verifico la precisión del modelo convertido?

Use ct.models.CompiledModel para comparar las salidas del modelo original y convertido. Proporcione los mismos datos de entrada y compare los resultados usando las métricas MSE o cosine similarity.

Resumen

  • Core ML Model Conversion es el proceso de transformar modelos ML al formato .mlmodel para ejecución en dispositivos Apple.
  • La herramienta principal es coremltools, compatible con PyTorch, TensorFlow, Keras, ONNX y scikit-learn.
  • La conversión incluye trazado del grafo, mapeo de operadores, optimización y serialización.
  • Las operaciones no soportadas se reemplazan con combinaciones equivalentes o se implementan mediante la API de capas personalizadas.
  • Después de la conversión, está disponible la cuantización FP16 e INT8 para reducir el tamaño y acelerar la inferencia.
  • Antes del despliegue, verifique la precisión del modelo mediante ct.models.CompiledModel.
  • Planifique el pipeline de conversión como parte del CI/CD para actualizaciones automáticas de modelos en la aplicación.

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también