Core ML Model Conversion: шта је то, фазе и начини конверзије

Аутор: IT Sectr Објављено: 2026-07-17 Време читања: 6 мин

Core ML Model Conversion је процес трансформације обучених модела машинског учења из популарних фрејмворка у формат Core ML (.mlmodel), оптимизован за извршавање на Apple уређајима. Конверзија је неопходна јер PyTorch, TensorFlow и други фрејмворци користе сопствене формате који су некомпатибилни са Core ML Runtime-ом. Према coremltools documentation, 2025, библиотека подржава конверзију из PyTorch, TensorFlow 1.x и 2.x, Keras, ONNX, scikit-learn и libsvm. coremltools аутоматски замењује неподржане операције еквивалентним, чувајући нумеричку прецизност модела.

Главне тачке

  • Core ML Model Conversion — трансформација ML модела у .mlmodel формат за извршавање на Apple уређајима.
  • Главни алат — coremltools, open-source Python библиотека од Apple-а.
  • Подржани су PyTorch, TensorFlow, Keras, ONNX и scikit-learn.
  • Процес укључује трасирање графа, замену операција и верификацију прецизности.
  • Након конверзије модел се може квантовати у FP16 или INT8 ради убрзања.

Шта је Core ML Model Conversion

Core ML Model Conversion је процес претварања обученог модела машинског учења из формата оригиналног фрејмворка у .mlmodel формат разумљив Core ML Runtime-у на Apple уређајима. Без конверзије, модел обучен у PyTorch-у или TensorFlow-у не може бити директно учитан и извршен на iOS или macOS.

Процес конверзије укључује превођење графа израчунавања: сваки оператор оригиналног фрејмворка (Conv2D, BatchNorm, ReLU) се мапира на одговарајући Core ML оператор. Ако не постоји директна замена, coremltools користи сложене операције или прилагођене слојеве. Према Apple ML Research, библиотека покрива преко 200 оператора из различитих фрејмворка.

Након конверзије, модел се чува у пакетном формату .mlmodel, који укључује protobuf опис графа, тежине у бинарном облику и метаподатке. Овај фајл се затим компилира у mlmodelc за извршавање на циљном уређају.

Подржани фрејмворци и формати

coremltools верзија 7.x подржава конверзију из шест извора. PyTorch — преко torch.jit.trace или torch.export, TensorFlow 2.x — преко SavedModel и Keras H5, TensorFlow 1.x — преко frozen graph .pb. За ONNX се користи посредни приказ који се затим преводи у Core ML.

Матрица компатибилности фрејмворка

ФрејмворкУлазни форматAPI 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()

Алати за конверзију: coremltools

coremltools — то је званична Python библиотека отвореног кода од Apple-а, доступна преко pip install coremltools. Библиотека пружа јединствени API за конверзију из свих подржаних фрејмворка, као и алате за пост-обраду: квантовање, проверу прецизности и визуелизацију графа.

Инсталација и основна конверзија модела из 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")

За конверзију из TensorFlow-а користите SavedModel као извор. coremltools аутоматски одређује улазне и излазне тензоре на основу 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")

Фазе конверзије модела

Процес конверзије се састоји од четири фазе. У првој фази, coremltools учитава оригинални модел и врши трасирање (tracing) или скенирање графа. За PyTorch се користи torch.jit.trace, који пропушта пример улазних података кроз модел и бележи секвенцу операција.

У другој фази се врши мапирање оператора (operator mapping). Сваки оператор из оригиналног графа се повезује са Core ML оператором. Ако не постоји директна замена, coremltools дели оператор у секвенцу подржаних. Према документацији coremltools, покривеност PyTorch оператора прелази 95% за типичне архитектуре.

Трећа фаза — оптимизација графа. coremltools врши спајање операција (нпр. conv + batch norm), уклањање непотребних трансформација и преуређивање оператора ради повећања ефикасности. Четврта фаза — серијализација у .mlmodel формат са чувањем тежина и метаподатака.

Типични проблеми и њихова решења

Најчешћи проблем при конверзији су неподржане операције. Ако модел садржи оператор који недостаје у Core ML-у, coremltools пријављује грешку са називом операције. Решење — замените оператор еквивалентном комбинацијом подржаних или имплементирајте прилагођени слој преко custom layer API.

Други проблем — неподударање димензија. PyTorch користи NCHW формат, а Core ML подразумевано NHWC. coremltools аутоматски убацује транспоновање, али понекад се редослед оса одређује нетачно. Проверите улазне и излазне димензије у логовима конверзије и ако је потребно наведите input_features са тачним именима.

Трећи проблем — губитак прецизности након квантовања. При конверзији са FP16 или INT8 палетом, прецизност модела може да се смањи. coremltools пружа алат ct.models.CompiledModel за поређење излаза оригиналног и конвертованог модела на истим улазним подацима. Ако разлика прелази 1%, користите квантовање са FP16 палетом без калибрације или одустаните од квантовања.

Примери конверзије из PyTorch и TensorFlow

Пример конверзије модела MobileNetV3 из PyTorch-а са навођењем типа улазних података и минималне iOS верзије. Користите ct.ImageType за аутоматску нормализацију слика:

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
)

# Сачувај у .mlmodel за каснију компилацију у Xcode-у
mlmodel.save("MobileNetV3.mlmodel")

Пример конверзије из TensorFlow Keras са FP16 квантовањем. Наведите minimum_deployment_target за укључивање FP16 подршке на уређајима са Apple A13 и новијим:

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
)

# Квантуј тежине на FP16 за 2x смањење величине
mlmodel_fp16 = ct.models.neural_network.quantization_utils.quantize_weights(
    mlmodel, 16
)
mlmodel_fp16.save("EfficientNetB0_fp16.mlmodel")

Често постављана питања

Може ли се конвертовати модел без приступа изворном коду?

Да, ако је модел сачуван у формату TorchScript, SavedModel или ONNX. coremltools учитава ове формате без потребе за изворним кодом и врши конверзију по графу израчунавања.

Како сазнати које операције нису подржане у Core ML-у?

coremltools приказује листу неподржаних операција у логу приликом конверзије. Користите ct.utils.get_coreml_operations() за добијање комплетне листе доступних Core ML оператора.

Шта је палета квантовања у coremltools-у?

Палета квантовања је скуп параметара за компресију тежина модела: fp16, int8 или palettization. coremltools подржава 8-битну, 16-битну палету и LUT квантовање са различитим битностима.

Да ли је компилација потребна након конверзије?

Да, .mlmodel мора бити компилиран у mlmodelc пре извршавања на уређају. Компилација се врши аутоматски у Xcode-у приликом изградње или на уређају преко MLModel.compile(at:).

Како проверити прецизност конвертованог модела?

Користите ct.models.CompiledModel за поређење излаза оригиналног и конвертованог модела. Доставите исте улазне податке и упоредите резултате помоћу метрике MSE или cosine similarity.

Закључак

  • Core ML Model Conversion — процес трансформације ML модела у .mlmodel формат за извршавање на Apple уређајима.
  • Главни алат — coremltools, подржава PyTorch, TensorFlow, Keras, ONNX и scikit-learn.
  • Конверзија укључује трасирање графа, мапирање оператора, оптимизацију и серијализацију.
  • Неподржане операције се замењују еквивалентним комбинацијама или имплементирају преко custom layer API-ја.
  • Након конверзије доступно је FP16 и INT8 квантовање за смањење величине и убрзање закључивања.
  • Пре примене проверите прецизност модела преко ct.models.CompiledModel.
  • Планирајте pipeline конверзије као део CI/CD за аутоматско ажурирање модела у апликацији.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође