Core ML Model Conversion হল প্রশিক্ষিত মেশিন লার্নিং মডেলগুলিকে জনপ্রিয় ফ্রেমওয়ার্ক থেকে Core ML (.mlmodel) ফরম্যাটে রূপান্তর করার প্রক্রিয়া, যা Apple ডিভাইসে নির্বাহের জন্য অপ্টিমাইজ করা। রূপান্তর প্রয়োজনীয় কারণ PyTorch, TensorFlow এবং অন্যান্য ফ্রেমওয়ার্কগুলি তাদের নিজস্ব ফরম্যাট ব্যবহার করে যা Core ML Runtime-এর সাথে সামঞ্জস্যপূর্ণ নয়। coremltools ডকুমেন্টেশন, 2025 অনুসারে, লাইব্রেরি PyTorch, TensorFlow 1.x এবং 2.x, Keras, ONNX, scikit-learn এবং libsvm থেকে রূপান্তর সমর্থন করে। coremltools স্বয়ংক্রিয়ভাবে অসমর্থিত অপারেশনগুলিকে সমতুল্য অপারেশন দিয়ে প্রতিস্থাপন করে, মডেলের সংখ্যাগত নির্ভুলতা সংরক্ষণ করে।
মূল পয়েন্ট
Core ML Model Conversion হল একটি প্রশিক্ষিত মেশিন লার্নিং মডেলকে উৎস ফ্রেমওয়ার্ক ফরম্যাট থেকে .mlmodel ফরম্যাটে রূপান্তর করার প্রক্রিয়া যা Apple ডিভাইসে Core ML Runtime বোঝে। রূপান্তর ছাড়া, PyTorch বা TensorFlow-এ প্রশিক্ষিত মডেল সরাসরি iOS বা macOS-এ লোড এবং নির্বাহ করা যায় না।
রূপান্তর প্রক্রিয়ায় গণনা গ্রাফ অনুবাদ অন্তর্ভুক্ত: উৎস ফ্রেমওয়ার্কের প্রতিটি অপারেটর (Conv2D, BatchNorm, ReLU) সংশ্লিষ্ট Core ML অপারেটরে ম্যাপ করা হয়। যদি কোনো সরাসরি প্রতিস্থাপন না থাকে, coremltools যৌগিক অপারেশন বা কাস্টম লেয়ার ব্যবহার করে। Apple ML Research অনুসারে, লাইব্রেরি বিভিন্ন ফ্রেমওয়ার্ক থেকে 200 টিরও বেশি অপারেটর কভার করে।
রূপান্তরের পরে, মডেল .mlmodel বান্ডল ফরম্যাটে সংরক্ষিত হয়, যাতে protobuf গ্রাফ বর্ণনা, বাইনারি আকারে ওজন এবং মেটাডেটা অন্তর্ভুক্ত থাকে। এই ফাইলটি তারপর লক্ষ্য ডিভাইসে নির্বাহের জন্য mlmodelc-এ কম্পাইল করা হয়।
coremltools সংস্করণ 7.x ছয়টি উৎস থেকে রূপান্তর সমর্থন করে। PyTorch — torch.jit.trace বা torch.export-এর মাধ্যমে, TensorFlow 2.x — SavedModel এবং Keras H5-এর মাধ্যমে, TensorFlow 1.x — ফ্রোজেন গ্রাফ .pb-এর মাধ্যমে। ONNX-এর জন্য, একটি মধ্যবর্তী উপস্থাপনা ব্যবহার করা হয়, যা পরে Core ML-এ অনুবাদ করা হয়।
| ফ্রেমওয়ার্ক | ইনপুট ফরম্যাট | 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-এর অফিসিয়াল ওপেন-সোর্স Python লাইব্রেরি, যা pip install coremltools-এর মাধ্যমে উপলব্ধ। লাইব্রেরি সমস্ত সমর্থিত ফ্রেমওয়ার্ক থেকে রূপান্তরের জন্য একটি ইউনিফায়েড API প্রদান করে, সেইসাথে পোস্ট-প্রসেসিং সরঞ্জাম: কোয়ান্টাইজেশন, নির্ভুলতা পরীক্ষা এবং গ্রাফ ভিজুয়ালাইজেশন।
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")
TensorFlow থেকে রূপান্তরের জন্য, উৎস হিসাবে SavedModel ব্যবহার করুন। coremltools signature_def-এর উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে ইনপুট এবং আউটপুট টেনসর নির্ধারণ করে:
import coremltools as ct
mlmodel = ct.convert(
"saved_model_dir",
source="tensorflow",
@minimum_deployment_target=ct.target.iOS16
)
mlmodel.save("MyTFModel.mlmodel")
রূপান্তর প্রক্রিয়ায় চারটি ধাপ রয়েছে। প্রথম ধাপে, coremltools উৎস মডেল লোড করে এবং ট্রেসিং বা গ্রাফ স্ক্যানিং করে। PyTorch-এর জন্য, torch.jit.trace ব্যবহার করা হয়, যা মডেলের মাধ্যমে একটি নমুনা ইনপুট চালায় এবং অপারেশনগুলির ক্রম রেকর্ড করে।
দ্বিতীয় ধাপে, অপারেটর ম্যাপিং করা হয়। উৎস গ্রাফের প্রতিটি অপারেটর একটি Core ML অপারেটরে ম্যাপ করা হয়। যদি কোনো সরাসরি প্রতিস্থাপন না থাকে, coremltools অপারেটরটিকে সমর্থিত অপারেটরগুলির একটি ক্রমে বিভক্ত করে। coremltools ডকুমেন্টেশন অনুসারে, সাধারণ আর্কিটেকচারের জন্য PyTorch অপারেটর কভারেজ 95% ছাড়িয়ে যায়।
তৃতীয় ধাপ হল গ্রাফ অপ্টিমাইজেশন। coremltools অপারেশন ফিউশন (যেমন, conv + batch norm), অপ্রয়োজনীয় রূপান্তর অপসারণ এবং দক্ষতা উন্নত করতে অপারেটর পুনর্বিন্যাস করে। চতুর্থ ধাপ হল ওজন এবং মেটাডেটা সংরক্ষণের সাথে .mlmodel ফরম্যাটে সিরিয়ালাইজেশন।
সবচেয়ে সাধারণ রূপান্তর সমস্যা হল অসমর্থিত অপারেশন। যদি মডেলে এমন একটি অপারেটর থাকে যা Core ML-এ অনুপস্থিত, coremltools অপারেশনটির নাম সহ একটি ত্রুটি রিপোর্ট করে। সমাধান হল অপারেটরটিকে সমর্থিত অপারেটরগুলির সমতুল্য সংমিশ্রণ দিয়ে প্রতিস্থাপন করা বা কাস্টম লেয়ার API-এর মাধ্যমে একটি কাস্টম লেয়ার বাস্তবায়ন করা।
দ্বিতীয় সমস্যা হল মাত্রার অমিল। PyTorch NCHW ফরম্যাট ব্যবহার করে, যখন Core ML ডিফল্টরূপে NHWC ব্যবহার করে। coremltools স্বয়ংক্রিয়ভাবে ট্রান্সপোজিশন সন্নিবেশ করে, কিন্তু কখনও কখনও অক্ষের ক্রম ভুলভাবে নির্ধারিত হয়। রূপান্তর লগে ইনপুট এবং আউটপুট মাত্রা পরীক্ষা করুন এবং প্রয়োজনে সঠিক নাম সহ input_features নির্দিষ্ট করুন।
তৃতীয় সমস্যা হল কোয়ান্টাইজেশনের পরে নির্ভুলতা হ্রাস। FP16 বা INT8 প্যালেট দিয়ে রূপান্তর করার সময় মডেলের নির্ভুলতা কমতে পারে। coremltools একই ইনপুট ডেটাতে উৎস এবং রূপান্তরিত মডেলের আউটপুট তুলনা করার জন্য ct.models.CompiledModel ইউটিলিটি প্রদান করে। যদি পার্থক্য 1% ছাড়িয়ে যায়, ক্যালিব্রেশন ছাড়া FP16 প্যালেট দিয়ে কোয়ান্টাইজেশন ব্যবহার করুন বা পুরোপুরি কোয়ান্টাইজেশন এড়িয়ে যান।
ইনপুট টাইপ নির্দিষ্টকরণ এবং ন্যূনতম iOS সংস্করণ সহ PyTorch থেকে MobileNetV3 মডেল রূপান্তরের উদাহরণ। স্বয়ংক্রিয় চিত্র স্বাভাবিকীকরণের জন্য ct.ImageType ব্যবহার করুন:
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
)
# পরবর্তী Xcode এ সংকলনের জন্য .mlmodel এ সংরক্ষণ করুন
mlmodel.save("MobileNetV3.mlmodel")
FP16 কোয়ান্টাইজেশন সহ TensorFlow Keras থেকে রূপান্তরের উদাহরণ। Apple A13 এবং নতুন ডিভাইসে FP16 সমর্থন সক্ষম করতে minimum_deployment_target নির্দিষ্ট করুন:
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গুণ কমানোর জন্য ওজনগুলিকে FP16 এ কোয়ান্টাইজ করুন
mlmodel_fp16 = ct.models.neural_network.quantization_utils.quantize_weights(
mlmodel, 16
)
mlmodel_fp16.save("EfficientNetB0_fp16.mlmodel")
সচরাচর জিজ্ঞাসা
হ্যাঁ, যদি মডেলটি TorchScript, SavedModel বা ONNX ফরম্যাটে সংরক্ষিত থাকে। coremltools এই ফরম্যাটগুলি সোর্স কোডের প্রয়োজন ছাড়াই লোড করে এবং গণনা গ্রাফের উপর ভিত্তি করে রূপান্তর সম্পাদন করে।
coremltools রূপান্তরের সময় লগে অসমর্থিত অপারেশনগুলির তালিকা আউটপুট করে। উপলব্ধ Core ML অপারেটরগুলির সম্পূর্ণ তালিকা পেতে ct.utils.get_coreml_operations() ব্যবহার করুন।
কোয়ান্টাইজেশন প্যালেট হল মডেলের ওজন সংকুচিত করার জন্য প্যারামিটারের একটি সেট: fp16, int8 বা প্যালেটাইজেশন। coremltools 8-বিট, 16-বিট প্যালেট এবং বিভিন্ন বিট গভীরতার সাথে LUT কোয়ান্টাইজেশন সমর্থন করে।
হ্যাঁ, ডিভাইসে নির্বাহের আগে .mlmodel-কে mlmodelc-এ কম্পাইল করতে হবে। বিল্ডের সময় Xcode-এ বা MLModel.compile(at:) এর মাধ্যমে ডিভাইসে কম্পাইলেশন স্বয়ংক্রিয়ভাবে সম্পাদিত হয়।
উৎস এবং রূপান্তরিত মডেলের আউটপুট তুলনা করতে ct.models.CompiledModel ব্যবহার করুন। একই ইনপুট ডেটা প্রদান করুন এবং MSE বা cosine similarity মেট্রিক ব্যবহার করে ফলাফল তুলনা করুন।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন