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, библиотека с отворен код на 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.
  • Планирайте пайплайн за конвертиране като част от CI/CD за автоматично обновяване на моделите в приложението.

Ще разработим мобилно приложение под ключ

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също