针对 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 通过 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 硅芯片专用 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" (INT8 权重加 FP16 激活),或 32/未设置 (FP32)。NMS ML Programs 使用 FP16(用于 Xcode 预览,且 segment 和 pose 任务必需);传递 32 可在 detect 任务中覆盖。替换了已弃用的 half/int8 标志。 |
nms | bool | False | 将 NMS 嵌入到导出的模型中。支持 detect、segment 和 pose 任务(对于其他任务会发出警告并忽略);无 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 集成。有关其他部署目标,请浏览集成指南页面,并通过基准测试模式对比格式。
常见问题解答#
在 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。不需要。YOLO26 是端到端无 NMS 的,因此导出的图已经直接输出最终检测结果,解码开销远低于一毫秒。
nms=True选项适用于 YOLO11 等早期模型,它能嵌入 NMS,省去了你的应用去实现抑制逻辑的麻烦。它支持 detect、segment 和 pose 模型;对于其他任务,nms=True会被忽略并发出警告。官方 Ultralytics 应用模型以 INT8 形式发布,这最大限度地减小了下载大小并能以如上表所示的速度运行。
quantize=16(FP16)是一个保守的替代方案,基本上没有准确度损失。在发布之前,请在 Mac 上使用model.val()验证你的精确导出。设置
MLModelConfiguration.computeUnits = .cpuAndNeuralEngine(iOS 16+ 上 iOS SDK 的默认值)。在相机应用中避免使用.all——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 软件包)或 Flutter 插件。两者均可通过名称加载官方模型并自动下载和缓存、在神经网络引擎上运行它们,并包含完整的实时相机 UI——上面测量的性能表正是使用此技术栈生成的。