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 任务的自动模型下载,包括深度任务。如需在 Android NPU 上部署,请参阅 Qualcomm QNN 集成。
导出分类模型时使用 imgsz=224。导出检测、分割、语义分割、深度估计、姿态和 OBB 模型时使用 imgsz=640。这一 224/640 标准适用于官方 CoreML、LiteRT 和 QNN 移动端资源。
Apple 为 iOS 27 和 macOS 27 这一代推出了全新的 Core AI 框架和 .aimodel 格式,而 Ultralytics 可通过 format="coreai" 导出该格式。CoreML 仍是 Ultralytics iOS 和 Flutter SDK 的默认格式;在 iOS 27 设备上,Core AI 可作为可选格式加载。CoreML 也适用于更广泛的 Apple 设备。
观看: 如何将 Ultralytics YOLO26 导出为 CoreML 并进行 INT8 量化 | Apple 部署 | iOS/MacOS 🍎
什么是 CoreML?#
CoreML(Apple 将其名称写作“Core ML”)是 Apple 的设备端机器学习框架。它可加载现代 ML Program 格式的模型——也就是 Ultralytics 导出器生成的 .mlpackage 包——并在设备的 CPU、GPU 和 Apple 神经网络引擎(ANE)之间调度模型;ANE 是每款 Apple 芯片中专用的 NPU。由于所有运算都在本地执行,推理无需联网,不会产生网络延迟,用户数据也会留在设备上。
CoreML 可直接集成 Apple 的 Vision 框架,由该框架在输入模型时处理图像缩放和方向校正——这正是 Ultralytics iOS SDK 能以几乎零预处理开销将摄像头帧传给 YOLO 的方式。
为什么要将 YOLO26 导出为 CoreML?#
- 神经网络引擎速度:CoreML 会将受支持的运算调度到 Apple 的神经网络引擎上,以实现低延迟设备端推理。请参阅下方的实体设备表,并在目标硬件上对你的确切导出模型进行基准测试。
- 选择输出方式:默认导出会将 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 个能效核心)、带神经加速器的 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 | 深度 | 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 深度估计为 16.5 毫秒/帧——有关稳态性能分析,请参阅iOS SDK 性能文档。 - 请在 LiteRT 集成中查看 Android CPU/GPU 结果,并在 Qualcomm QNN 集成中查看 Snapdragon NPU 结果。
支持的任务#
CoreML 导出支持 Ultralytics 的全部七种任务。语义分割和深度估计仅适用于 YOLO26,因为只有 YOLO26 系列提供这两种检测头。
将 YOLO26 模型导出为 CoreML#
安装#
要安装所需软件包,请运行:
# Install the required package for YOLO26
pip install ultralytics首次导出时会自动安装 coremltools 转换器。导出可在 macOS 或 x86 Linux 上运行;有关详细说明和最佳实践,请查看安装指南和常见问题指南。
用法#
CoreML 格式支持导出、预测和验证模式。使用 CoreML 进行推理和验证仅支持 macOS。导出模型后,加载导出的模型即可运行推理或验证其准确率。
from ultralytics import YOLO
# 加载 YOLO26 模型
model = YOLO("yolo26n.pt")
# 导出为 CoreML 并使用 INT8 权重量化,与官方应用模型保持一致
model.export(format="coreml", quantize=8, imgsz=640) # 分类任务使用 imgsz=224from ultralytics import YOLO
# 加载导出的 CoreML 模型(macOS)
model = YOLO("yolo26n.mlpackage")
# 运行推理
results = model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# 加载导出的 CoreML 模型(macOS)
model = YOLO("yolo26n.mlpackage")
# 在 COCO8 数据集上验证准确率
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 Program 使用 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 芯片的 MPS(device=mps)。 |
有关导出流程的更多详情,请访问 Ultralytics 导出文档页面。
以神经网络引擎为目标#
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),以便在神经网络引擎上执行推理(速度约为 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,通过原生叠加层进行实时推理;如果要开发与 Android 共用一套代码的跨平台应用,则可使用 Flutter 插件。
使用 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。若要了解其他部署目标,请浏览集成指南页面,并通过基准测试模式比较不同格式。
常见问题#
在 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 SDK 在 iOS 16 及更高版本上的默认值)。摄像头应用应避免使用.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 插件。两者都能按名称加载官方模型,自动下载并缓存模型,在神经网络引擎上运行模型,并提供完整的实时摄像头 UI——上面的性能表正是使用这套工具链测得的。