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 για επιτάχυνση.

Τι είναι το 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, η βιβλιοθήκη καλύπτει περισσότερους από 200 τελεστές από διάφορα πλαίσια.

Μετά τη μετατροπή, το μοντέλο αποθηκεύεται σε μορφή πακέτου .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 για μετατροπή από όλα τα υποστηριζόμενα πλαίσια, καθώς και εργαλεία μετα-επεξεργασίας: κβάντιση, έλεγχο ακρίβειας και οπτικοποίηση γράφου.

Εγκατάσταση και βασική μετατροπή μοντέλου από 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 υπερβαίνει το 95% για τυπικές αρχιτεκτονικές.

Τρίτο στάδιο — βελτιστοποίηση γράφου. Το coremltools εκτελεί συγχώνευση λειτουργιών (π.χ. conv + batch norm), αφαίρεση περιττών μετασχηματισμών και αναδιάταξη τελεστών για αύξηση της αποδοτικότητας. Τέταρτο στάδιο — σειριοποίηση σε μορφή .mlmodel με διατήρηση βαρών και μεταδεδομένων.

Συνήθη προβλήματα και λύσεις

Το πιο συνηθισμένο πρόβλημα κατά τη μετατροπή είναι οι μη υποστηριζόμενες λειτουργίες. Εάν το μοντέλο περιέχει έναν τελεστή που λείπει από το Core ML, το coremltools αναφέρει σφάλμα με το όνομα της λειτουργίας. Λύση — αντικαταστήστε τον τελεστή με έναν ισοδύναμο συνδυασμό υποστηριζόμενων ή υλοποιήστε ένα προσαρμοσμένο επίπεδο μέσω custom layer API.

Δεύτερο πρόβλημα — αναντιστοιχία διαστάσεων. Το PyTorch χρησιμοποιεί τη μορφή NCHW, ενώ το Core ML χρησιμοποιεί προεπιλεγμένα NHWC. Το coremltools εισάγει αυτόματα μεταφορά, αλλά μερικές φορές η σειρά των αξόνων καθορίζεται λανθασμένα. Ελέγξτε τις διαστάσεις εισόδου και εξόδου στα αρχεία καταγραφής μετατροπής και εάν χρειάζεται, καθορίστε το input_features με σωστά ονόματα.

Τρίτο πρόβλημα — απώλεια ακρίβειας μετά από κβάντιση. Κατά τη μετατροπή με παλέτα FP16 ή INT8, η ακρίβεια του μοντέλου μπορεί να μειωθεί. Το coremltools παρέχει το βοηθητικό πρόγραμμα ct.models.CompiledModel για σύγκριση εξόδων του αρχικού και του μετατραπέντος μοντέλου στα ίδια δεδομένα εισόδου. Εάν η διαφορά υπερβαίνει το 1%, χρησιμοποιήστε κβάντιση με παλέτα FP16 χωρίς βαθμονόμηση ή εγκαταλείψτε την κβάντιση.

Παραδείγματα μετατροπής από 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 με κβάντιση FP16. Καθορίστε το minimum_deployment_target για ενεργοποίηση υποστήριξης FP16 σε συσκευές με Apple A13 και νεότερες:

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
)

# Κβάντισε τα βάρη σε FP16 για 2x μείωση μεγέθους
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 εμφανίζει λίστα των μη υποστηριζόμενων λειτουργιών στο αρχείο καταγραφής κατά τη μετατροπή. Χρησιμοποιήστε το ct.utils.get_coreml_operations() για να λάβετε την πλήρη λίστα των διαθέσιμων τελεστών Core ML.

Τι είναι η παλέτα κβάντισης στο coremltools;

Η παλέτα κβάντισης είναι ένα σύνολο παραμέτρων για συμπίεση βαρών μοντέλου: fp16, int8 ή palettization. Το coremltools υποστηρίζει παλέτα 8-bit, 16-bit και κβάντιση LUT με διαφορετικά βάθη bit.

Απαιτείται μεταγλώττιση μετά τη μετατροπή;

Ναι, το .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.
  • Μετά τη μετατροπή, διατίθεται κβάντιση FP16 και INT8 για μείωση μεγέθους και επιτάχυνση συμπερασμού.
  • Πριν από την ανάπτυξη, ελέγξτε την ακρίβεια του μοντέλου μέσω ct.models.CompiledModel.
  • Σχεδιάστε τον αγωγό μετατροπής ως μέρος του CI/CD για αυτόματη ενημέρωση μοντέλων στην εφαρμογή.

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης