Ultralytics YOLO27:
Get Started

YOLO26 模型的 CoreML 导出#

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

立即通过官方移动应用在 Apple Neural Engine 上运行 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 全新的 Core AI 格式

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

Apple CoreML deployment pipeline

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检测6409.2
0.0 / 9.2 / 0.0
3.2
0.0 / 3.2 / 0.0
YOLO26n-seg分割64012.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 深度估计为 16.5 毫秒/帧——有关稳态性能分析,请参阅iOS SDK 性能文档。
  • 请在 LiteRT 集成中查看 Android CPU/GPU 结果,并在 Qualcomm QNN 集成中查看 Snapdragon NPU 结果。

支持的任务#

CoreML 导出支持 Ultralytics 的全部七种任务。语义分割和深度估计仅适用于 YOLO26,因为只有 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

# 加载 YOLO26 模型
model = YOLO("yolo26n.pt")

# 导出为 CoreML 并使用 INT8 权重量化,与官方应用模型保持一致
model.export(format="coreml", quantize=8, imgsz=640)  # 分类任务使用 imgsz=224
预测
from 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")

导出参数#

参数类型默认值说明
formatstr'coreml'导出模型的目标格式,用于定义与各种部署环境的兼容性。
imgszint 或 tuple640模型输入所需的图像尺寸。正方形图像可使用整数;若要指定具体尺寸,则可使用元组 (height, width)。
quantizeint 或 strNone量化精度(CoreML 仅量化权重):16(FP16)、8(INT8)、"w8a16"(INT8 权重搭配 FP16 激活值),或 32/未设置(FP32)。NMS ML Program 使用 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 芯片的 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 输入图像。以下资源介绍了相关细节:

你可以将模型打包到应用程序包中(立即可用,非常适合 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 神经网络引擎进行量化,并以个位数毫秒级延迟进行部署——你可以使用官方 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 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——上面的性能表正是使用这套工具链测得的。

评论