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 је процес претварања обученог модела машинског учења из формата оригиналног фрејмворка у .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 |
|---|---|---|
| PyTorch | TorchScript, torch.export | CTConverter / convert() |
| TensorFlow 2.x | SavedModel, Keras H5 | convert() |
| TensorFlow 1.x | Frozen .pb | convert() |
| ONNX | .onnx | onnx_to_coreml() |
| scikit-learn | .pkl / Pipeline | converters.sklearn.convert() |
| Keras | .h5 / .keras | convert() |
coremltools — то је званична Python библиотека отвореног кода од Apple-а, доступна преко pip install coremltools. Библиотека пружа јединствени API за конверзију из свих подржаних фрејмворка, као и алате за пост-обраду: квантовање, проверу прецизности и визуелизацију графа.
Инсталација и основна конверзија модела из PyTorch-а:
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:
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 палетом без калибрације или одустаните од квантовања.
Пример конверзије модела MobileNetV3 из PyTorch-а са навођењем типа улазних података и минималне iOS верзије. Користите ct.ImageType за аутоматску нормализацију слика:
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 и новијим:
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 учитава ове формате без потребе за изворним кодом и врши конверзију по графу израчунавања.
coremltools приказује листу неподржаних операција у логу приликом конверзије. Користите ct.utils.get_coreml_operations() за добијање комплетне листе доступних Core ML оператора.
Палета квантовања је скуп параметара за компресију тежина модела: fp16, int8 или palettization. coremltools подржава 8-битну, 16-битну палету и LUT квантовање са различитим битностима.
Да, .mlmodel мора бити компилиран у mlmodelc пре извршавања на уређају. Компилација се врши аутоматски у Xcode-у приликом изградње или на уређају преко MLModel.compile(at:).
Користите ct.models.CompiledModel за поређење излаза оригиналног и конвертованог модела. Доставите исте улазне податке и упоредите резултате помоћу метрике MSE или cosine similarity.
Закључак
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође