Export CoreML cho model YOLO26#
Apple trang bị chip AI chuyên dụng — Neural Engine — trong mọi iPhone, iPad và Mac hiện đại, và CoreML là quy trình được Ultralytics hỗ trợ hiện nay để triển khai model lên chip này. Export model Ultralytics YOLO26 sang CoreML chuyển checkpoint .pt đã huấn luyện thành .mlpackage gốc, chạy cả bảy tác vụ YOLO trên thiết bị với độ trễ thấp, không cần kết nối mạng và không đưa dữ liệu ra khỏi thiết bị.
SDK Ultralytics YOLO iOS và plugin Flutter chính thức chạy các bản export CoreML trên Apple Neural Engine ngay sau khi cài đặt — suy luận camera thời gian thực, dự đoán ảnh đơn và tự động tải model cho cả bảy tác vụ YOLO26, bao gồm Depth. Để triển khai trên NPU Android, xem tích hợp Qualcomm QNN.
Xuất model phân loại tại imgsz=224. Xuất model detect, segment, semantic, depth, pose và OBB tại imgsz=640. Chuẩn 224/640 này được dùng chung cho các asset di động CoreML, LiteRT và QNN chính thức.
Apple đã giới thiệu framework Core AI và định dạng .aimodel mới cho thế hệ iOS 27 và macOS 27, và Ultralytics hỗ trợ xuất sang định dạng này bằng format="coreai". CoreML vẫn là định dạng mặc định cho các SDK iOS và Flutter của Ultralytics; các SDK này tải Core AI dưới dạng tùy chọn trên thiết bị iOS 27, đồng thời CoreML vẫn là định dạng tương thích rộng hơn với các thiết bị Apple.
Xem: Cách export Ultralytics YOLO26 sang CoreML với lượng tử hóa INT8 | Triển khai trên Apple | iOS/MacOS 🍎
CoreML là gì?#
CoreML (Apple viết là "Core ML") là framework machine learning chạy trực tiếp trên thiết bị của Apple. CoreML tải model ở định dạng ML Program hiện đại — gói .mlpackage do trình xuất Ultralytics tạo ra — rồi lập lịch chạy model trên CPU, GPU và Apple Neural Engine (ANE) của thiết bị; ANE là NPU chuyên dụng có trong mọi chip Apple silicon. Vì mọi thứ đều chạy cục bộ, quá trình inference hoạt động ngoại tuyến, không phát sinh độ trễ mạng và giữ dữ liệu người dùng trên thiết bị.
CoreML tích hợp trực tiếp với framework Vision của Apple, framework này xử lý việc co giãn và định hướng ảnh trước khi đưa vào model — nhờ đó SDK iOS của Ultralytics truyền các khung hình camera đến YOLO với chi phí tiền xử lý gần như bằng không.
Tại sao nên xuất YOLO26 sang CoreML?#
- Tốc độ Neural Engine: CoreML lập lịch các phép toán được hỗ trợ trên Neural Engine của Apple để inference độ trễ thấp ngay trên thiết bị. Xem bảng trên thiết bị thực bên dưới và benchmark chính xác bản xuất của bạn trên phần cứng mục tiêu.
- Chọn đầu ra: Bản xuất mặc định để ứng dụng của bạn xử lý NMS. Dùng
nms=Trueđể nhúng NMS hoặcnms=Falsecho head không dùng NMS của YOLO26. - Riêng tư và ngoại tuyến: Toàn bộ tính toán diễn ra trên thiết bị — không trao đổi dữ liệu qua cloud, không cần khóa API, đảm bảo quyền riêng tư dữ liệu.
- Một lần xuất, dùng cho toàn hệ sinh thái: Cùng một
.mlpackagechạy trên iOS, iPadOS, macOS, watchOS, tvOS và visionOS, đồng thời hỗ trợ chính thức SDK iOS và plugin Flutter của Ultralytics.
Hiệu năng đo được#
Inference một ảnh từ đầu đến cuối cho các asset CoreML INT8 YOLO26n chuẩn hóa v8.3.0 trên iPhone 17 Pro với bộ nhớ 12 GB và iOS 26.5.2. A19 Pro có CPU 6 lõi (2 lõi Performance và 4 lõi Efficiency), GPU 6 lõi với Neural Accelerators và Neural Engine 16 lõi. Mỗi ô hiển thị tổng thời gian (tiền xử lý + inference + hậu xử lý, không tính chú thích) cùng thời gian từng giai đoạn bên dưới. Trên iOS, Vision thực hiện co giãn đầu vào trong yêu cầu inference, nên thời gian tiền xử lý được ghi là 0 và chi phí này được tính vào inference.
| Model | Tác vụ | kích thước (pixel) | CPU Core ML .cpuOnly(ms) | Ưu tiên CPU + ANE Core ML .cpuAndNeuralEngine(ms) |
|---|---|---|---|---|
| YOLO26n | Detect | 640 | 9.2 0.0 / 9.2 / 0.0 | 3.2 0.0 / 3.2 / 0.0 |
| YOLO26n-seg | Segment | 640 | 12.6 0.0 / 12.0 / 0.5 | 4.8 0.0 / 4.2 / 0.6 |
| YOLO26n-sem | Ngữ nghĩa | 640 | 9.7 0.0 / 9.2 / 0.5 | 4.6 0.0 / 4.2 / 0.5 |
| YOLO26n-depth | Độ sâu | 640 | 25.0 0.0 / 24.1 / 0.9 | 5.3 0.0 / 4.5 / 0.9 |
| YOLO26n-cls | Phân loại | 224 | 2.2 0.0 / 2.2 / 0.0 | 1.9 0.0 / 1.9 / 0.0 |
| YOLO26n-pose | Tư thế | 640 | 11.9 0.0 / 11.9 / 0.0 | 3.9 0.0 / 3.9 / 0.0 |
| YOLO26n-obb | OBB | 640 | 10.6 0.0 / 10.6 / 0.0 | 3.4 0.0 / 3.4 / 0.0 |
- Các asset phát hành
v8.3.0chính xác khai báo đầu vào 224×224 cho phân loại và 640×640 cho mọi tác vụ khác. - Giá trị Tốc độ là độ trễ theo đợt cho một ảnh — trung bình của 15 lần chạy sau 3 lần chạy làm nóng trên
bus.jpg, được đo bằng phương thức tính thời gian từng giai đoạn của SDK iOS thông qua bộ benchmark của plugin Flutter ở chế độ profile (mã native đã tối ưu). Thứ tự CPU/bộ tăng tốc được luân phiên giữa các tác vụ trong một lượt chạy tuần tự. Các hàng CPU yêu cầu Core ML.cpuOnly; các hàng ưu tiên CPU + ANE yêu cầu.cpuAndNeuralEngine, còn Core ML quyết định vị trí thực thi cuối cùng của từng phép toán. Hoạt động camera thời gian thực liên tục có thời gian cao hơn vì bao gồm pipeline thu nhận và co giãn ảnh, cùng thời gian ổn định nhiệt. Một lượt đo camera lịch sử trước khi chuẩn hóa ghi nhận 11.3 ms/khung hình cho detect YOLO26n và 16.5 ms/khung hình cho Depth YOLO26n trên cùng thiết bị — xem tài liệu hiệu năng SDK iOS để biết cách profiling trạng thái ổn định. - So sánh kết quả CPU/GPU trên Android trong tích hợp LiteRT và kết quả NPU Snapdragon trong tích hợp Qualcomm QNN.
Các tác vụ được hỗ trợ#
Xuất CoreML hỗ trợ cả bảy tác vụ của Ultralytics. Phân đoạn ngữ nghĩa và ước tính độ sâu chỉ có trên YOLO26, dòng model duy nhất có các head này.
Xuất model YOLO26 sang CoreML#
Cài đặt#
Để cài đặt package cần thiết, hãy chạy:
# Install the required package for YOLO26
pip install ultralyticsTrình chuyển đổi coremltools được cài đặt tự động trong lần xuất đầu tiên. Quá trình xuất chạy trên macOS hoặc Linux x86; để xem hướng dẫn chi tiết và các phương pháp hay nhất, hãy tham khảo hướng dẫn cài đặt và hướng dẫn Các vấn đề thường gặp của chúng tôi.
Cách sử dụng#
Định dạng CoreML hỗ trợ các chế độ Export, Predict và Validate. Inference và validation bằng CoreML chỉ chạy trên macOS. Hãy xuất model, sau đó tải model đã xuất để chạy inference hoặc xác thực độ chính xác.
from ultralytics import YOLO
# Nạp model YOLO26
model = YOLO("yolo26n.pt")
# Xuất sang CoreML với lượng tử hóa trọng số INT8, tương ứng với các model ứng dụng chính thức
model.export(format="coreml", quantize=8, imgsz=640) # dùng imgsz=224 cho phân loạifrom ultralytics import YOLO
# Tải model CoreML đã xuất (macOS)
model = YOLO("yolo26n.mlpackage")
# Chạy suy luận
results = model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Tải model CoreML đã xuất (macOS)
model = YOLO("yolo26n.mlpackage")
# # Đánh giá độ chính xác trên bộ dữ liệu COCO8
metrics = model.val(data="coco8.yaml")Các tham số xuất model#
| Đối số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
format | str | 'coreml' | Định dạng đích của model đã xuất, xác định khả năng tương thích với nhiều môi trường triển khai. |
imgsz | int hoặc tuple | 640 | Kích thước ảnh mong muốn cho đầu vào model. Có thể là số nguyên cho ảnh vuông hoặc tuple (height, width) để chỉ định kích thước cụ thể. |
quantize | int hoặc str | None | Độ chính xác lượng tử hóa (chỉ lượng tử hóa trọng số cho CoreML): 16 (FP16), 8 (INT8), "w8a16" (trọng số INT8 với activation FP16) hoặc 32/để trống (FP32). ML Program NMS dùng FP16 (cho bản xem trước trong Xcode và theo yêu cầu của segment và pose); truyền 32 để ghi đè cho detect. Thay thế các flag half/int8 đã lỗi thời. |
nms | bool, không bắt buộc | None | Chọn đầu ra thô (None, mặc định), NMS nhúng (True) hoặc head không dùng NMS (False). NMS nhúng hỗ trợ detect, segment và pose với dynamic=False. |
dynamic | bool | False | Cho phép kích thước đầu vào động. Không hỗ trợ cho model phân loại hoặc RT-DETR và không thể kết hợp với nms=True. |
batch | int | 1 | Chỉ định kích thước batch inference khi xuất model hoặc số ảnh tối đa mà model đã xuất sẽ xử lý đồng thời ở chế độ predict. Giá trị lớn hơn 1 cần dynamic=True. |
device | str | None | Chỉ định thiết bị dùng để xuất: GPU (device=0), CPU (device=cpu), MPS cho Apple silicon (device=mps). |
Để biết thêm chi tiết về quy trình xuất, hãy truy cập trang tài liệu Ultralytics về xuất model.
Nhắm đến Neural Engine#
CoreML chọn phần cứng thông qua MLModelConfiguration.computeUnits. SDK iOS của Ultralytics mặc định dùng .cpuAndNeuralEngine trên iOS 16+ thay vì .all: trong ứng dụng camera thời gian thực, GPU vốn đã bận tổng hợp preview và lớp phủ, nên loại GPU khỏi lựa chọn sẽ tránh tranh chấp tài nguyên và dao động thời gian khung hình, trong khi ANE xử lý phần tính toán nặng. Chỉ cố định .cpuOnly để kiểm tra khả năng tương thích — bảng trên cho thấy chi phí của lựa chọn này.
Chạy model CoreML từ Python trên máy chủ Mac (qua Ultralytics hoặc coremltools) cũng tuân theo quy tắc tương tự: Ultralytics tải model bằng ComputeUnit.CPU_AND_NE (macOS 13+, tự chuyển về CPU_ONLY trên các phiên bản macOS cũ hơn), giữ inference trên Neural Engine (nhanh hơn CPU khoảng ~3×). Cách này cũng tránh một hạn chế hiện tại của macOS trên máy chủ, trong đó ComputeUnit.ALL / CPU_AND_GPU mặc định — bổ sung đường biên dịch GPU/MPSGraph — khiến tiến trình bị hủy do assertion Error: MLIR pass manager failed trên coremltools 9.x.
Triển khai model YOLO26 CoreML đã xuất#
Cách nhanh nhất là dùng SDK Ultralytics YOLO cho iOS chính thức, cùng một package Swift hỗ trợ ứng dụng iOS của Ultralytics và plugin Flutter. SDK tự động phân giải tên model chính thức, tải xuống và lưu vào bộ nhớ đệm .mlpackage, rồi trả về kết quả đã giải mã hoàn chỉnh:
import UltralyticsYOLO
// Loads the official INT8 model (downloaded and cached on first use), then runs inference
let yolo = YOLO("yolo26n", task: .detect) { result in
if case .success(let model) = result {
let results = model(uiImage) // boxes, labels, confidences, timing
}
}Với ứng dụng camera, hãy thêm YOLOView của SDK để inference thời gian thực với lớp phủ native, hoặc dùng plugin Flutter cho ứng dụng đa nền tảng dùng chung một codebase với Android.
Tự tích hợp .mlpackage thô cũng rất đơn giản với bộ công cụ của Apple — tải bằng MLModel, bọc trong VNCoreMLRequest và đưa ảnh vào qua VNImageRequestHandler. Các tài nguyên sau trình bày chi tiết:
- Tích hợp model Core ML vào ứng dụng: Hướng dẫn của Apple về cách đóng gói và gọi model CoreML.
- Công cụ CoreML: Tài liệu tham khảo về chuyển đổi, lượng tử hóa và tối ưu hóa cho toolchain
coremltoolsđược dùng để xuất model này. - Báo cáo hiệu năng Core ML trong Xcode: Profiling vị trí thực thi từng layer trên thiết bị và độ trễ cho model cũng như thiết bị cụ thể của bạn.
Đóng gói model ngay trong bundle ứng dụng (có thể dùng ngay, lý tưởng cho model nano/nhỏ) hoặc tải xuống trong lần chạy đầu tiên rồi lưu vào bộ nhớ đệm (binary nhỏ hơn, dễ cập nhật model). Các ứng dụng chính thức kết hợp cả hai cách: model nano mặc định được đóng gói để dùng ngay, còn các biến thể lớn hơn được tải theo yêu cầu và lưu cục bộ vào bộ nhớ đệm.
Quy trình được khuyến nghị#
- Huấn luyện model bằng chế độ Train của Ultralytics hoặc bắt đầu từ các trọng số YOLO26 chính thức
- Xuất bằng
model.export(format="coreml", quantize=8, imgsz=640)trên macOS hoặc Linux x86 (imgsz=224cho phân loại) - Xác minh độ chính xác bằng
model.val()trên máy Mac và profiling bằng báo cáo hiệu năng Core ML trong Xcode trên thiết bị mục tiêu - Triển khai bằng SDK iOS, plugin Flutter hoặc tích hợp Vision của riêng bạn, nhắm đến
.cpuAndNeuralEngine
Tóm tắt#
Trong hướng dẫn này, bạn đã tìm hiểu cách xuất model Ultralytics YOLO26 sang định dạng .mlpackage của CoreML, lượng tử hóa model cho Apple Neural Engine và triển khai với độ trễ chỉ vài mili giây — thông qua SDK iOS và plugin Flutter chính thức hoặc tích hợp Vision của riêng bạn. Để xem các đích triển khai khác, hãy tham khảo trang hướng dẫn tích hợp và so sánh định dạng bằng chế độ Benchmark.
Câu hỏi thường gặp#
Chạy
model.export(format="coreml", imgsz=640)trong Python hoặcyolo export model=yolo26n.pt format=coreml imgsz=640từ CLI trên macOS hoặc Linux x86. Dùngimgsz=224cho phân loại và thêmquantize=8để khớp với các model ứng dụng chính thức. Quá trình xuất tạo ra ML Programyolo26n.mlpackagesẵn sàng dùng với Xcode, SDK iOS hoặc plugin Flutter.Dùng
nms=Truenếu ứng dụng cần các detection có NMS tích hợp.nms=Nonemặc định xuất đầu ra thô one-to-many để ứng dụng xử lý;nms=Falsechọn head không dùng NMS của YOLO26. NMS nhúng hỗ trợ detect, segment và pose với shape tĩnh; các tác vụ khác giữ nguyên đầu ra gốc.Các model ứng dụng Ultralytics chính thức được phát hành ở dạng INT8, giúp giảm kích thước tải xuống và đạt tốc độ như trong bảng trên.
quantize=16(FP16) là lựa chọn thận trọng hơn, hầu như không làm giảm độ chính xác. Hãy xác thực chính xác bản xuất của bạn bằngmodel.val()trên máy Mac trước khi phát hành.Đặt
MLModelConfiguration.computeUnits = .cpuAndNeuralEngine(mặc định của SDK iOS trên iOS 16+). Tránh dùng.alltrong ứng dụng camera — GPU đang bận tổng hợp preview, và lập lịch inference trên GPU sẽ gây dao động thời gian khung hình. Xác nhận vị trí thực thi bằng báo cáo hiệu năng Core ML trong Xcode.Có, trên macOS:
yolo predict model=yolo26n.mlpackage source=image.jpgvàyolo val model=yolo26n.mlpackage data=coco8.yamlhoạt động như với mọi định dạng khác. Thực thi CoreML cần phần cứng Apple, vì vậy các chế độ này không khả dụng trên Linux và Windows.Dùng SDK Ultralytics YOLO cho iOS chính thức (Swift Package) hoặc plugin Flutter. Cả hai đều tải model chính thức theo tên với khả năng tự động tải xuống và lưu vào bộ nhớ đệm, chạy model trên Neural Engine và cung cấp giao diện camera thời gian thực hoàn chỉnh — bảng hiệu năng đo được ở trên được tạo bằng chính stack này.