针对 YOLO26 模型的 CoreML 导出#
Apple 在每款现代 iPhone、iPad 和 Mac 中都内置了专属的 AI 芯片——神经网络引擎(Neural Engine),而 CoreML 正是 Ultralytics 目前支持的将模型部署到该芯片的途径。将 Ultralytics YOLO26 模型导出为 CoreML,可将训练好的 .pt 检查点转换为原生 .mlpackage,从而在设备上以低延迟运行所有七个 YOLO 任务,且无需网络连接,数据也不会离开设备。
官方的 Ultralytics YOLO iOS SDK 和 Flutter 插件 开箱即可在 Apple 神经网络引擎上运行 CoreML 导出文件——支持所有七个 YOLO26 任务(包括深度任务)的实时相机推理、单图预测以及自动模型下载。关于 Android NPU 部署,请参阅 Qualcomm QNN 集成。
导出分类模型的路径为 imgsz=224。导出检测、分割、语义、深度、姿态和 OBB 模型的路径为
imgsz=640。这一 224/640 标准由官方的 CoreML、LiteRT 和 QNN 移动端资产共同采用。
Apple 针对 iOS 27 和 macOS 27 代产品推出了全新的 Core AI 框架及 .aimodel 格式,但 Ultralytics 目前暂不支持导出该格式。CoreML 仍然是当前 Ultralytics 版本和更广泛的 Apple 设备兼容性所支持的格式。
Watch: How to Export Ultralytics YOLO26 to CoreML for 2x Fast Inference on Apple Devices 🚀
什么是 CoreML?#
CoreML(被 Apple 称为“Core ML”)是 Apple 的端侧机器学习框架。它以现代的 ML Program 格式加载模型——即 Ultralytics 导出器生成的 .mlpackage 软件包——并将其调度到设备的 CPU、GPU 以及作为所有 Apple 硅芯片专用 NPU 的**苹果神经网络引擎(ANE)**上运行。由于所有计算均在本地运行,因此推理支持离线工作、不增加网络延迟,并能将用户数据保留在设备上。
CoreML 直接与 Apple 的视觉框架(Vision framework)集成,该框架负责在模型输入端处理图像缩放和方向——这也是 Ultralytics iOS SDK 能够以几乎零预处理成本向 YOLO 提供相机帧的方式。
为什么将 YOLO26 导出为 CoreML?#
- Neural Engine 速度:CoreML 会将支持的操作调度到 Apple 的 Neural Engine 上,以实现低延迟的设备端推理。请参阅下方的物理设备表格,并在你的目标硬件上对你的确切导出进行基准测试。
- 天生无 NMS:YOLO26 是端到端的,因此导出的图不需要 NMS 流水线,解码时间不到一毫秒。像 YOLO11 这样的旧检测模型可以通过
nms=True嵌入 CoreML NMS 流水线。 - 私密且离线:所有计算均保留在设备上——无需云端往返、无需 API 密钥,保障完全的数据隐私。
- 一次导出,全生态通用:同一个
.mlpackage可在 iOS、iPadOS、macOS、watchOS、tvOS 和 visionOS 上运行,并为官方的 Ultralytics iOS SDK 和 Flutter 插件提供支持。
性能测试#
针对标准化 v8.3.0 YOLO26n INT8 CoreML 资产在配备 12 GB 内存和 iOS 26.5.2 的 iPhone 17 Pro 上进行的端到端单图推理。其 A19 Pro 拥有 6 核 CPU(2 个性能核心和 4 个能效核心)、带神经网络加速器的 6 核 GPU 以及 16 核神经网络引擎。每个单元格显示的是总时间(预处理 + 推理 + 后处理,不含注释),其下方列出了各个阶段的耗时拆分。在 iOS 上,Vision 会在推理请求内部执行输入缩放,因此预处理报告为 0,其开销已包含在推理中。
| 模型 | 任务 | 尺寸 (像素) | CPU Core ML .cpuOnly(毫秒) | CPU + 优先使用 ANE Core ML .cpuAndNeuralEngine(毫秒) |
|---|---|---|---|---|
| YOLO26n | 检测 | 640 | 9.2 0.0 / 9.2 / 0.0 | 3.2 0.0 / 3.2 / 0.0 |
| YOLO26n-seg | 分割 | 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 | 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 插件基准测试工具(经过优化的原生代码)进行测量。CPU/加速器顺序在一次顺序扫描中各任务交替执行。CPU 行请求 Core ML.cpuOnly;CPU + 优先使用 ANE 行请求.cpuAndNeuralEngine,最终的操作放置位置由 Core ML 控制。持续的实时相机运行时间会更高,因为它包含捕获和缩放流水线以及热平衡。在同一设备上进行的早期预标准相机扫描测得 YOLO26n 检测为 11.3 毫秒/帧,YOLO26n 深度为 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 格式支持导出(Export)、预测(Predict)和验证(Validate)模式。使用 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"(带 FP16 激活的 INT8 权重),或 32 / 未设置(FP32)。未设置的 NMS ML Programs 在 Xcode 预览中使用 FP16;传递 32 可进行覆盖。它替代了已弃用的 half/int8 标志。 |
nms | bool | False | 嵌入一个 CoreML NMS 流水线。仅限检测模型(对于其他任务将被忽略并发出警告);无 NMS 的 YOLO26 不需要此功能,请用于 YOLO11 等早期模型。 |
dynamic | bool | False | 允许动态输入尺寸,增强处理不同图像尺寸时的灵活性。 |
batch | int | 1 | 指定导出模型的批处理推理大小,或导出的模型在 predict 模式下同时处理的最大图像数量。 |
device | str | None | 指定用于导出的设备:GPU(device=0)、CPU(device=cpu)、适用于 Apple 硅芯片的 MPS(device=mps)。 |
有关导出过程的更多详细信息,请访问 Ultralytics 关于导出的文档页面。
针对 Neural Engine 进行优化#
CoreML 通过 MLModelConfiguration.computeUnits 选择硬件。Ultralytics iOS SDK 在 iOS 16+ 上默认使用 .cpuAndNeuralEngine 而非 .all:在实时相机应用中,GPU 已经忙于合成预览和叠加层,因此将其排除可以避免争用和帧时间抖动,同时由 ANE 承担繁重的工作。仅在进行兼容性测试时才固定使用 .cpuOnly——上表显示了这样做的代价。
从 Python 在 Mac 主机上运行 CoreML 模型(通过 Ultralytics 或 coremltools)遵循相同的规则: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 神经网络引擎对其进行量化,并以单毫秒级的延迟进行部署——无论是通过官方 iOS SDK 和 Flutter 插件还是你自己的 Vision 集成。有关其他部署目标,请浏览集成指南页面,并通过基准测试模式对比格式。
常见问题解答#
如何将 YOLO26 模型导出为 CoreML 格式?#
在 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.mlpackage ML Program。
导出 YOLO26 时我需要 nms=True 吗?#
不需要。YOLO26 是端到端无 NMS 的,因此导出的图已经可以输出最终检测结果,解码成本远低于一毫秒。nms=True 选项适用于早期检测模型(例如 YOLO11),它会在其中嵌入 CoreML NMS 流水线,这样你的应用就不必实现抑制。CoreML NMS 流水线仅支持目标检测,因此对于分割和姿态等其他任务,nms=True 会被忽略并伴有警告。
我应该使用哪种精度——FP16 还是 INT8?#
官方 Ultralytics 应用模型以 INT8 形式发布,这最大限度地减小了下载大小并能以如上表所示的速度运行。quantize=16(FP16)是一个保守的替代方案,基本上没有准确度损失。在发布之前,请在 Mac 上使用 model.val() 验证你的精确导出。
如何确保推理在 Neural Engine 上运行?#
设置 MLModelConfiguration.computeUnits = .cpuAndNeuralEngine(iOS 16+ 上 iOS SDK 的默认值)。在相机应用中避免使用 .all——GPU 正忙于合成预览,在此处调度推理会导致帧时间抖动。使用 Xcode Core ML 性能报告确认放置位置。
我可以使用 Ultralytics CLI 运行和验证 CoreML 模型吗?#
可以,在 macOS 上:yolo predict model=yolo26n.mlpackage source=image.jpg 和 yolo val model=yolo26n.mlpackage data=coco8.yaml 的工作方式与其他格式相同。CoreML 执行需要 Apple 硬件,因此这些模式在 Linux 和 Windows 上不可用。
在 iOS 或 Flutter 应用中运行 YOLO26 的最快方法是什么?#
使用官方的 Ultralytics YOLO iOS SDK(Swift 软件包)或 Flutter 插件。两者均可通过名称加载官方模型并自动下载和缓存、在神经网络引擎上运行它们,并包含完整的实时相机 UI——上面测量的性能表正是使用此技术栈生成的。