Conversão de Modelos Core ML: o que é, etapas e métodos de conversão

Autor: IT Sectr Publicado: 2026-07-17 Tempo de leitura: 6 min

Core ML Model Conversion é o processo de transformar modelos de machine learning treinados de frameworks populares para o formato Core ML (.mlmodel), otimizado para execução em dispositivos Apple. A conversão é necessária porque PyTorch, TensorFlow e outros frameworks usam seus próprios formatos incompatíveis com o Core ML Runtime. De acordo com a documentação do coremltools, 2025, a biblioteca suporta conversão de PyTorch, TensorFlow 1.x e 2.x, Keras, ONNX, scikit-learn e libsvm. coremltools substitui automaticamente operações não suportadas por equivalentes, preservando a precisão numérica do modelo.

Principais Pontos

  • Core ML Model Conversion — transformação de modelos ML para o formato .mlmodel para execução em dispositivos Apple.
  • A ferramenta principal é o coremltools, uma biblioteca Python de código aberto da Apple.
  • Suporta PyTorch, TensorFlow, Keras, ONNX e scikit-learn.
  • O processo inclui rastreamento de grafo, substituição de operações e verificação de precisão.
  • Após a conversão, o modelo pode ser quantizado para FP16 ou INT8 para aceleração.

O que é Core ML Model Conversion

Core ML Model Conversion é o processo de transformar um modelo de machine learning treinado do formato do framework de origem para o formato .mlmodel compreendido pelo Core ML Runtime em dispositivos Apple. Sem conversão, um modelo treinado em PyTorch ou TensorFlow não pode ser carregado e executado no iOS ou macOS diretamente.

O processo de conversão inclui a tradução do grafo de computação: cada operador do framework de origem (Conv2D, BatchNorm, ReLU) é mapeado para o operador Core ML correspondente. Se não existir uma substituição direta, o coremltools usa operações compostas ou camadas personalizadas. De acordo com a Apple ML Research, a biblioteca cobre mais de 200 operadores de vários frameworks.

Após a conversão, o modelo é salvo no formato de pacote .mlmodel, que inclui uma descrição do grafo em protobuf, pesos em formato binário e metadados. Este arquivo é então compilado em mlmodelc para execução no dispositivo de destino.

Frameworks e Formatos Suportados

O coremltools versão 7.x suporta conversão de seis fontes. PyTorch — via torch.jit.trace ou torch.export, TensorFlow 2.x — via SavedModel e Keras H5, TensorFlow 1.x — via grafo congelado .pb. Para ONNX, é usada uma representação intermediária, que é então traduzida para Core ML.

Matriz de Compatibilidade de Frameworks

FrameworkFormato de EntradaAPI do 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()

Ferramentas de Conversão: coremltools

O coremltools é a biblioteca Python oficial de código aberto da Apple, disponível via pip install coremltools. A biblioteca fornece uma API unificada para conversão de todos os frameworks suportados, bem como ferramentas de pós-processamento: quantização, verificação de precisão e visualização de grafo.

Instalação e conversão básica de modelo do 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 conversão do TensorFlow, use SavedModel como origem. O coremltools determina automaticamente os tensores de entrada e saída com base no 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 da Conversão do Modelo

O processo de conversão consiste em quatro etapas. Na primeira etapa, o coremltools carrega o modelo de origem e realiza o rastreamento (tracing) ou escaneamento do grafo. Para PyTorch, é usado torch.jit.trace, que executa uma entrada de amostra através do modelo e registra a sequência de operações.

Na segunda etapa, é realizado o mapeamento de operadores. Cada operador do grafo de origem é mapeado para um operador Core ML. Se não existir uma substituição direta, o coremltools divide o operador em uma sequência de operadores suportados. De acordo com a documentação do coremltools, a cobertura de operadores do PyTorch excede 95% para arquiteturas típicas.

A terceira etapa é a otimização do grafo. O coremltools realiza fusão de operações (por exemplo, conv + batch norm), remoção de transformações desnecessárias e reordenação de operadores para melhorar a eficiência. A quarta etapa é a serialização no formato .mlmodel com preservação de pesos e metadados.

Problemas Comuns e Suas Soluções

O problema mais frequente na conversão são operações não suportadas. Se o modelo contém um operador ausente no Core ML, o coremltools relata um erro com o nome da operação. A solução é substituir o operador por uma combinação equivalente de operadores suportados ou implementar uma camada personalizada através da API de camadas personalizadas.

O segundo problema é a discrepância de dimensões. PyTorch usa o formato NCHW, enquanto o Core ML usa NHWC por padrão. O coremltools insere automaticamente a transposição, mas às vezes a ordem dos eixos é determinada incorretamente. Verifique as dimensões de entrada e saída nos logs de conversão e, se necessário, especifique input_features com os nomes corretos.

O terceiro problema é a perda de precisão após a quantização. Ao converter com paleta FP16 ou INT8, a precisão do modelo pode diminuir. O coremltools fornece o utilitário ct.models.CompiledModel para comparar as saídas do modelo original e convertido nos mesmos dados de entrada. Se a discrepância exceder 1%, use quantização com paleta FP16 sem calibração ou evite a quantização completamente.

Exemplos de Conversão do PyTorch e TensorFlow

Um exemplo de conversão do modelo MobileNetV3 do PyTorch com especificação do tipo de entrada e versão mínima do iOS. Use ct.ImageType para normalização automática de imagens:

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
)

# Salvar em .mlmodel para compilação posterior no Xcode
mlmodel.save("MobileNetV3.mlmodel")

Um exemplo de conversão do TensorFlow Keras com quantização FP16. Especifique minimum_deployment_target para ativar o suporte FP16 em dispositivos com Apple A13 e 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
)

# Quantizar pesos para FP16 para redução de 2x no tamanho
mlmodel_fp16 = ct.models.neural_network.quantization_utils.quantize_weights(
    mlmodel, 16
)
mlmodel_fp16.save("EfficientNetB0_fp16.mlmodel")

Perguntas Frequentes

Posso converter um modelo sem acesso ao código-fonte?

Sim, se o modelo estiver salvo no formato TorchScript, SavedModel ou ONNX. O coremltools carrega esses formatos sem precisar do código-fonte e realiza a conversão com base no grafo de computação.

Como saber quais operações não são suportadas no Core ML?

O coremltools exibe a lista de operações não suportadas no log durante a conversão. Use ct.utils.get_coreml_operations() para obter a lista completa de operadores Core ML disponíveis.

O que é uma paleta de quantização no coremltools?

Uma paleta de quantização é um conjunto de parâmetros para comprimir os pesos do modelo: fp16, int8 ou paletização. O coremltools suporta paleta de 8 bits, 16 bits e quantização LUT com diferentes profundidades de bits.

É necessária compilação após a conversão?

Sim, o .mlmodel deve ser compilado em mlmodelc antes da execução no dispositivo. A compilação é realizada automaticamente no Xcode durante a construção ou no dispositivo através de MLModel.compile(at:).

Como verifico a precisão do modelo convertido?

Use ct.models.CompiledModel para comparar as saídas do modelo original e convertido. Forneça os mesmos dados de entrada e compare os resultados usando as métricas MSE ou cosine similarity.

Resumo

  • Core ML Model Conversion é o processo de transformar modelos ML para o formato .mlmodel para execução em dispositivos Apple.
  • A ferramenta principal é o coremltools, que suporta PyTorch, TensorFlow, Keras, ONNX e scikit-learn.
  • A conversão inclui rastreamento de grafo, mapeamento de operadores, otimização e serialização.
  • Operações não suportadas são substituídas por combinações equivalentes ou implementadas via API de camadas personalizadas.
  • Após a conversão, a quantização FP16 e INT8 está disponível para redução de tamanho e aceleração de inferência.
  • Antes da implantação, verifique a precisão do modelo através do ct.models.CompiledModel.
  • Planeje o pipeline de conversão como parte do CI/CD para atualizações automáticas de modelos no aplicativo.

Vamos desenvolver um aplicativo móvel chave na mão

A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.

Discutir o projeto

Leia também