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などの組み込みLinuxデバイスや、その他のARMベースのシステムで、最適化されたパフォーマンスで実行します。
-
エッジAIデバイス: 加速推論のためのカスタムデリゲートを使用して、特化したエッジAIハードウェアにデプロイします。
-
IoTデバイス: クラウド接続の要件なしで、IoTデバイスに統合してオンデバイス推論を実行します。
サポートされているタスク#
ExecuTorchのエクスポートは、7つのUltralyticsタスクすべてをサポートしています。セマンティックセグメンテーションと深度推定は、それらのヘッドを搭載している唯一のファミリである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 Installation guideをご確認ください。YOLO26に必要なパッケージのインストール中に問題が発生した場合は、Common Issues guideを参照して解決策やヒントを確認してください。
使用方法#
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 Documentationをご覧ください。
パフォーマンスの最適化#
モデルサイズの最適化#
デプロイに向けてモデルサイズを縮小するには:
- より小さなモデルを使用する: フットプリントが最小のYOLO26n (nano) から始める
- 入力解像度の低下: より小さい画像サイズを使用します(例:
imgsz=320またはimgsz=416) - 量子化: 量子化技術を適用する(将来のExecuTorchバージョンでサポート予定)
推論速度の最適化#
推論を高速化するには:
- XNNPACKバックエンド: デフォルトのXNNPACKバックエンドが最適化されたCPU推論を提供
- ハードウェアアクセラレーション: プラットフォーム固有のデリゲートを使用する(例: iOSの場合はCoreML)
- バッチ処理: 可能であれば複数の画像をまとめて処理する
ベンチマーク#
UltralyticsチームはYOLO26モデルのベンチマークを行い、PyTorchとExecuTorch間の速度と精度を比較しました。
| モデル | 形式 | ステータス | サイズ (MB) | metrics/mAP50-95(B) | 推論時間 (ms/im) |
|---|---|---|---|---|---|
| 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以上が必要です。Python環境をアップグレードしてください:
# 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 Documentationをご覧ください。
要約#
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 以上
executorchパッケージ(pip install executorch経由でインストール)- PyTorch (ultralyticsと共に自動的にインストールされます)
注意:
executorchパッケージには事前ビルド済みのホイール(XNNPACKバックエンド付き)が同梱されているため、エクスポート中に追加のコンパイル手順は必要ありません。ExecuTorchモデルは、Pythonでの推論と検証のために
YOLO()を使用して直接読み込むことができ(上記のPredict/Validateの例を参照)、ExecuTorchランタイムライブラリを使用してモバイルおよびエッジデバイスにデプロイすることもできます。ExecuTorchのサポート対象:
- Mobile: iOSおよびAndroid
- Embedded Linux: Raspberry Pi、NVIDIA Jetson、およびその他のARMデバイス
- Desktop: Linux、macOS、およびWindows(開発用)
ExecuTorchとLiteRTはいずれもモバイルデプロイに最適です:
- ExecuTorch: より優れたPyTorch統合、ネイティブなPyTorchワークフロー、成長するエコシステム
- LiteRT: より成熟しており、幅広いハードウェアをサポートし、展開事例も多く、Android、iOS、ブラウザで同じモデルを実行できます。
PyTorchを既に使用しており、ネイティブな展開パスを求める場合はExecuTorchを選択してください。最大限の互換性と成熟したツールを求める場合はLiteRTを選択してください。
はい。ExecuTorchは、さまざまなバックエンドを介してハードウェアアクセラレーションをサポートしています。
- Mobile GPU: Vulkan、Metal、またはOpenCLデリゲート経由
- NPU/DSP: プラットフォーム固有のデリゲート経由
- Default: 最適化されたCPU推論のためのXNNPACK
バックエンド固有のセットアップについては、ExecuTorch Documentationを参照してください。