Core ML Model Conversion, eğitilmiş makine öğrenimi modellerinin popüler framework'lerden Core ML (.mlmodel) formatına dönüştürülmesi sürecidir ve Apple cihazlarında çalıştırılmak üzere optimize edilmiştir. Dönüşüm gereklidir çünkü PyTorch, TensorFlow ve diğer framework'ler Core ML Runtime ile uyumsuz olan kendi formatlarını kullanır. coremltools dokümantasyonu, 2025'e göre, kütüphane PyTorch, TensorFlow 1.x ve 2.x, Keras, ONNX, scikit-learn ve libsvm'den dönüşümü destekler. coremltools desteklenmeyen işlemleri otomatik olarak eşdeğerleriyle değiştirir ve modelin sayısal doğruluğunu korur.
Önemli Noktalar
Core ML Model Conversion, eğitilmiş bir makine öğrenimi modelini kaynak framework formatından, Apple cihazlarındaki Core ML Runtime'ın anladığı .mlmodel formatına dönüştürme sürecidir. Dönüşüm olmadan, PyTorch veya TensorFlow'da eğitilmiş bir model doğrudan iOS veya macOS'te yüklenip çalıştırılamaz.
Dönüşüm süreci hesaplama grafiği çevirisini içerir: kaynak framework'teki her operatör (Conv2D, BatchNorm, ReLU) ilgili Core ML operatörüyle eşleştirilir. Doğrudan bir alternatif yoksa, coremltools bileşik işlemler veya özel katmanlar kullanır. Apple ML Research'e göre, kütüphane çeşitli framework'lerden 200'den fazla operatörü kapsar.
Dönüşümden sonra model, protobuf grafik tanımı, ikili biçimde ağırlıklar ve meta veriler içeren .mlmodel paket formatında kaydedilir. Bu dosya daha sonra hedef cihazda çalıştırılmak üzere mlmodelc'ye derlenir.
coremltools sürüm 7.x, altı kaynaktan dönüşümü destekler. PyTorch — torch.jit.trace veya torch.export aracılığıyla, TensorFlow 2.x — SavedModel ve Keras H5 aracılığıyla, TensorFlow 1.x — dondurulmuş grafik .pb aracılığıyla. ONNX için bir ara temsil kullanılır ve daha sonra Core ML'ye çevrilir.
| Framework | Giriş Formatı | 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() |
coremltools, Apple'ın resmi açık kaynaklı Python kütüphanesidir ve pip install coremltools ile kullanılabilir. Kütüphane, desteklenen tüm framework'lerden dönüşüm için birleşik bir API ve ayrıca son işlem araçları sağlar: niceleme, doğruluk kontrolü ve grafik görselleştirme.
PyTorch'tan kurulum ve temel model dönüşümü:
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'dan dönüşüm için kaynak olarak SavedModel kullanın. coremltools, signature_def'e göre giriş ve çıkış tensörlerini otomatik olarak belirler:
import coremltools as ct
mlmodel = ct.convert(
"saved_model_dir",
source="tensorflow",
@minimum_deployment_target=ct.target.iOS16
)
mlmodel.save("MyTFModel.mlmodel")
Dönüşüm süreci dört aşamadan oluşur. İlk aşamada, coremltools kaynak modeli yükler ve izleme (tracing) veya grafik taraması yapar. PyTorch için torch.jit.trace kullanılır, bu da modelden bir örnek giriş geçirir ve işlem sırasını kaydeder.
İkinci aşamada, operatör eşlemesi gerçekleştirilir. Kaynak graftaki her operatör bir Core ML operatörüyle eşleştirilir. Doğrudan bir alternatif yoksa, coremltools operatörü desteklenen operatörler dizisine böler. coremltools dokümantasyonuna göre, tipik mimariler için PyTorch operatör kapsamı %95'i aşar.
Üçüncü aşama grafik optimizasyonudur. coremltools, işlem birleştirme (örn. conv + batch norm), gereksiz dönüşümleri kaldırma ve verimliliği artırmak için operatörleri yeniden sıralama yapar. Dördüncü aşama, ağırlıkları ve meta verileri koruyarak .mlmodel formatında serileştirmedir.
Dönüşümde en sık karşılaşılan sorun desteklenmeyen işlemlerdir. Model, Core ML'de bulunmayan bir operatör içeriyorsa, coremltools işlem adıyla birlikte bir hata bildirir. Çözüm, operatörü desteklenen operatörlerin eşdeğer bir kombinasyonuyla değiştirmek veya özel katman API'si aracılığıyla özel bir katman uygulamaktır.
İkinci sorun boyut uyuşmazlığıdır. PyTorch NCHW formatını kullanırken, Core ML varsayılan olarak NHWC kullanır. coremltools otomatik olarak transpozisyon ekler, ancak bazen eksen sırası yanlış belirlenir. Dönüşüm günlüklerinde giriş ve çıkış boyutlarını kontrol edin ve gerekirse doğru adlarla input_features belirtin.
Üçüncü sorun niceleme sonrası doğruluk kaybıdır. FP16 veya INT8 paletiyle dönüştürürken model doğruluğu azalabilir. coremltools, aynı giriş verilerinde kaynak ve dönüştürülmüş modelin çıktılarını karşılaştırmak için ct.models.CompiledModel aracını sağlar. Fark %1'i aşarsa, kalibrasyon olmadan FP16 paletiyle niceleme kullanın veya nicelemeyi tamamen atlayın.
Giriş türü belirtimi ve minimum iOS sürümüyle PyTorch'tan MobileNetV3 modelini dönüştürme örneği. Otomatik görüntü normalizasyonu için ct.ImageType kullanın:
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
)
# Daha sonra Xcode'da derlemek için .mlmodel olarak kaydet
mlmodel.save("MobileNetV3.mlmodel")
FP16 niceleme ile TensorFlow Keras'tan dönüştürme örneği. Apple A13 ve daha yeni cihazlarda FP16 desteğini etkinleştirmek için minimum_deployment_target belirtin:
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
)
# 2 kat boyut küçültme için ağırlıkları FP16’ya nicele
mlmodel_fp16 = ct.models.neural_network.quantization_utils.quantize_weights(
mlmodel, 16
)
mlmodel_fp16.save("EfficientNetB0_fp16.mlmodel")
Sıkça Sorulan Sorular
Evet, model TorchScript, SavedModel veya ONNX formatında kaydedilmişse. coremltools bu formatları kaynak koda ihtiyaç duymadan yükler ve hesaplama grafiğine göre dönüşümü gerçekleştirir.
coremltools, dönüşüm sırasında günlükte desteklenmeyen işlemlerin listesini görüntüler. Kullanılabilir Core ML operatörlerinin tam listesini almak için ct.utils.get_coreml_operations() kullanın.
Niceleme paleti, model ağırlıklarını sıkıştırmak için bir parametre kümesidir: fp16, int8 veya paletleme. coremltools, 8-bit, 16-bit paleti ve farklı bit derinliklerinde LUT nicelemeyi destekler.
Evet, .mlmodel dosyası cihazda çalıştırılmadan önce mlmodelc'ye derlenmelidir. Derleme, Xcode'da derleme sırasında veya cihazda MLModel.compile(at:) aracılığıyla otomatik olarak gerçekleştirilir.
Kaynak ve dönüştürülmüş modelin çıktılarını karşılaştırmak için ct.models.CompiledModel kullanın. Aynı giriş verilerini sağlayın ve sonuçları MSE veya kosinüs benzerliği metrikleriyle karşılaştırın.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun