Core ML Model Conversion: co to je, fáze a způsoby konverze

Autor: IT Sectr Publikováno: 2026-07-17 Doba čtení: 6 min

Core ML Model Conversion je proces transformace natrénovaných modelů strojového učení z populárních frameworků do formátu Core ML (.mlmodel), optimalizovaného pro provádění na zařízeních Apple. Konverze je nezbytná, protože PyTorch, TensorFlow a další frameworky používají vlastní formáty, které nejsou kompatibilní s Core ML Runtime. Podle coremltools documentation, 2025, knihovna podporuje konverzi z PyTorch, TensorFlow 1.x a 2.x, Keras, ONNX, scikit-learn a libsvm. coremltools automaticky nahrazuje nepodporované operace ekvivalentními, přičemž zachovává numerickou přesnost modelu.

Hlavní body

  • Core ML Model Conversion — transformace ML modelů do formátu .mlmodel pro provádění na zařízeních Apple.
  • Hlavní nástroj — coremltools, open-source Python knihovna od Apple.
  • Podporovány jsou PyTorch, TensorFlow, Keras, ONNX a scikit-learn.
  • Proces zahrnuje trasování grafu, nahrazování operací a ověřování přesnosti.
  • Po konverzi lze model kvantovat ve FP16 nebo INT8 pro zrychlení.

Co je Core ML Model Conversion

Core ML Model Conversion je proces převodu natrénovaného modelu strojového učení z formátu původního frameworku do formátu .mlmodel srozumitelného pro Core ML Runtime na zařízeních Apple. Bez konverze nelze model natrénovaný v PyTorch nebo TensorFlow přímo načíst a spustit na iOS nebo macOS.

Proces konverze zahrnuje překlad výpočetního grafu: každý operátor původního frameworku (Conv2D, BatchNorm, ReLU) je mapován na odpovídající operátor Core ML. Pokud neexistuje přímá náhrada, coremltools používá složené operace nebo vlastní vrstvy. Podle Apple ML Research knihovna pokrývá více než 200 operátorů z různých frameworků.

Po konverzi je model uložen v balíčkovém formátu .mlmodel, který obsahuje protobuf popis grafu, váhy v binární podobě a metadata. Tento soubor je poté zkompilován do mlmodelc pro spuštění na cílovém zařízení.

Podporované frameworky a formáty

coremltools verze 7.x podporuje konverzi z šesti zdrojů. PyTorch — přes torch.jit.trace nebo torch.export, TensorFlow 2.x — přes SavedModel a Keras H5, TensorFlow 1.x — přes frozen graph .pb. Pro ONNX se používá mezilehlá reprezentace, která je poté přeložena do Core ML.

Matice kompatibility frameworků

FrameworkVstupní formátAPI 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()

Nástroje konverze: coremltools

coremltools — je oficiální open-source Python knihovna od Apple, dostupná přes pip install coremltools. Knihovna poskytuje jednotné API pro konverzi ze všech podporovaných frameworků, stejně jako nástroje pro zpracování: kvantizaci, kontrolu přesnosti a vizualizaci grafu.

Instalace a základní konverze modelu z 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")

Pro konverzi z TensorFlow použijte jako zdroj SavedModel. coremltools automaticky určuje vstupní a výstupní tenzory na základě 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")

Fáze konverze modelu

Proces konverze se skládá ze čtyř fází. V první fázi coremltools načte původní model a provede trasování (tracing) nebo skenování grafu. Pro PyTorch se používá torch.jit.trace, který prohání vzorová vstupní data modelem a zaznamenává posloupnost operací.

Ve druhé fázi se provádí mapování operátorů (operator mapping). Každý operátor z původního grafu je přiřazen k operátoru Core ML. Pokud neexistuje přímá náhrada, coremltools rozdělí operátor na posloupnost podporovaných. Podle dokumentace coremltools pokrytí operátorů PyTorch přesahuje 95 % pro typické architektury.

Třetí fáze — optimalizace grafu. coremltools provádí slučování operací (např. conv + batch norm), odstraňování zbytečných transformací a přeskupování operátorů pro zvýšení efektivity. Čtvrtá fáze — serializace do formátu .mlmodel s uchováním vah a metadat.

Typické problémy a jejich řešení

Nejčastějším problémem při konverzi jsou nepodporované operace. Pokud model obsahuje operátor, který v Core ML chybí, coremltools hlásí chybu s názvem operace. Řešení — nahraďte operátor ekvivalentní kombinací podporovaných nebo implementujte vlastní vrstvu přes custom layer API.

Druhý problém — nesoulad rozměrů. PyTorch používá formát NCHW, zatímco Core ML standardně používá NHWC. coremltools automaticky vkládá transpozici, ale někdy je pořadí os určeno nesprávně. Zkontrolujte vstupní a výstupní rozměry v logách konverze a v případě potřeby zadejte input_features se správnými názvy.

Třetí problém — ztráta přesnosti po kvantizaci. Při konverzi s paletou FP16 nebo INT8 může přesnost modelu klesnout. coremltools poskytuje nástroj ct.models.CompiledModel pro porovnání výstupů původního a konvertovaného modelu na stejných vstupních datech. Pokud rozdíl přesahuje 1 %, použijte kvantizaci s paletou FP16 bez kalibrace nebo od kvantizace upusťte.

Příklady konverze z PyTorch a TensorFlow

Příklad konverze modelu MobileNetV3 z PyTorch s uvedením typu vstupních dat a minimální verze iOS. Použijte ct.ImageType pro automatickou normalizaci obrázků:

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
)

# Uložit do .mlmodel pro pozdější kompilaci v Xcode
mlmodel.save("MobileNetV3.mlmodel")

Příklad konverze z TensorFlow Keras s FP16 kvantizací. Zadejte minimum_deployment_target pro aktivaci podpory FP16 na zařízeních s Apple A13 a novějších:

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
)

# Kvantovat váhy na FP16 pro 2x zmenšení velikosti
mlmodel_fp16 = ct.models.neural_network.quantization_utils.quantize_weights(
    mlmodel, 16
)
mlmodel_fp16.save("EfficientNetB0_fp16.mlmodel")

Často kladené otázky

Lze konvertovat model bez přístupu ke zdrojovému kódu?

Ano, pokud je model uložen ve formátu TorchScript, SavedModel nebo ONNX. coremltools načítá tyto formáty bez nutnosti zdrojového kódu a provádí konverzi podle výpočetního grafu.

Jak zjistím, které operace nejsou v Core ML podporovány?

coremltools zobrazuje seznam nepodporovaných operací v logu během konverze. Použijte ct.utils.get_coreml_operations() pro získání úplného seznamu dostupných operátorů Core ML.

Co je paleta kvantizace v coremltools?

Paleta kvantizace je sada parametrů pro kompresi vah modelu: fp16, int8 nebo palettization. coremltools podporuje 8bitovou, 16bitovou paletu a LUT kvantizaci s různými bitovými hloubkami.

Je po konverzi nutná kompilace?

Ano, .mlmodel musí být zkompilován do mlmodelc před spuštěním na zařízení. Kompilace probíhá automaticky v Xcode při sestavení nebo na zařízení přes MLModel.compile(at:).

Jak ověřím přesnost konvertovaného modelu?

Použijte ct.models.CompiledModel pro porovnání výstupů původního a konvertovaného modelu. Poskytněte stejná vstupní data a porovnejte výsledky pomocí metriky MSE nebo cosine similarity.

Shrnutí

  • Core ML Model Conversion — proces transformace ML modelů do formátu .mlmodel pro provádění na zařízeních Apple.
  • Hlavní nástroj — coremltools, podporující PyTorch, TensorFlow, Keras, ONNX a scikit-learn.
  • Konverze zahrnuje trasování grafu, mapování operátorů, optimalizaci a serializaci.
  • Nepodporované operace jsou nahrazeny ekvivalentními kombinacemi nebo implementovány přes custom layer API.
  • Po konverzi je k dispozici kvantizace FP16 a INT8 pro zmenšení velikosti a zrychlení inference.
  • Před nasazením zkontrolujte přesnost modelu pomocí ct.models.CompiledModel.
  • Naplánujte pipeline konverze jako součást CI/CD pro automatickou aktualizaci modelů v aplikaci.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také