การแปลงโมเดล Core ML: มันคืออะไร ขั้นตอนและวิธีการแปลง

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-07-17 เวลาอ่าน: 6 นาที

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 — การแปลงโมเดล 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 — ผ่านกราฟแช่เฮ็ด .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 เพื่อลดขนาด 2 เท่า
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 บิต, 16 บิต และ LUT ควอนไตซ์ด้วยความลึกของบิตที่แตกต่างกัน

จำเป็นต้องคอมไพล์หลังจากการแปลงหรือไม่?

ใช่ ไฟล์ .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 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม