YOLO26モデルのCoreMLへのエクスポート#
Appleは現行のすべてのiPhone、iPad、Macに専用AIシリコンであるNeural Engineを搭載しており、現在、CoreMLはモデルをそこにデプロイするためのUltralytics公式サポートパスです。Ultralytics YOLO26モデルをCoreMLにエクスポートすると、学習済みの.ptチェックポイントがネイティブな.mlpackageに変換されます。これにより、7つすべてのYOLOタスクを低レイテンシでデバイス上で実行でき、ネットワーク接続やデータのデバイス外送信も不要です。
公式のUltralytics YOLO iOS SDKとFlutter pluginは、標準でCoreMLエクスポートをApple Neural Engine上で実行します。リアルタイムカメラ推論、単一画像の予測、Depthを含む7つすべてのYOLO26タスクに対応したモデルの自動ダウンロードが可能です。Android NPUへのデプロイについては、Qualcomm QNN integrationをご覧ください。
classificationモデルはimgsz=224にエクスポートします。detect、segment、semantic、depth、pose、OBBモデルは
imgsz=640にエクスポートします。この224/640標準は、公式のCoreML、LiteRT、QNNモバイルアセットで共通です。
AppleはiOS 27およびmacOS 27世代向けに、新しいCore AI frameworkと.aimodel formatを導入しており、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のオンデバイスmachine learningフレームワークです。最新のML Program形式、つまりUltralyticsエクスポーターが生成する.mlpackageバンドルのモデルを読み込み、デバイスのCPU、GPU、Apple Neural Engine (ANE)(すべてのAppleシリコンチップに搭載された専用NPU)に処理を振り分けます。すべてがローカルで実行されるため、推論はオフラインで動作し、ネットワークレイテンシが発生せず、ユーザーデータをデバイス内に保持できます。
CoreMLはAppleのVision frameworkと直接統合されています。Vision frameworkはモデルへの入力時に画像のスケーリングと向きを処理します。これにより、Ultralytics iOS SDKは実質的に前処理コストなしでカメラフレームをYOLOに入力できます。
YOLO26をCoreMLにエクスポートする理由#
- Neural Engineの速度: CoreMLは、対応する演算をAppleのNeural Engineで実行するようスケジュールし、低レイテンシのオンデバイス推論を実現します。下記の実機テーブルを確認し、対象ハードウェアで実際に使用するエクスポートをベンチマークしてください。
- 出力の選択: デフォルトのエクスポートでは、NMSの処理はアプリケーション側に委ねられます。NMSを埋め込むには
nms=Trueを使用し、YOLO26 の NMS フリー ヘッドにはnms=Falseを使用してください。 - プライベートかつオフライン: すべての計算がデバイス内に留まるため、クラウドとの往復、APIキーが不要で、完全なdata privacyを実現します。
- 1回のエクスポートでエコシステム全体に対応: 同じ
.mlpackageをiOS、iPadOS、macOS、watchOS、tvOS、visionOSで実行でき、公式のUltralytics iOS SDKとFlutter pluginを支えます。
実測パフォーマンス#
標準化されたv8.3.0 YOLO26n INT8 CoreMLアセットのエンドツーエンド単一画像推論を、メモリ12 GB、iOS 26.5.2のiPhone 17 Proで測定しました。A19 Proは、6コアCPU(Performanceコア2個、Efficiencyコア4個)、Neural Accelerators搭載の6コアGPU、16コアNeural Engineを備えています。各セルは合計時間(前処理 + 推論 + 後処理、アノテーションを除く)を示し、その下にステージ別の内訳を示します。iOSでは、Visionが推論リクエスト内で入力スケーリングを実行するため、前処理は0として報告され、そのコストは推論に含まれます。
| モデル | タスク | サイズ (ピクセル) | CPU Core ML .cpuOnly(ms) | CPU + ANE優先 Core ML .cpuAndNeuralEngine(ms) |
|---|---|---|---|---|
| YOLO26n | Detect | 640 | 9.2 0.0 / 9.2 / 0.0 | 3.2 0.0 / 3.2 / 0.0 |
| YOLO26n-seg | Segment | 640 | 12.6 0.0 / 12.0 / 0.5 | 4.8 0.0 / 4.2 / 0.6 |
| YOLO26n-sem | Semantic | 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リリースアセットでは、classificationの入力は224×224、その他すべてのタスクの入力は640×640と定義されています。 - Speedの値は単一画像のバーストレイテンシです。
bus.jpgでウォームアップ3回後に15回実行した平均値であり、プロファイルモード(最適化されたネイティブコード)で、iOS SDKのステージ別タイミングを通じて、Flutter pluginのベンチマークハーネスで測定しています。CPU/アクセラレーターの順序は、1回の逐次スイープ内でタスクごとに交互に変更しました。CPU行ではCore ML.cpuOnlyを要求し、CPU + ANE優先行では.cpuAndNeuralEngineを要求します。最終的な演算配置はCore MLが制御します。持続的なリアルタイムカメラ動作では、キャプチャとスケーリングのパイプライン、および熱的な安定化が含まれるため、値は高くなります。標準化前の過去のカメラスイープでは、同じデバイス上でYOLO26n detectが11.3 ms/frame、YOLO26n Depthが16.5 ms/frameでした。定常状態のプロファイリングについては、iOS SDK performance docをご覧ください。 - AndroidのCPU/GPU結果はLiteRT integrationで、Snapdragon NPUの結果はQualcomm QNN integrationで比較してください。
サポートされるタスク#
CoreMLエクスポートは、Ultralyticsの7つすべてのタスクに対応しています。Semantic segmentationとdepth estimationはYOLO26でのみ利用できます。これらのヘッドを提供する唯一のファミリーがYOLO26です。
YOLO26モデルのCoreMLへのエクスポート#
インストール#
必要なパッケージをインストールするには、次を実行します。
# Install the required package for YOLO26
pip install ultralyticscoremltoolsコンバーターは、初回のエクスポート時に自動でインストールされます。エクスポートはmacOSまたはx86 Linuxで実行できます。詳しい手順とベストプラクティスについては、installation guideとCommon Issues guideをご確認ください。
使用方法#
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"(FP16アクティベーションのINT8重み)、または32/未設定(FP32)。NMS ML ProgramsはFP16を使用します(Xcodeプレビューおよびsegment、poseで必須)。detectでは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ドキュメントページをご覧ください。
Neural Engineを対象にする#
CoreMLはMLModelConfiguration.computeUnitsを介してハードウェアを選択します。Ultralytics iOS SDKは、iOS 16以降では.allではなく、デフォルトで.cpuAndNeuralEngineを使用します。リアルタイムカメラアプリでは、GPUはプレビューとオーバーレイの合成ですでに使用中のため、GPUを除外すると競合やフレーム時間の揺らぎを避けながら、ANEが主要な処理を担えます。互換性テストの場合に限り.cpuOnlyを固定してください。コストについては上記のテーブルをご覧ください。
MacホストからPythonでCoreMLモデルを実行する場合(Ultralytics経由またはcoremltools経由)も同じルールに従います。UltralyticsはComputeUnit.CPU_AND_NE(macOS 13以降、古いmacOSではCPU_ONLYにフォールバック)で読み込み、推論をNeural Engine上で実行します(CPUより約3倍高速です)。これにより、デフォルトのComputeUnit.ALL / CPU_AND_GPU(GPU/MPSGraphのコンパイルパスを追加)がcoremltools 9.x上でError: MLIR pass manager failedアサーションによりプロセスを中止する現在のmacOSホスト制限も回避できます。
エクスポート済みYOLO26 CoreMLモデルのデプロイ#
最も高速な方法は、公式のUltralytics YOLO iOS SDKです。これはUltralytics iOSアプリとFlutter pluginを支える同じ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と1つのコードベースを共有するクロスプラットフォームアプリにはFlutter pluginを使用してください。
Appleのスタックを使用すれば、raw .mlpackageを自分で統合することも簡単です。MLModelで読み込み、VNCoreMLRequestでラップし、VNImageRequestHandlerを通じて画像を入力します。詳細については、次のリソースをご覧ください。
- Core ML Modelをアプリに統合する: CoreMLモデルのバンドルと呼び出しに関するAppleのガイドです。
- CoreML Tools: このエクスポートを支える
coremltoolsツールチェーンの変換、量子化、最適化リファレンスです。 - Xcode Core ML Performance Reports: 使用するモデルとデバイスにおける、レイヤーごとのデバイス配置とレイテンシのプロファイリングです。
モデルはアプリバンドルに組み込んで(すぐに利用可能で、nano/smallモデルに最適)出荷するか、初回実行時にダウンロードしてキャッシュできます(バイナリを小さくでき、モデルの更新も容易です)。公式アプリは両方の方法を組み合わせています。デフォルトのnanoモデルはすぐに使用できるようバンドルし、大きなバリアントはオンデマンドでダウンロードしてローカルにキャッシュします。
推奨ワークフロー#
- UltralyticsのTrain modeでモデルをTrainするか、公式YOLO26 weightsから開始します。
- macOSまたはx86 Linuxで
model.export(format="coreml", quantize=8, imgsz=640)を使用してExportします(classificationにはimgsz=224)。 - Macで
model.val()を使用して精度をVerifyし、対象デバイス上のXcode Core ML Performance Reportでプロファイリングします。 - iOS SDK、Flutter plugin、または独自のVision統合を使用してDeployし、
.cpuAndNeuralEngineを対象にします。
まとめ#
このガイドでは、Ultralytics YOLO26モデルをCoreMLの.mlpackage形式にエクスポートし、Apple Neural Engine向けに量子化して、公式iOS SDKとFlutter plugin、または独自のVision統合を通じて、1桁ミリ秒のレイテンシでデプロイする方法を学びました。その他のデプロイ先については、integration guide pageを参照し、Benchmark modeで形式を比較してください。
FAQ#
macOSまたはx86 Linuxで、Pythonでは
model.export(format="coreml", imgsz=640)を、CLIではyolo export model=yolo26n.pt format=coreml imgsz=640を実行します。classificationにはimgsz=224を使用し、公式アプリモデルに合わせるにはquantize=8を追加します。エクスポートにより、Xcode、iOS SDK、Flutter pluginで使用できるyolo26n.mlpackageML Programが生成されます。アプリケーションでNMSが含まれる検出結果が必要な場合は、
nms=Trueを使用してください。デフォルトのnms=Noneは、アプリケーション側で処理するための生の1対多の出力にエクスポートします。nms=Falseは YOLO26 の NMS フリー ヘッドを選択します。埋め込みNMSは静的シェイプでの検出、セグメンテーション、ポーズ推定をサポートし、その他のタスクでは従来の出力が維持されます。公式UltralyticsアプリモデルはINT8で提供されており、ダウンロードサイズを最小化し、上記テーブルの速度で実行できます。
quantize=16(FP16)は、精度を実質的に損なわない保守的な代替手段です。出荷前に、Mac上でmodel.val()を使用して実際に使用するエクスポートを検証してください。MLModelConfiguration.computeUnits = .cpuAndNeuralEngineを設定します(iOS 16以降のiOS SDKのデフォルト)。カメラアプリでは.allを避けてください。GPUはプレビューの合成で使用中であり、そこで推論をスケジュールするとフレーム時間が揺らぐためです。Xcode Core ML Performance Reportで配置を確認してください。はい、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 pluginを使用してください。どちらも公式モデルを名前で読み込み、自動ダウンロードとキャッシュを行い、Neural Engine上で実行します。また、完全なリアルタイムカメラUIも含まれています。上記の実測パフォーマンステーブルは、まさにこのスタックで生成されています。