Конвертація моделей Core ML: що це таке, етапи та способи конвертації

Автор: IT Sectr Опубліковано: 2026-07-17 Час читання: 6 хв

Core ML Model Conversion — це процес трансформації навчених моделей машинного навчання з популярних фреймворків у формат Core ML (.mlmodel), оптимізований для виконання на пристроях Apple. Конвертація необхідна, оскільки PyTorch, TensorFlow та інші фреймворки використовують власні формати, несумісні з Core ML Runtime. Згідно з документацією coremltools, 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 — через заморожений граф .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 для зменшення розміру в 2 рази
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 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також