Core ML Model Conversion — bu, məşq edilmiş maşın öyrənmə modellərinin məşhur freymvorklardan Apple cihazlarında işləmək üçün optimallaşdırılmış Core ML (.mlmodel) formatına transformasiya prosesidir. Konvertasiya zəruridir, çünki PyTorch, TensorFlow və digər freymvorklar Core ML Runtime ilə uyğunsuz olan öz formatlarından istifadə edirlər. coremltools documentation, 2025 məlumatlarına görə, kitabxana PyTorch, TensorFlow 1.x və 2.x, Keras, ONNX, scikit-learn və libsvm-dən konvertasiyanı dəstəkləyir. coremltools avtomatik olaraq dəstəklənməyən əməliyyatları ekvivalentlərlə əvəz edir, modelin ədədi dəqiqliyini qoruyur.
Əsas məqamlar
Core ML Model Conversion — bu, məşq edilmiş maşın öyrənmə modelinin orijinal freymvork formatından Apple cihazlarında Core ML Runtime üçün başa düşülən .mlmodel formatına çevrilmə prosesidir. Konvertasiya olmadan PyTorch və ya TensorFlow-da məşq edilmiş model iOS və ya macOS-da birbaşa yüklənə və işlədilə bilməz.
Konvertasiya prosesi hesablama qrafının tərcüməsini əhatə edir: orijinal freymvorkun hər bir operatoru (Conv2D, BatchNorm, ReLU) Core ML-nin müvafiq operatoruna xəritələnir. Birbaşa əvəzedici yoxdursa, coremltools mürəkkəb əməliyyatlardan və ya fərdi təbəqələrdən istifadə edir. Apple ML Research məlumatlarına görə, kitabxana müxtəlif freymvorklardan 200-dən çox operatoru əhatə edir.
Konvertasiyadan sonra model .mlmodel paket formatında saxlanılır ki, bu da qrafın protobuf təsvirini, ikili formada çəkiləri və metadataları ehtiva edir. Bu fayl daha sonra hədəf cihazda işləmək üçün mlmodelc-yə kompilyasiya olunur.
coremltools 7.x versiyası altı mənbədən konvertasiyanı dəstəkləyir. PyTorch — torch.jit.trace və ya torch.export vasitəsilə, TensorFlow 2.x — SavedModel və Keras H5 vasitəsilə, TensorFlow 1.x — frozen graph .pb vasitəsilə. ONNX üçün aralıq təqdimat istifadə olunur, daha sonra Core ML-yə tərcümə edilir.
| Freymvork | 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 — bu, pip install coremltools vasitəsilə əldə edilə bilən Apple-ın rəsmi açıq mənbəli Python kitabxanasıdır. Kitabxana bütün dəstəklənən freymvorklardan konvertasiya üçün vahid API, həmçinin post-emal alətləri təqdim edir: kvantlaşdırma, dəqiqlik yoxlaması və qraf vizuallaşdırma.
PyTorch-dan modelin quraşdırılması və əsas konvertasiyası:
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 konvertasiya üçün mənbə kimi SavedModel istifadə edin. coremltools signature_def əsasında giriş və çıxış tensorlarını avtomatik müəyyənləşdirir:
import coremltools as ct
mlmodel = ct.convert(
"saved_model_dir",
source="tensorflow",
@minimum_deployment_target=ct.target.iOS16
)
mlmodel.save("MyTFModel.mlmodel")
Konvertasiya prosesi dörd mərhələdən ibarətdir. Birinci mərhələdə coremltools orijinal modeli yükləyir və traysinq (tracing) və ya qraf skan etmə həyata keçirir. PyTorch üçün nümunə giriş məlumatlarını modeldən keçirən və əməliyyatların ardıcıllığını qeyd edən torch.jit.trace istifadə olunur.
İkinci mərhələdə operator xəritələməsi (operator mapping) aparılır. Orijinal qrafdakı hər bir operator Core ML operatoru ilə uyğunlaşdırılır. Birbaşa əvəzedici yoxdursa, coremltools operatoru dəstəklənənlərin ardıcıllığına bölür. coremltools sənədlərinə görə, tipik arxitekturalar üçün PyTorch operatorlarının əhatəsi 95%-dən çoxdur.
Üçüncü mərhələ — qraf optimallaşdırma. coremltools əməliyyatların birləşməsini (məs., conv + batch norm), lazımsız çevrilmələrin silinməsini və səmərəliliyi artırmaq üçün operatorların yenidən sıralanmasını həyata keçirir. Dördüncü mərhələ — çəkilər və metadataların saxlanması ilə .mlmodel formatına serializasiya.
Konvertasiya zamanı ən çox rast gəlinən problem dəstəklənməyən əməliyyatlardır. Modeldə Core ML-də olmayan bir operator varsa, coremltools əməliyyatın adı ilə xəta bildirir. Həll — operatoru dəstəklənənlərin ekvivalent kombinasiyası ilə əvəz edin və ya custom layer API vasitəsilə fərdi təbəqə tətbiq edin.
İkinci problem — ölçü uyğunsuzluğu. PyTorch NCHW formatından, Core ML isə standart olaraq NHWC-dən istifadə edir. coremltools avtomatik transpozisiya daxil edir, lakin bəzən oxların sırası səhv müəyyənləşdirilir. Konvertasiya jurnallarında giriş və çıxış ölçülərini yoxlayın və zərurət olduqda düzgün adlarla input_features təyin edin.
Üçüncü problem — kvantlaşdırmadan sonra dəqiqliyin itirilməsi. FP16 və ya INT8 palitrası ilə konvertasiya zamanı modelin dəqiqliyi azala bilər. coremltools eyni giriş məlumatlarında orijinal və konvertasiya edilmiş modelin çıxışlarını müqayisə etmək üçün ct.models.CompiledModel köməkçi proqramı təmin edir. Fərq 1%-dən çox olarsa, kalibrasiya olmadan FP16 palitrası ilə kvantlaşdırmadan istifadə edin və ya kvantlaşdırmadan imtina edin.
Giriş məlumatlarının növünü və minimum iOS versiyasını göstərən PyTorch-dan MobileNetV3 modelinin konvertasiya nümunəsi. Şəkillərin avtomatik normallaşdırılması üçün ct.ImageType istifadə edin:
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
)
# Sonrakı kompilyasiya üçün .mlmodel faylında saxla
mlmodel.save("MobileNetV3.mlmodel")
FP16 kvantlaşdırması ilə TensorFlow Keras-dan konvertasiya nümunəsi. Apple A13 və daha yeni cihazlarda FP16 dəstəyini aktivləşdirmək üçün minimum_deployment_target göstərin:
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
)
# Ölçünü 2 dəfə azaltmaq üçün çəkiləri FP16-ya kvantla
mlmodel_fp16 = ct.models.neural_network.quantization_utils.quantize_weights(
mlmodel, 16
)
mlmodel_fp16.save("EfficientNetB0_fp16.mlmodel")
Tez-tez verilən suallar
Bəli, əgər model TorchScript, SavedModel və ya ONNX formatında saxlanılıbsa. coremltools bu formatları mənbə kodu tələb etmədən yükləyir və hesablama qrafı üzrə konvertasiya aparır.
coremltools konvertasiya zamanı jurnalda dəstəklənməyən əməliyyatların siyahısını göstərir. Core ML-nin mövcud operatorlarının tam siyahısını almaq üçün ct.utils.get_coreml_operations() istifadə edin.
Kvantlaşdırma palitrası — bu, modelin çəkilərini sıxışdırmaq üçün parametrlər toplusudur: fp16, int8 və ya palettization. coremltools 8-bit, 16-bit palitra və müxtəlif bit dərinlikləri ilə LUT-kvantlaşdırmasını dəstəkləyir.
Bəli, .mlmodel cihazda işləməzdən əvvəl mlmodelc-yə kompilyasiya edilməlidir. Kompilyasiya Xcode-da qurma zamanı və ya cihazda MLModel.compile(at:) vasitəsilə avtomatik olaraq həyata keçirilir.
Orijinal və konvertasiya edilmiş modelin çıxışlarını müqayisə etmək üçün ct.models.CompiledModel istifadə edin. Eyni giriş məlumatlarını verin və nəticələri MSE və ya cosine similarity metriki ilə müqayisə edin.
Xülasə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun