Core ML Model Conversion adalah proses transformasi model machine learning yang telah dilatih dari framework populer ke format Core ML (.mlmodel), yang dioptimalkan untuk eksekusi pada perangkat Apple. Konversi diperlukan karena PyTorch, TensorFlow, dan framework lainnya menggunakan format mereka sendiri yang tidak kompatibel dengan Core ML Runtime. Menurut coremltools documentation, 2025, perpustakaan ini mendukung konversi dari PyTorch, TensorFlow 1.x dan 2.x, Keras, ONNX, scikit-learn, dan libsvm. coremltools secara otomatis mengganti operasi yang tidak didukung dengan yang setara, mempertahankan akurasi numerik model.
Poin utama
Core ML Model Conversion adalah proses mengubah model machine learning yang telah dilatih dari format framework asli ke format .mlmodel yang dapat dipahami oleh Core ML Runtime pada perangkat Apple. Tanpa konversi, model yang dilatih di PyTorch atau TensorFlow tidak dapat dimuat dan dijalankan secara langsung di iOS atau macOS.
Proses konversi mencakup penerjemahan grafik komputasi: setiap operator dari framework asli (Conv2D, BatchNorm, ReLU) dipetakan ke operator Core ML yang sesuai. Jika tidak ada pengganti langsung, coremltools menggunakan operasi gabungan atau lapisan kustom. Menurut Apple ML Research, perpustakaan ini mencakup lebih dari 200 operator dari berbagai framework.
Setelah konversi, model disimpan dalam format paket .mlmodel, yang mencakup deskripsi grafik protobuf, bobot dalam bentuk biner, dan metadata. File ini kemudian dikompilasi menjadi mlmodelc untuk dieksekusi pada perangkat target.
coremltools versi 7.x mendukung konversi dari enam sumber. PyTorch — melalui torch.jit.trace atau torch.export, TensorFlow 2.x — melalui SavedModel dan Keras H5, TensorFlow 1.x — melalui frozen graph .pb. Untuk ONNX, digunakan representasi perantara yang kemudian diterjemahkan ke Core ML.
| Framework | Format masukan | 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 — adalah perpustakaan Python sumber terbuka resmi dari Apple, tersedia melalui pip install coremltools. Perpustakaan ini menyediakan API terpadu untuk konversi dari semua framework yang didukung, serta alat pasca-pemrosesan: kuantisasi, pemeriksaan akurasi, dan visualisasi grafik.
Instalasi dan konversi dasar model dari 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")
Untuk konversi dari TensorFlow, gunakan SavedModel sebagai sumber. coremltools secara otomatis menentukan tensor masukan dan keluaran berdasarkan signature_def:
import coremltools as ct
mlmodel = ct.convert(
"saved_model_dir",
source="tensorflow",
@minimum_deployment_target=ct.target.iOS16
)
mlmodel.save("MyTFModel.mlmodel")
Proses konversi terdiri dari empat tahap. Pada tahap pertama, coremltools memuat model asli dan melakukan pelacakan (tracing) atau pemindaian grafik. Untuk PyTorch, digunakan torch.jit.trace yang menjalankan data masukan sampel melalui model dan mencatat urutan operasi.
Pada tahap kedua, dilakukan pemetaan operator (operator mapping). Setiap operator dari grafik asli dicocokkan dengan operator Core ML. Jika tidak ada pengganti langsung, coremltools membagi operator menjadi urutan operator yang didukung. Menurut dokumentasi coremltools, cakupan operator PyTorch melebihi 95% untuk arsitektur umum.
Tahap ketiga — optimasi grafik. coremltools melakukan penggabungan operasi (mis., conv + batch norm), penghapusan transformasi yang tidak perlu, dan pengurutan ulang operator untuk meningkatkan efisiensi. Tahap keempat — serialisasi ke format .mlmodel dengan menyimpan bobot dan metadata.
Masalah paling umum saat konversi adalah operasi yang tidak didukung. Jika model berisi operator yang tidak ada di Core ML, coremltools melaporkan kesalahan dengan nama operasi tersebut. Solusi — ganti operator dengan kombinasi setara dari operator yang didukung atau implementasikan lapisan kustom melalui custom layer API.
Masalah kedua — ketidakcocokan dimensi. PyTorch menggunakan format NCHW, sedangkan Core ML secara default menggunakan NHWC. coremltools secara otomatis menyisipkan transposisi, tetapi terkadang urutan sumbu ditentukan secara tidak benar. Periksa dimensi masukan dan keluaran di log konversi dan jika perlu, tentukan input_features dengan nama yang benar.
Masalah ketiga — kehilangan akurasi setelah kuantisasi. Saat konversi dengan palet FP16 atau INT8, akurasi model dapat menurun. coremltools menyediakan utilitas ct.models.CompiledModel untuk membandingkan keluaran model asli dan yang telah dikonversi pada data masukan yang sama. Jika perbedaan melebihi 1%, gunakan kuantisasi dengan palet FP16 tanpa kalibrasi atau hentikan kuantisasi.
Contoh konversi model MobileNetV3 dari PyTorch dengan menentukan tipe data masukan dan versi iOS minimum. Gunakan ct.ImageType untuk normalisasi gambar otomatis:
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
)
# Simpan ke .mlmodel untuk kompilasi nanti di Xcode
mlmodel.save("MobileNetV3.mlmodel")
Contoh konversi dari TensorFlow Keras dengan kuantisasi FP16. Tentukan minimum_deployment_target untuk mengaktifkan dukungan FP16 pada perangkat Apple A13 dan yang lebih baru:
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
)
# Kuantisasi bobot ke FP16 untuk pengurangan ukuran 2x
mlmodel_fp16 = ct.models.neural_network.quantization_utils.quantize_weights(
mlmodel, 16
)
mlmodel_fp16.save("EfficientNetB0_fp16.mlmodel")
Pertanyaan yang sering diajukan
Ya, jika model disimpan dalam format TorchScript, SavedModel, atau ONNX. coremltools memuat format ini tanpa memerlukan kode sumber dan melakukan konversi berdasarkan grafik komputasi.
coremltools menampilkan daftar operasi yang tidak didukung di log selama konversi. Gunakan ct.utils.get_coreml_operations() untuk mendapatkan daftar lengkap operator Core ML yang tersedia.
Palet kuantisasi adalah kumpulan parameter untuk kompresi bobot model: fp16, int8, atau palettization. coremltools mendukung palet 8-bit, 16-bit, dan kuantisasi LUT dengan kedalaman bit yang berbeda.
Ya, .mlmodel harus dikompilasi menjadi mlmodelc sebelum dijalankan pada perangkat. Kompilasi dilakukan secara otomatis di Xcode saat membangun atau pada perangkat melalui MLModel.compile(at:).
Gunakan ct.models.CompiledModel untuk membandingkan keluaran model asli dan yang telah dikonversi. Berikan data masukan yang sama dan bandingkan hasilnya menggunakan metrik MSE atau cosine similarity.
Ringkasan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga