Ultralytics YOLO27:

YOLO26 模型的 CoreML 导出#

Apple 在每一台现代 iPhone、iPad 和 Mac 中都配备了专用 AI 芯片——Neural Engine,而 CoreML 是 Ultralytics 当前支持的部署路径。将 Ultralytics YOLO26 模型导出为 CoreML,会把训练好的 .pt 检查点转换为原生 .mlpackage,以低延迟在设备上运行全部七项 YOLO 任务,无需网络连接,数据也不会离开设备。

立即通过官方移动应用在 Apple Neural Engine 上运行 YOLO

官方 Ultralytics YOLO iOS SDKFlutter 插件 开箱即用地在 Apple Neural Engine 上运行 CoreML 导出模型,支持实时摄像头推理、单图像预测,以及全部七项 YOLO26 任务(包括 Depth)的自动模型下载。如需在 Android NPU 上部署,请参阅 Qualcomm QNN 集成

官方移动端输入尺寸

imgsz=224 导出分类模型。在 imgsz=640 导出检测、分割、语义分割、深度估计、姿态和 OBB 模型。此 224/640 标准由官方 CoreML、LiteRT 和 QNN 移动端资源共用。

Apple 全新的 Core AI 格式

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?#

Apple CoreML deployment pipeline

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 SDKFlutter 插件 提供支持。

实测性能#

在配备 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
(毫秒)
YOLO26nDetect6409.2
0.0 / 9.2 / 0.0
3.2
0.0 / 3.2 / 0.0
YOLO26n-segSegment64012.6
0.0 / 12.0 / 0.5
4.8
0.0 / 4.2 / 0.6
YOLO26n-sem语义分割6409.7
0.0 / 9.2 / 0.5
4.6
0.0 / 4.2 / 0.5
YOLO26n-depth深度64025.0
0.0 / 24.1 / 0.9
5.3
0.0 / 4.5 / 0.9
YOLO26n-cls分类2242.2
0.0 / 2.2 / 0.0
1.9
0.0 / 1.9 / 0.0
YOLO26n-pose姿态64011.9
0.0 / 11.9 / 0.0
3.9
0.0 / 3.9 / 0.0
YOLO26n-obbOBB64010.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,因为它是唯一提供这些检测头的系列。

任务YOLOv8YOLO11YOLO26
检测
分割
语义
深度
分类
姿态
OBB

将 YOLO26 模型导出为 CoreML#

安装#

要安装所需的软件包,请运行:

安装
# Install the required package for YOLO26
pip install ultralytics

coremltools 转换器会在首次导出时自动安装。导出可在 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 classification
Predict
from 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")

导出参数#

参数类型默认值描述
formatstr'coreml'导出模型的目标格式,用于定义其与各种部署环境的兼容性。
imgszinttuple640模型输入所需的图像尺寸。可以使用表示正方形图像的整数,也可以使用元组 (height, width) 指定具体尺寸。
quantizeintstrNone量化精度(CoreML 仅量化权重):16(FP16)、8(INT8)、"w8a16"(INT8 权重和 FP16 激活),或 32/未设置(FP32)。NMS ML Programs 使用 FP16(用于 Xcode 预览,且分割和姿态任务必需);在检测任务中传入 32 可覆盖该设置。替代已弃用的 half/int8 标志。
nmsbool,可选None选择原始输出(None,默认)、嵌入式 NMS(True)或无 NMS 检测头(False)。嵌入式 NMS 通过 dynamic=False 支持检测、分割和姿态估计。
dynamicboolFalse允许动态输入尺寸。分类或 RT-DETR 模型不支持此功能,且不能与 nms=True 组合使用。
batchint1指定导出模型的批处理推理大小,或指定导出模型在 predict 模式下同时处理的最大图像数量。大于 1 的值需要 dynamic=True
devicestrNone指定导出设备: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 或 coremltoolsMac 主机上从 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 输入图像。以下资源介绍了详细信息:

你可以将模型嵌入应用捆绑包中(立即可用,适合 nano/small 模型),也可以在首次运行时下载并缓存(更小的二进制文件,便于更新模型)。官方应用结合了这两种方式:默认的 nano 模型会随应用捆绑以便立即使用,而更大的变体则按需下载并在本地缓存。

推荐工作流#

  1. 使用 Ultralytics 的训练模式训练你的模型,或从官方 YOLO26 权重开始
  2. 在 macOS 或 x86 Linux 上使用 model.export(format="coreml", quantize=8, imgsz=640) 导出(分类任务使用 imgsz=224
  3. 在 Mac 上使用 model.val() 验证准确率,并通过目标设备上的 Xcode Core ML 性能报告进行分析
  4. 使用 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.mlpackage ML 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.jpgyolo val model=yolo26n.mlpackage data=coco8.yaml 的使用方式与其他格式相同。CoreML 执行需要 Apple 硬件,因此这些模式在 Linux 和 Windows 上不可用。

  • 使用官方 Ultralytics YOLO iOS SDK(Swift Package)或 Flutter 插件。两者都能按名称加载官方模型,自动下载并缓存,在 Neural Engine 上运行模型,并提供完整的实时摄像头 UI;上面的实测性能表正是使用这套技术栈生成的。

评论