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 एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें