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 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í.
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.
| Framework | Vstupní formát | 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 — 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:
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:
import coremltools as ct
mlmodel = ct.convert(
"saved_model_dir",
source="tensorflow",
@minimum_deployment_target=ct.target.iOS16
)
mlmodel.save("MyTFModel.mlmodel")
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.
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ří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ů:
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:
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
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.
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.
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.
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:).
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í
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í.
Přečtěte si také