A Core ML Model Conversion a betanított gépi tanulási modellek átalakítási folyamata a népszerű keretrendszerekből a Core ML (.mlmodel) formátumba, amely az Apple eszközökön történő végrehajtásra van optimalizálva. A konvertálás azért szükséges, mert a PyTorch, a TensorFlow és más keretrendszerek saját formátumokat használnak, amelyek nem kompatibilisek a Core ML Runtime-tal. A coremltools documentation, 2025 szerint a könyvtár támogatja a konvertálást PyTorch, TensorFlow 1.x és 2.x, Keras, ONNX, scikit-learn és libsvm rendszerekből. A coremltools automatikusan helyettesíti a nem támogatott műveleteket egyenértékűekkel, megtartva a modell numerikus pontosságát.
Főbb pontok
Core ML Model Conversion egy betanított gépi tanulási modell átalakítási folyamata az eredeti keretrendszer formátumából a .mlmodel formátumba, amely érthető a Core ML Runtime számára Apple eszközökön. Konvertálás nélkül a PyTorch-ban vagy TensorFlow-ban betanított modell nem tölthető be és hajtható végre közvetlenül iOS-en vagy macOS-en.
A konvertálási folyamat magában foglalja a számítási gráf fordítását: az eredeti keretrendszer minden egyes operátora (Conv2D, BatchNorm, ReLU) a megfelelő Core ML operátorra van leképezve. Ha nincs közvetlen helyettesítő, a coremltools összetett műveleteket vagy egyedi rétegeket használ. Az Apple ML Research szerint a könyvtár több mint 200 operátort fed le különböző keretrendszerekből.
Konvertálás után a modell .mlmodel csomagformátumban kerül mentésre, amely tartalmazza a gráf protobuf leírását, a súlyokat bináris formában és a metaadatokat. Ezt a fájlt ezután mlmodelc formátumba fordítják a célkészüléken történő végrehajtáshoz.
A coremltools 7.x verziója hat forrásból támogatja a konvertálást. PyTorch — torch.jit.trace vagy torch.export útján, TensorFlow 2.x — SavedModel és Keras H5 útján, TensorFlow 1.x — frozen graph .pb útján. Az ONNX esetében egy köztes ábrázolást használnak, amelyet aztán Core ML formátumba fordítanak.
| Keretrendszer | Bemeneti formátum | coremltools API |
|---|---|---|
| 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() |
A coremltools — az Apple hivatalos nyílt forráskódú Python könyvtára, amely a pip install coremltools segítségével érhető el. A könyvtár egységes API-t biztosít a konvertáláshoz az összes támogatott keretrendszerből, valamint utófeldolgozási eszközöket: kvantálás, pontosság-ellenőrzés és gráfvizualizáció.
A modell telepítése és alap konvertálása PyTorch-ból:
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")
A TensorFlow-ból történő konvertáláshoz használja a SavedModel forrásként. A coremltools automatikusan meghatározza a bemeneti és kimeneti tenzorokat a signature_def alapján:
import coremltools as ct
mlmodel = ct.convert(
"saved_model_dir",
source="tensorflow",
@minimum_deployment_target=ct.target.iOS16
)
mlmodel.save("MyTFModel.mlmodel")
A konvertálási folyamat négy szakaszból áll. Az első szakaszban a coremltools betölti az eredeti modellt és követést (tracing) vagy gráf vizsgálatot végez. PyTorch esetén a torch.jit.trace-t használják, amely mintabemeneti adatokat futtat át a modellen és rögzíti a műveletek sorrendjét.
A második szakaszban operátor leképezés (operator mapping) történik. Az eredeti gráf minden egyes operátora egy Core ML operátorhoz van rendelve. Ha nincs közvetlen helyettesítő, a coremltools az operátort támogatott operátorok sorozatára bontja. A coremltools dokumentációja szerint a PyTorch operátorok lefedettsége meghaladja a 95%-ot a tipikus architektúráknál.
Harmadik szakasz — gráf optimalizálás. A coremltools műveletek összevonását (pl. conv + batch norm), felesleges átalakítások eltávolítását és operátorok átrendezését végzi a hatékonyság növelése érdekében. Negyedik szakasz — szerializálás .mlmodel formátumba a súlyok és metaadatok megőrzésével.
A leggyakoribb probléma a konvertálás során a nem támogatott műveletek. Ha a modell olyan operátort tartalmaz, amely hiányzik a Core ML-ből, a coremltools hibát jelez a művelet nevével. Megoldás — cserélje ki az operátort a támogatottak egyenértékű kombinációjára, vagy implementáljon egyedi réteget a custom layer API segítségével.
Második probléma — dimenziók eltérése. A PyTorch az NCHW formátumot használja, míg a Core ML alapértelmezés szerint NHWC-t. A coremltools automatikusan beilleszti a transzpozíciót, de néha a tengelyek sorrendje helytelenül kerül meghatározásra. Ellenőrizze a bemeneti és kimeneti dimenziókat a konvertálási naplókban, és szükség esetén adja meg az input_features-t a helyes nevekkel.
Harmadik probléma — pontosságvesztés kvantálás után. FP16 vagy INT8 palettával történő konvertáláskor a modell pontossága csökkenhet. A coremltools biztosítja a ct.models.CompiledModel segédprogramot az eredeti és a konvertált modell kimeneteinek összehasonlításához ugyanazon bemeneti adatokon. Ha az eltérés meghaladja az 1%-ot, használja a kvantálást FP16 palettával kalibrálás nélkül, vagy mondjon le a kvantálásról.
Példa a MobileNetV3 modell konvertálására PyTorch-ból a bemeneti adatok típusának és a minimális iOS verziónak megadásával. Használja a ct.ImageType-t a képek automatikus normalizálásához:
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
)
# Mentés .mlmodel formátumba későbbi Xcode fordításhoz
mlmodel.save("MobileNetV3.mlmodel")
Példa konvertálásra TensorFlow Keras-ból FP16 kvantálással. Adja meg a minimum_deployment_target paramétert az FP16 támogatás bekapcsolásához Apple A13 és újabb eszközökön:
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
)
# Súlyok kvantálása FP16-ra 2x méretcsökkentésért
mlmodel_fp16 = ct.models.neural_network.quantization_utils.quantize_weights(
mlmodel, 16
)
mlmodel_fp16.save("EfficientNetB0_fp16.mlmodel")
Gyakran ismételt kérdések
Igen, ha a modell TorchScript, SavedModel vagy ONNX formátumban van mentve. A coremltools betölti ezeket a formátumokat forráskód igénye nélkül, és a számítási gráf alapján végzi a konvertálást.
A coremltools megjeleníti a nem támogatott műveletek listáját a naplóban konvertálás közben. Használja a ct.utils.get_coreml_operations() függvényt az elérhető Core ML operátorok teljes listájának lekéréséhez.
A kvantálási paletta paraméterek halmaza a modell súlyainak tömörítéséhez: fp16, int8 vagy palettization. A coremltools támogatja a 8-bites, 16-bites palettát és a LUT-kvantálást különböző bitmélységekkel.
Igen, a .mlmodel fájlt mlmodelc formátumba kell fordítani az eszközön történő végrehajtás előtt. A fordítás automatikusan történik az Xcode-ban az építés során vagy az eszközön az MLModel.compile(at:) segítségével.
Használja a ct.models.CompiledModel függvényt az eredeti és a konvertált modell kimeneteinek összehasonlításához. Adja meg ugyanazokat a bemeneti adatokat, és hasonlítsa össze az eredményeket MSE vagy cosine similarity mértékkel.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is