ExecuTorchでモバイルおよびエッジにYOLO26をデプロイ#
スマートフォン、タブレット、組み込みシステムなどのエッジデバイスにコンピュータービジョンモデルをデプロイするには、パフォーマンスとリソース制約のバランスを取る最適化されたランタイムが必要です。PyTorchのエッジコンピューティング向けソリューションであるExecuTorchにより、Ultralytics YOLOモデルのデバイス上での推論を効率的に実行できます。
このガイドでは、Ultralytics YOLOモデルをExecuTorch形式にエクスポートし、最適化されたパフォーマンスでモバイルおよびエッジデバイスにデプロイする方法を説明します。
ExecuTorchにエクスポートする理由#
ExecuTorchは、モバイルおよびエッジデバイス全体でデバイス上推論機能を実現するための、PyTorchのエンドツーエンドソリューションです。ポータブルかつ効率的であることを目標に構築されたExecuTorchは、幅広いコンピューティングプラットフォームでPyTorchプログラムを実行するために使用できます。
ExecuTorchの主な機能#
ExecuTorchは、エッジデバイスにUltralytics YOLOモデルをデプロイするための強力な機能を複数提供します。
-
ポータブルなモデル形式: ExecuTorchは、リソースに制約のあるデバイスでのサイズと読み込み速度に最適化された
.pte(PyTorch ExecuTorch)形式を使用します。 -
XNNPACKバックエンド: XNNPACKとのデフォルト統合により、モバイルCPUで高度に最適化された推論を実現し、専用ハードウェアを必要とせずに優れたパフォーマンスを提供します。
-
量子化対応: ExecuTorchエコシステムは、モデルサイズの削減と推論速度の向上を目的とした量子化手法をサポートしています。Ultralyticsは現在、XNNPACKバックエンド経由でFP32モデルをエクスポートします。
-
メモリ効率: 最適化されたメモリ管理により実行時のメモリフットプリントを削減し、RAMが限られたデバイスに適した構成を実現します。
-
モデルメタデータ: エクスポートされたモデルには、簡単に統合できるよう、メタデータ(画像サイズ、クラス名など)が個別のYAMLファイルに含まれます。
ExecuTorchでのデプロイオプション#
ExecuTorchモデルは、さまざまなエッジおよびモバイルプラットフォームにデプロイできます。
-
モバイルアプリケーション: iOSおよびAndroidアプリケーションにネイティブパフォーマンスでデプロイし、モバイルアプリでリアルタイム物体検出を実現します。
-
組み込みシステム: Raspberry Pi、NVIDIA Jetson、その他のARMベースシステムなどの組み込みLinuxデバイス上で、最適化されたパフォーマンスで実行します。
-
エッジAIデバイス: 推論を高速化するカスタムデリゲートを備えた専用エッジAIハードウェアにデプロイします。
-
IoTデバイス: クラウド接続を必要とせず、デバイス上で推論できるようIoTデバイスに統合します。
サポートされるタスク#
ExecuTorchエクスポートは、Ultralyticsの7つのタスクすべてをサポートします。セマンティックセグメンテーションと深度推定はYOLO26でのみ利用できます。これらのヘッドを搭載して出荷されるファミリーはYOLO26だけです。
Ultralytics YOLO26モデルのExecuTorchへのエクスポート#
Ultralytics YOLO26モデルをExecuTorch形式に変換すると、モバイルおよびエッジデバイスに効率的にデプロイできます。
インストール#
ExecuTorchへのエクスポートには、Python 3.10~3.13およびPyTorch >= 2.9.0と、executorchパッケージが必要です。
# Install Ultralytics package
pip install ultralyticsインストール手順とベストプラクティスの詳細については、YOLO26インストールガイドをご確認ください。YOLO26に必要なパッケージのインストール中に問題が発生した場合は、解決策とヒントについて一般的な問題のガイドをご参照ください。
使用方法#
YOLO26モデルのExecuTorchへのエクスポートは簡単です。
ExecuTorch形式は、Export、Predict、Validateモードをサポートします。モデルをエクスポートした後、エクスポート済みモデルを読み込んで推論を実行するか、精度を検証してください。
from ultralytics import YOLO
# Load a YOLO26 model
model = YOLO("yolo26n.pt")
# Export the model to ExecuTorch format
model.export(format="executorch") # creates 'yolo26n_executorch_model'from ultralytics import YOLO
# Load the exported ExecuTorch model
model = YOLO("yolo26n_executorch_model")
# Run inference
results = model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Load the exported ExecuTorch model
model = YOLO("yolo26n_executorch_model")
# Validate accuracy on the COCO8 dataset
metrics = model.val(data="coco8.yaml")ExecuTorchのエクスポートでは、.pteファイルとメタデータを含むディレクトリが生成されます。モバイルまたは組み込みアプリケーションでExecuTorchランタイムを使用して.pteモデルを読み込み、推論を実行してください。
エクスポート引数#
ExecuTorch形式にエクスポートする際は、次の引数を指定できます。
| 引数 | 型 | デフォルト | 説明 |
|---|---|---|---|
format | str | 'executorch' | エクスポートされたモデルの対象形式で、さまざまなデプロイ環境との互換性を定義します。 |
imgsz | intまたはtuple | 640 | モデル入力に使用する画像サイズです。正方形画像の場合は整数、特定の寸法の場合はタプル(height, width)を指定できます。 |
quantize | intまたはstr | None | 固定FP32エクスポートです。ExecuTorchエクスポートでは、エクスポート時のFP16、INT8、W8A16への精度変換はサポートされません。 |
batch | int | 1 | エクスポートするモデルのバッチ推論サイズ、またはpredictモードでエクスポート済みモデルが同時に処理する画像の最大数を指定します。 |
device | str | None | エクスポートに使用するデバイスを指定します。GPU(device=0)、CPU(device=cpu)、Appleシリコン向けMPS(device=mps)を指定できます。 |
出力構造#
ExecuTorchエクスポートでは、モデルとメタデータを含むディレクトリが作成されます。
yolo26n_executorch_model/
├── model.pte # ExecuTorch model file
└── metadata.yaml # Model metadata (classes, image size, etc.)エクスポート済みExecuTorchモデルの使用#
モデルをエクスポートした後、ExecuTorchランタイムを使用して対象アプリケーションに統合する必要があります。
モバイル統合#
モバイルアプリケーション(iOS/Android)では、次の操作が必要です。
- ExecuTorchランタイムの追加: ExecuTorchランタイムライブラリをモバイルプロジェクトに含めます
- モデルの読み込み: アプリケーションで
.pteファイルを読み込みます - 推論の実行: 画像を処理して予測結果を取得します
iOS#
iOS統合の例(Objective-C/C++):
// iOS uses C++ APIs for model loading and inference
// See https://pytorch.org/executorch/stable/using-executorch-ios.html for complete examples
#include <executorch/extension/module/module.h>
using namespace ::executorch::extension;
// Load the model
Module module("/path/to/model.pte");
// Create input tensor
float input[1 * 3 * 640 * 640];
auto tensor = from_blob(input, {1, 3, 640, 640});
// Run inference
const auto result = module.forward(tensor);Android#
Maven CentralからExecuTorch Android AARを追加します。
dependencies {
implementation("org.pytorch:executorch-android:<version>")
}Android統合の例(Kotlin):
import org.pytorch.executorch.EValue
import org.pytorch.executorch.Module
import org.pytorch.executorch.Tensor
// Load the model
val module = Module.load("/path/to/model.pte")
// Prepare input tensor
val inputTensor = Tensor.fromBlob(floatData, longArrayOf(1, 3, 640, 640))
val inputEValue = EValue.from(inputTensor)
// Run inference
val outputs = module.forward(inputEValue)
val scores = outputs[0].toTensor().dataAsFloatArray組み込みLinux#
組み込みLinuxシステムでは、ExecuTorch C++ APIを使用します。
#include <executorch/extension/module/module.h>
#include <executorch/extension/tensor/tensor.h>
using namespace ::executorch::extension;
// Load model
Module module("model.pte");
// Prepare input
std::vector<float> input_data = preprocessImage(image);
auto input_tensor = from_blob(input_data.data(), {1, 3, 640, 640});
// Run inference
const auto outputs = module.forward(input_tensor);ExecuTorchをアプリケーションに統合する詳細については、ExecuTorchドキュメントをご覧ください。
パフォーマンスの最適化#
モデルサイズの最適化#
デプロイ用のモデルサイズを削減するには、次の方法を使用します。
- 小さいモデルを使用: 最も小さいフットプリントを実現するため、YOLO26n(nano)から始めます
- 入力解像度を下げる: 小さい画像サイズ(例:
imgsz=320またはimgsz=416)を使用します - 量子化: 量子化手法を適用します(将来のExecuTorchバージョンでサポート予定)
推論速度の最適化#
推論を高速化するには、次の方法を使用します。
- XNNPACKバックエンド: デフォルトのXNNPACKバックエンドにより、最適化されたCPU推論を実現します
- ハードウェアアクセラレーション: プラットフォーム固有のデリゲート(例: iOS向けのCoreML)を使用します
- バッチ処理: 可能な場合は複数の画像を処理します
ベンチマーク#
UltralyticsチームはYOLO26モデルのベンチマークを実施し、PyTorchとExecuTorchの速度および精度を比較しました。
| モデル | 形式 | ステータス | サイズ (MB) | metrics/mAP50-95(B) | 推論時間(ms/画像) |
|---|---|---|---|---|---|
| YOLO26n | PyTorch | ✅ | 5.3 | 0.4790 | 314.80 |
| YOLO26n | ExecuTorch | ✅ | 9.4 | 0.4800 | 142 |
| YOLO26s | PyTorch | ✅ | 19.5 | 0.5730 | 930.90 |
| YOLO26s | ExecuTorch | ✅ | 36.5 | 0.5780 | 376.1 |
推論時間には前処理と後処理は含まれません。
トラブルシューティング#
よくある問題#
問題: Python version error
解決策: ExecuTorchにはPython 3.10から3.13が必要です。サポートされているバージョンで環境を作成してください:
# Using conda
conda create -n executorch python=3.10
conda activate executorch問題: Export fails during first run
解決策: 最新のビルド済みexecutorchホイールがインストールされていることを確認してください。
pip install --upgrade executorch問題: Import errors for ExecuTorch modules
解決策: ExecuTorchが正しくインストールされていることを確認してください。
pip install executorch --force-reinstallトラブルシューティングの詳細については、Ultralytics GitHub IssuesまたはExecuTorchドキュメントをご覧ください。
まとめ#
YOLO26モデルをExecuTorch形式にエクスポートすると、モバイルおよびエッジデバイスに効率的にデプロイできます。PyTorchネイティブの統合、クロスプラットフォーム対応、最適化されたパフォーマンスを備えたExecuTorchは、エッジAIアプリケーションに適した優れた選択肢です。
主なポイント:
- ExecuTorchは、優れたパフォーマンスを備えたPyTorchネイティブのエッジデプロイを提供します
format='executorch'パラメーターで簡単にエクスポートできます- モデルはXNNPACKバックエンドを介してモバイルCPU向けに最適化されます
- iOS、Android、組み込みLinuxプラットフォームをサポートします
- Python 3.10~3.13およびPyTorch >= 2.9.0が必要です
FAQ#
PythonまたはCLIのいずれかを使用して、YOLO26モデルをExecuTorchにエクスポートします。
from ultralytics import YOLO model = YOLO("yolo26n.pt") model.export(format="executorch")または
yolo export model=yolo26n.pt format=executorchExecuTorchエクスポートには次が必要です。
- Python 3.10から3.13
executorchパッケージ(pip install executorch経由でインストール)- PyTorch(ultralyticsとともに自動的にインストールされます)
注:
executorchパッケージにはビルド済みホイール(XNNPACKバックエンド付き)が含まれているため、エクスポート中に追加のコンパイル手順は必要ありません。ExecuTorchモデルは、Pythonでの推論および検証用に
YOLO()で直接読み込めます(上記のPredict/Validateの例をご覧ください)。また、ExecuTorchランタイムライブラリを使用してモバイルおよびエッジデバイスにデプロイすることもできます。ExecuTorchは次をサポートします。
- モバイル: iOSおよびAndroid
- 組み込みLinux: Raspberry Pi、NVIDIA Jetson、その他のARMデバイス
- デスクトップ: Linux、macOS、Windows(開発用)
ExecuTorchとLiteRTは、どちらもモバイルデプロイに適した優れた選択肢です。
- ExecuTorch: PyTorchとの統合、ネイティブなPyTorchワークフロー、拡大を続けるエコシステムに優れています
- LiteRT: より成熟しており、幅広いハードウェアをサポートし、デプロイ例が豊富です。また、Android、iOS、ブラウザーで同じモデルを実行できます
すでにPyTorchを使用しており、ネイティブなデプロイパスが必要な場合はExecuTorchを選択してください。最大限の互換性と成熟したツールを求める場合はLiteRTを選択してください。
はい。ExecuTorchは、さまざまなバックエンドを通じたハードウェアアクセラレーションをサポートします。
- モバイルGPU: Vulkan、Metal、またはOpenCLデリゲート経由
- NPU/DSP: プラットフォーム固有のデリゲート経由
- デフォルト: 最適化されたCPU推論向けのXNNPACK
バックエンド固有のセットアップについては、ExecuTorchドキュメントをご参照ください。