Core ML Model Conversion: چیست، مراحل و روش‌های تبدیل

نویسنده: IT Sectr منتشر شده: 2026-07-17 زمان مطالعه: 6 دقیقه

Core ML Model Conversion فرآیند تبدیل مدل‌های آموزش‌دیده یادگیری ماشین از فریم‌ورک‌های محبوب به فرمت Core ML (.mlmodel) است که برای اجرا بر روی دستگاه‌های Apple بهینه‌سازی شده است. تبدیل ضروری است زیرا PyTorch، TensorFlow و سایر فریم‌ورک‌ها از فرمت‌های خاص خود استفاده می‌کنند که با Core ML Runtime ناسازگار هستند. به گفته coremltools documentation, 2025، این کتابخانه از تبدیل از PyTorch، TensorFlow 1.x و 2.x، Keras، ONNX، scikit-learn و libsvm پشتیبانی می‌کند. coremltools به طور خودکار عملیات‌های پشتیبانی‌نشده را با معادل‌هایشان جایگزین می‌کند و دقت عددی مدل را حفظ می‌نماید.

نکات اصلی

  • Core ML Model Conversion — تبدیل مدل‌های ML به فرمت .mlmodel برای اجرا بر روی دستگاه‌های Apple.
  • ابزار اصلی — coremltools، کتابخانه متن‌باز Python از Apple.
  • PyTorch، TensorFlow، Keras، ONNX و scikit-learn پشتیبانی می‌شوند.
  • فرآیند شامل ره‌یابی گراف، جایگزینی عملیات و تأیید دقت است.
  • پس از تبدیل می‌توان مدل را برای افزایش سرعت با FP16 یا INT8 quantize کرد.

Core ML Model Conversion چیست

Core ML Model Conversion فرآیند تبدیل یک مدل یادگیری ماشین آموزش‌دیده از فرمت فریم‌ورک اصلی به فرمت .mlmodel است که توسط Core ML Runtime بر روی دستگاه‌های Apple قابل درک است. بدون تبدیل، مدل آموزش‌دیده در PyTorch یا TensorFlow نمی‌تواند مستقیماً در iOS یا macOS بارگذاری و اجرا شود.

فرآیند تبدیل شامل ترجمه گراف محاسباتی است: هر عملگر فریم‌ورک اصلی (Conv2D، BatchNorm، ReLU) به عملگر متناظر Core ML نگاشت می‌شود. اگر جایگزین مستقیمی وجود نداشته باشد، coremltools از عملیات‌های ترکیبی یا لایه‌های سفارشی استفاده می‌کند. به گفته Apple ML Research، این کتابخانه بیش از ۲۰۰ عملگر از فریم‌ورک‌های مختلف را پوشش می‌دهد.

پس از تبدیل، مدل در قالب بسته .mlmodel ذخیره می‌شود که شامل توصیف protobuf گراف، وزن‌ها به صورت باینری و فراداده است. این فایل سپس برای اجرا بر روی دستگاه هدف به mlmodelc کامپایل می‌شود.

فریم‌ورک‌ها و فرمت‌های پشتیبانی‌شده

coremltools نسخه 7.x از تبدیل از شش منبع پشتیبانی می‌کند. PyTorch — از طریق torch.jit.trace یا torch.export، TensorFlow 2.x — از طریق SavedModel و Keras H5، TensorFlow 1.x — از طریق frozen graph .pb. برای ONNX از نمایش میانی استفاده می‌شود که سپس به Core ML ترجمه می‌گردد.

ماتریس سازگاری فریم‌ورک‌ها

فریم‌ورکفرمت ورودیAPI coremltools
PyTorchTorchScript, torch.exportCTConverter / convert()
TensorFlow 2.xSavedModel, Keras H5convert()
TensorFlow 1.xFrozen .pbconvert()
ONNX.onnxonnx_to_coreml()
scikit-learn.pkl / Pipelineconverters.sklearn.convert()
Keras.h5 / .kerasconvert()

ابزارهای تبدیل: coremltools

coremltools — این کتابخانه رسمی Python از Apple با کد منبع باز است که از طریق pip install coremltools قابل نصب می‌باشد. این کتابخانه یک API یکپارچه برای تبدیل از تمام فریم‌ورک‌های پشتیبانی‌شده و همچنین ابزارهای پس‌پردازش ارائه می‌دهد: quantize، بررسی دقت و可视化 گراف.

نصب و تبدیل پایه مدل از PyTorch:

python
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 از SavedModel به عنوان منبع استفاده کنید. coremltools به طور خودکار تنسورهای ورودی و خروجی را بر اساس signature_def تعیین می‌کند:

python
import coremltools as ct

mlmodel = ct.convert(
    "saved_model_dir",
    source="tensorflow",
    @minimum_deployment_target=ct.target.iOS16
)
mlmodel.save("MyTFModel.mlmodel")

مراحل تبدیل مدل

فرآیند تبدیل شامل چهار مرحله است. در مرحله اول، coremltools مدل اصلی را بارگذاری می‌کند و ره‌یابی (tracing) یا اسکن گراف را انجام می‌دهد. برای PyTorch از torch.jit.trace استفاده می‌شود که داده‌های نمونه ورودی را از مدل عبور داده و توالی عملیات را ثبت می‌کند.

در مرحله دوم، نگاشت عملگرها (operator mapping) انجام می‌شود. هر عملگر از گراف اصلی با عملگر Core ML مطابقت داده می‌شود. اگر جایگزین مستقیمی وجود نداشته باشد، coremltools عملگر را به دنباله‌ای از عملگرهای پشتیبانی‌شده تقسیم می‌کند. به گفته مستندات coremltools، پوشش عملگرهای PyTorch برای معماری‌های معمول بیش از ۹۵٪ است.

مرحله سوم — بهینه‌سازی گراف. coremltools ادغام عملیات‌ها (مثلاً conv + batch norm)، حذف تبدیل‌های غیرضروری و مرتب‌سازی مجدد عملگرها را برای افزایش کارایی انجام می‌دهد. مرحله چهارم — سریال‌سازی به فرمت .mlmodel با ذخیره وزن‌ها و فراداده.

مشکلات رایج و راه‌حل‌ها

رایج‌ترین مشکل هنگام تبدیل، عملیات‌های پشتیبانی‌نشده است. اگر مدل شامل عملگری باشد که در Core ML وجود ندارد، coremltools خطایی با نام عملگر گزارش می‌کند. راه‌حل — عملگر را با ترکیب معادلی از عملگرهای پشتیبانی‌شده جایگزین کنید یا یک لایه سفارشی از طریق custom layer API پیاده‌سازی کنید.

مشکل دوم — عدم تطابق ابعاد. PyTorch از فرمت NCHW استفاده می‌کند در حالی که Core ML به طور پیش‌فرض از NHWC استفاده می‌کند. coremltools به طور خودکار ترانهاده را درج می‌کند، اما گاهی ترتیب محورها به درستی تعیین نمی‌شود. ابعاد ورودی و خروجی را در لاگ‌های تبدیل بررسی کنید و در صورت لزوم input_features را با نام‌های صحیح مشخص کنید.

مشکل سوم — کاهش دقت پس از quantize. هنگام تبدیل با پالت FP16 یا INT8، دقت مدل ممکن است کاهش یابد. coremltools ابزار ct.models.CompiledModel را برای مقایسه خروجی‌های مدل اصلی و تبدیل‌شده بر روی داده‌های ورودی یکسان فراهم می‌کند. اگر اختلاف بیش از ۱٪ باشد، از quantize با پالت FP16 بدون کالیبراسیون استفاده کنید یا از quantize صرف‌نظر کنید.

نمونه‌های تبدیل از PyTorch و TensorFlow

نمونه تبدیل مدل MobileNetV3 از PyTorch با مشخص کردن نوع داده‌های ورودی و حداقل نسخه iOS. برای نرمال‌سازی خودکار تصاویر از ct.ImageType استفاده کنید:

python
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
)

# ذخیره در .mlmodel برای کامپایل بعدی در Xcode
mlmodel.save("MobileNetV3.mlmodel")

نمونه تبدیل از TensorFlow Keras با quantize FP16. برای فعال‌سازی پشتیبانی FP16 در دستگاه‌های Apple A13 و جدیدتر، minimum_deployment_target را مشخص کنید:

python
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
)

# quantize کردن وزن‌ها به FP16 برای کاهش ۲ برابری اندازه
mlmodel_fp16 = ct.models.neural_network.quantization_utils.quantize_weights(
    mlmodel, 16
)
mlmodel_fp16.save("EfficientNetB0_fp16.mlmodel")

سؤالات متداول

آیا می‌توان مدل را بدون دسترسی به کد منبع تبدیل کرد؟

بله، اگر مدل در قالب TorchScript، SavedModel یا ONNX ذخیره شده باشد. coremltools این فرمت‌ها را بدون نیاز به کد منبع بارگذاری می‌کند و تبدیل را بر اساس گراف محاسباتی انجام می‌دهد.

چگونه بفهمیم کدام عملیات‌ها در Core ML پشتیبانی نمی‌شوند؟

coremltools لیست عملیات‌های پشتیبانی‌نشده را هنگام تبدیل در لاگ نمایش می‌دهد. برای دریافت لیست کامل عملگرهای موجود Core ML از ct.utils.get_coreml_operations() استفاده کنید.

پالت quantize در coremltools چیست؟

پالت quantize — این مجموعه‌ای از پارامترها برای فشرده‌سازی وزن‌های مدل است: fp16، int8 یا palettization. coremltools از پالت ۸ بیتی، ۱۶ بیتی و LUT-quantize با بیت‌های مختلف پشتیبانی می‌کند.

آیا پس از تبدیل نیاز به کامپایل است؟

بله، .mlmodel باید قبل از اجرا بر روی دستگاه به mlmodelc کامپایل شود. کامپایل به طور خودکار در Xcode هنگام ساخت یا بر روی دستگاه از طریق MLModel.compile(at:) انجام می‌شود.

چگونه دقت مدل تبدیل‌شده را بررسی کنیم؟

از ct.models.CompiledModel برای مقایسه خروجی‌های مدل اصلی و تبدیل‌شده استفاده کنید. داده‌های ورودی یکسان را ارائه دهید و نتایج را با معیار MSE یا cosine similarity مقایسه کنید.

خلاصه

  • Core ML Model Conversion — فرآیند تبدیل مدل‌های ML به فرمت .mlmodel برای اجرا بر روی دستگاه‌های Apple.
  • ابزار اصلی — coremltools، پشتیبانی از PyTorch، TensorFlow، Keras، ONNX و scikit-learn.
  • تبدیل شامل ره‌یابی گراف، نگاشت عملگرها، بهینه‌سازی و سریال‌سازی است.
  • عملیات‌های پشتیبانی‌نشده با ترکیبات معادل جایگزین یا از طریق custom layer API پیاده‌سازی می‌شوند.
  • پس از تبدیل، quantize FP16 و INT8 برای کاهش اندازه و افزایش سرعت استنتاج در دسترس است.
  • قبل از استقرار، دقت مدل را از طریق ct.models.CompiledModel بررسی کنید.
  • خط لوله تبدیل را به عنوان بخشی از CI/CD برای به‌روزرسانی خودکار مدل‌ها در برنامه برنامه‌ریزی کنید.

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید