YOLO26 模型的 CoreML 导出#
Apple 在每一台现代 iPhone、iPad 和 Mac 中都配备了专用 AI 芯片——Neural Engine,而 CoreML 是 Ultralytics 当前支持的部署路径。将 Ultralytics YOLO26 模型导出为 CoreML,会把训练好的 .pt 检查点转换为原生 .mlpackage,以低延迟在设备上运行全部七项 YOLO 任务,无需网络连接,数据也不会离开设备。
官方 Ultralytics YOLO iOS SDK 和 Flutter 插件 开箱即用地在 Apple Neural Engine 上运行 CoreML 导出模型,支持实时摄像头推理、单图像预测,以及全部七项 YOLO26 任务(包括 Depth)的自动模型下载。如需在 Android NPU 上部署,请参阅 Qualcomm QNN 集成。
在 imgsz=224 导出分类模型。在
imgsz=640 导出检测、分割、语义分割、深度估计、姿态和 OBB 模型。此 224/640 标准由官方 CoreML、LiteRT 和 QNN 移动端资源共用。
Apple 为 iOS 27 和 macOS 27 这一代系统推出了新的 Core AI framework 和 .aimodel 格式,Ultralytics 通过 format="coreai" 导出该格式。CoreML 仍然是 Ultralytics iOS 和 Flutter SDK 以及更广泛 Apple 设备兼容性的推荐格式。
Watch: How to Export Ultralytics YOLO26 to CoreML with INT8 Quantization | Apple Deployment | iOS/MacOS 🍎
什么是 CoreML?#
CoreML(Apple 的样式名称为“Core ML”)是 Apple 的设备端机器学习框架。它以现代 ML Program 格式加载模型,即 Ultralytics 导出器生成的 .mlpackage 捆绑包,并在设备的 CPU、GPU 和 Apple Neural Engine (ANE) 之间调度模型;后者是每颗 Apple silicon 芯片中的专用 NPU。由于所有计算都在本地进行,推理无需联网,不会产生网络延迟,并能让用户数据留在设备上。
CoreML 与 Apple 的 Vision framework 直接集成,由该框架负责将图像输入模型前的缩放和方向处理,这也是 Ultralytics iOS SDK 能以几乎零预处理开销将摄像头帧传给 YOLO 的原因。
为什么要将 YOLO26 导出为 CoreML?#
- Neural Engine 速度:CoreML 会将受支持的操作调度到 Apple Neural Engine 上,以实现低延迟的设备端推理。请参阅下方的实体设备表,并在目标硬件上对你的确切导出模型进行基准测试。
- 选择输出:默认导出将 NMS 留给你的应用。使用
nms=True嵌入 NMS,或使用nms=False获取 YOLO26 的无 NMS 检测头。 - 私密且离线:所有计算都在设备上完成,无需云端往返,无需 API 密钥,并提供完整的数据隐私保护。
- 一次导出,覆盖整个生态:同一个
.mlpackage可运行于 iOS、iPadOS、macOS、watchOS、tvOS 和 visionOS,并为官方 Ultralytics iOS SDK 和 Flutter 插件 提供支持。
实测性能#
在配备 12 GB 内存、运行 iOS 26.5.2 的 iPhone 17 Pro 上,对标准化 v8.3.0 YOLO26n INT8 CoreML 资源进行端到端单图像推理。其 A19 Pro 配备 6 核 CPU(2 个性能核心和 4 个能效核心)、带 Neural Accelerators 的 6 核 GPU,以及 16 核 Neural Engine。每个单元格显示总耗时(预处理 + 推理 + 后处理,不包括标注),下方显示各阶段的耗时拆分。在 iOS 上,Vision 会在推理请求内部执行输入缩放,因此预处理显示为 0,其耗时计入推理。
| 模型 | 任务 | 尺寸 (像素) | CPU Core ML .cpuOnly(毫秒) | CPU + ANE 优先 Core ML .cpuAndNeuralEngine(毫秒) |
|---|---|---|---|---|
| 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 | 语义分割 | 640 | 9.7 0.0 / 9.2 / 0.5 | 4.6 0.0 / 4.2 / 0.5 |
| YOLO26n-depth | 深度 | 640 | 25.0 0.0 / 24.1 / 0.9 | 5.3 0.0 / 4.5 / 0.9 |
| YOLO26n-cls | 分类 | 224 | 2.2 0.0 / 2.2 / 0.0 | 1.9 0.0 / 1.9 / 0.0 |
| YOLO26n-pose | 姿态 | 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 |
- 确切的
v8.3.0发布资源为分类任务声明 224×224 输入,为其他所有任务声明 640×640 输入。 - 速度值是单图像突发延迟:在
bus.jpg上运行 3 次预热后测量 15 次运行的平均值,通过 iOS SDK 的分阶段计时获取,并使用 Flutter 插件 的基准测试工具以 profile 模式(优化的原生代码)进行测量。CPU/加速器顺序在一次连续扫描中按任务交替排列。CPU 行请求 Core ML.cpuOnly;CPU + ANE 优先行请求.cpuAndNeuralEngine,最终的操作放置由 Core ML 控制。持续的实时摄像头运行速度会更低,因为其中包含采集和缩放流程以及热稳定过程。一次标准化之前的历史摄像头扫描在同一设备上测得 YOLO26n 检测为 11.3 毫秒/帧、YOLO26n Depth 为 16.5 毫秒/帧;有关稳态分析,请参阅 iOS SDK 性能文档。 - 请在 LiteRT 集成中比较 Android CPU/GPU 结果,并在 Qualcomm QNN 集成中比较 Snapdragon NPU 结果。
支持的任务#
CoreML 导出支持全部七项 Ultralytics 任务。语义分割和深度估计仅支持 YOLO26,因为它是唯一提供这些检测头的系列。
将 YOLO26 模型导出为 CoreML#
安装#
要安装所需的软件包,请运行:
# Install the required package for YOLO26
pip install ultralyticscoremltools 转换器会在首次导出时自动安装。导出可在 macOS 或 x86 Linux 上运行;如需详细说明和最佳实践,请查看我们的安装指南和常见问题指南。
使用方法#
CoreML 格式支持导出、预测和验证模式。使用 CoreML 进行推理和验证仅可在 macOS 上运行。导出模型后,加载导出的模型即可运行推理或验证其准确率。
from ultralytics import YOLO
# Load a YOLO26 model
model = YOLO("yolo26n.pt")
# Export to CoreML with INT8 weight quantization, matching the official app models
model.export(format="coreml", quantize=8, imgsz=640) # use imgsz=224 for classificationfrom ultralytics import YOLO
# Load the exported CoreML model (macOS)
model = YOLO("yolo26n.mlpackage")
# Run inference
results = model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Load the exported CoreML model (macOS)
model = YOLO("yolo26n.mlpackage")
# Validate accuracy on the COCO8 dataset
metrics = model.val(data="coco8.yaml")导出参数#
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
format | str | 'coreml' | 导出模型的目标格式,用于定义其与各种部署环境的兼容性。 |
imgsz | int 或 tuple | 640 | 模型输入所需的图像尺寸。可以使用表示正方形图像的整数,也可以使用元组 (height, width) 指定具体尺寸。 |
quantize | int 或 str | None | 量化精度(CoreML 仅量化权重):16(FP16)、8(INT8)、"w8a16"(INT8 权重和 FP16 激活),或 32/未设置(FP32)。NMS ML Programs 使用 FP16(用于 Xcode 预览,且分割和姿态任务必需);在检测任务中传入 32 可覆盖该设置。替代已弃用的 half/int8 标志。 |
nms | bool,可选 | None | 选择原始输出(None,默认)、嵌入式 NMS(True)或无 NMS 检测头(False)。嵌入式 NMS 通过 dynamic=False 支持检测、分割和姿态估计。 |
dynamic | bool | False | 允许动态输入尺寸。分类或 RT-DETR 模型不支持此功能,且不能与 nms=True 组合使用。 |
batch | int | 1 | 指定导出模型的批处理推理大小,或指定导出模型在 predict 模式下同时处理的最大图像数量。大于 1 的值需要 dynamic=True。 |
device | str | None | 指定导出设备:GPU(device=0)、CPU(device=cpu)、Apple silicon 的 MPS(device=mps)。 |
如需详细了解导出流程,请访问 Ultralytics 导出文档页面。
以 Neural Engine 为目标#
CoreML 通过 MLModelConfiguration.computeUnits 选择硬件。在 iOS 16 及更高版本上,Ultralytics iOS SDK 默认使用 .cpuAndNeuralEngine,而不是 .all:在实时摄像头应用中,GPU 已经忙于合成预览画面和叠加层,因此排除 GPU 可以避免争用和帧时间抖动,同时由 ANE 承担主要计算。仅在兼容性测试中固定使用 .cpuOnly;上表展示了它的代价。
通过 Ultralytics 或 coremltools 在 Mac 主机上从 Python 运行 CoreML 模型时,也遵循相同规则:Ultralytics 使用 ComputeUnit.CPU_AND_NE 加载(macOS 13 及更高版本;在较早版本的 macOS 上回退到 CPU_ONLY),使推理保持在 Neural Engine 上(速度约为 CPU 的 3 倍)。这也能避免当前 macOS 主机的一个限制:默认的 ComputeUnit.ALL / CPU_AND_GPU 会加入 GPU/MPSGraph 编译路径,并在 coremltools 9.x 上因 Error: MLIR pass manager failed 断言而终止进程。
部署导出的 YOLO26 CoreML 模型#
最快的路径是官方 Ultralytics YOLO iOS SDK,它与 Ultralytics iOS 应用及 Flutter 插件使用同一个 Swift 软件包。它会自动解析官方模型名称,下载并缓存 .mlpackage,然后返回完全解码的结果:
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
}
}对于摄像头应用,可以直接使用 SDK 的 YOLOView,通过原生叠加层实现实时推理;也可以使用 Flutter 插件,为与 Android 共用一个代码库的跨平台应用提供支持。
你也可以使用 Apple 技术栈轻松自行集成原始 .mlpackage:使用 MLModel 加载它,将其封装到 VNCoreMLRequest 中,然后通过 VNImageRequestHandler 输入图像。以下资源介绍了详细信息:
- 将 Core ML 模型集成到你的应用中:Apple 关于打包和调用 CoreML 模型的指南。
- CoreML Tools:为该导出提供支持的
coremltools工具链的转换、量化和优化参考。 - Xcode Core ML 性能报告:针对你的确切模型和设备,提供逐层设备放置与延迟分析。
你可以将模型嵌入应用捆绑包中(立即可用,适合 nano/small 模型),也可以在首次运行时下载并缓存(更小的二进制文件,便于更新模型)。官方应用结合了这两种方式:默认的 nano 模型会随应用捆绑以便立即使用,而更大的变体则按需下载并在本地缓存。
推荐工作流#
- 使用 Ultralytics 的训练模式训练你的模型,或从官方 YOLO26 权重开始
- 在 macOS 或 x86 Linux 上使用
model.export(format="coreml", quantize=8, imgsz=640)导出(分类任务使用imgsz=224) - 在 Mac 上使用
model.val()验证准确率,并通过目标设备上的 Xcode Core ML 性能报告进行分析 - 使用 iOS SDK、Flutter 插件或你自己的 Vision 集成进行部署,目标格式为
.cpuAndNeuralEngine
总结#
在本指南中,你了解了如何将 Ultralytics YOLO26 模型导出为 CoreML 的 .mlpackage 格式,针对 Apple Neural Engine 进行量化,并以个位数毫秒级延迟进行部署——既可以通过官方 iOS SDK 和 Flutter 插件,也可以通过你自己的 Vision 集成完成。如需了解其他部署目标,请浏览集成指南页面,并使用基准测试模式比较各种格式。
常见问题#
在 macOS 或 x86 Linux 上,在 Python 中运行
model.export(format="coreml", imgsz=640),或通过 CLI 运行yolo export model=yolo26n.pt format=coreml imgsz=640。 分类任务使用imgsz=224,并添加quantize=8以匹配官方应用模型。导出结果是一个可供 Xcode、iOS SDK 或 Flutter 插件使用的yolo26n.mlpackageML Program。如果你的应用需要包含 NMS 的检测结果,请使用
nms=True。默认的nms=None导出原始的一对多输出供你的应用处理;nms=False选择 YOLO26 的无 NMS 检测头。嵌入式 NMS 支持具有静态形状的检测、分割和姿态估计;其他任务保留其原生输出。官方 Ultralytics 应用模型以 INT8 形式提供,可最大限度减小下载大小,并达到上表中的速度。
quantize=16(FP16)是一种稳妥的替代方案,准确率基本不会损失。在发布前,请在 Mac 上使用model.val()验证你的确切导出模型。设置
MLModelConfiguration.computeUnits = .cpuAndNeuralEngine(iOS 16 及更高版本上的 iOS SDK 默认值)。在摄像头应用中避免使用.all——GPU 正忙于合成预览画面,在 GPU 上调度推理会导致帧时间抖动。使用 Xcode Core ML 性能报告确认操作放置位置。可以,在 macOS 上:
yolo predict model=yolo26n.mlpackage source=image.jpg和yolo val model=yolo26n.mlpackage data=coco8.yaml的使用方式与其他格式相同。CoreML 执行需要 Apple 硬件,因此这些模式在 Linux 和 Windows 上不可用。使用官方 Ultralytics YOLO iOS SDK(Swift Package)或 Flutter 插件。两者都能按名称加载官方模型,自动下载并缓存,在 Neural Engine 上运行模型,并提供完整的实时摄像头 UI;上面的实测性能表正是使用这套技术栈生成的。