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
)

# Save to .mlmodel for later compilation in 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
)

# Quantize weights to FP16 for 2x size reduction
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 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

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