YOLO Vision 2026:

针对 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 神经网络引擎上运行 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 目前暂不支持导出该格式。CoreML 仍然是当前 Ultralytics 版本和更广泛的 Apple 设备兼容性所支持的格式。



Watch: How to Export Ultralytics YOLO26 to CoreML for 2x Fast Inference on Apple Devices 🚀

什么是 CoreML?#

Apple CoreML deployment pipeline

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

性能测试#

针对标准化 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检测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-depthDepth64025.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 插件基准测试工具(经过优化的原生代码)进行测量。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 时可用,这是唯一带有这些输出头的模型系列。

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

将 YOLO26 模型导出到 CoreML#

安装#

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

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

coremltools 转换器在首次导出时会自动安装。导出可在 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 classification
预测
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"(带 FP16 激活的 INT8 权重),或 32 / 未设置(FP32)。未设置的 NMS ML Programs 在 Xcode 预览中使用 FP16;传递 32 可进行覆盖。它替代了已弃用的 half/int8 标志。
nmsboolFalse嵌入一个 CoreML NMS 流水线。仅限检测模型(对于其他任务将被忽略并发出警告);无 NMS 的 YOLO26 不需要此功能,请用于 YOLO11 等早期模型。
dynamicboolFalse允许动态输入尺寸,增强处理不同图像尺寸时的灵活性。
batchint1指定导出模型的批处理推理大小,或导出的模型在 predict 模式下同时处理的最大图像数量。
devicestrNone指定用于导出的设备: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 馈送图像。以下资源涵盖了详细信息:

将模型嵌入应用包中发布(即时可用,非常适合 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 集成。有关其他部署目标,请浏览集成指南页面,并通过基准测试模式对比格式。

常见问题解答#

如何将 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.jpgyolo val model=yolo26n.mlpackage data=coco8.yaml 的工作方式与其他格式相同。CoreML 执行需要 Apple 硬件,因此这些模式在 Linux 和 Windows 上不可用。

在 iOS 或 Flutter 应用中运行 YOLO26 的最快方法是什么?#

使用官方的 Ultralytics YOLO iOS SDK(Swift 软件包)或 Flutter 插件。两者均可通过名称加载官方模型并自动下载和缓存、在神经网络引擎上运行它们,并包含完整的实时相机 UI——上面测量的性能表正是使用此技术栈生成的。

评论