ExecuTorchでモバイルとエッジにYOLO11 導入する
スマートフォン、タブレット、組み込みシステムなどのエッジデバイスにコンピュータビジョンモデルを展開するには、パフォーマンスとリソース制約のバランスをとる最適化されたランタイムが必要です。PyTorchエッジコンピューティング向けソリューションであるExecuTorchは、以下のようなデバイス上での効率的な推論を可能にします。 Ultralytics YOLOモデルのための効率的なオンデバイス推論を可能にします。
このガイドでは、Ultralytics YOLO モデルを ExecuTorch フォーマットにエクスポートする方法を説明します。これにより、最適化されたパフォーマンスでモバイルやエッジデバイスにモデルを展開することができます。
なぜ ExecuTorch にエクスポートするのですか?
ExecuTorchは、モバイルデバイスやエッジデバイスでオンデバイス推論機能を実現するPyTorchエンドツーエンドソリューションです。ポータブルで効率的であることを目標に構築されたExecuTorchは、様々なコンピューティングプラットフォーム上でPyTorch プログラムを実行するために使用することができます。
ExecuTorchの主な特徴
ExecuTorchは、Ultralytics YOLO モデルをエッジデバイスに展開するためのいくつかの強力な機能を提供します:
-
ポータブル・モデル・フォーマット:ExecuTorch は
.pte
PyTorch ExecuTorch) フォーマットで、リソースに制約のあるデバイスでのサイズと読み込み速度に最適化されています。 -
XNNPACKバックエンド:XNNPACKとのデフォルトの統合は、モバイルCPU上で高度に最適化された推論を提供し、特別なハードウェアを必要とせずに優れたパフォーマンスを実現します。
-
量子化のサポート:精度を維持しながらモデルサイズを縮小し、推論速度を向上させる量子化技術をビルトインでサポート。
-
メモリ効率:最適化されたメモリ管理により、ランタイム・メモリ・フットプリントが削減され、RAMに制限のあるデバイスに適しています。
-
モデルのメタデータ:エクスポートされたモデルには、簡単に統合できるように、メタデータ(画像サイズ、クラス名など)が別のYAMLファイルに含まれています。
ExecuTorch での展開オプション
ExecuTorchモデルは、さまざまなエッジ・プラットフォームやモバイル・プラットフォームに展開できる:
-
モバイルアプリケーション:iOS およびAndroid アプリケーションにネイティブパフォーマンスでデプロイし、モバイルアプリケーションでリアルタイムのオブジェクト検出を可能にします。
-
組み込みシステム:Raspberry Pi、NVIDIA Jetson、その他のARMベースのシステムなどの組み込みLinuxデバイスで、最適化されたパフォーマンスで実行できます。
-
エッジAIデバイス:推論を加速するためのカスタムデリゲートを備えた専用のエッジAIハードウェアに展開します。
-
IoTデバイス:IoTデバイスに統合することで、クラウド接続を必要とせずにデバイス上で推論を行うことができます。
Ultralytics YOLO11 モデルのExecuTorchへのエクスポート
Ultralytics YOLO11 モデルをExecuTorch形式に変換することで、モバイルやエッジデバイスへの効率的な展開が可能になります。
インストール
ExecuTorchのエクスポートには、Python 3.10以上と特定の依存関係が必要です:
インストール
# Install Ultralytics package
pip install ultralytics
インストールプロセスに関する詳細な手順とベストプラクティスについては、YOLO11インストールガイドを確認してください。YOLO11に必要なパッケージをインストールする際に問題が発生した場合は、一般的な問題ガイドで解決策とヒントを参照してください。
使用法
YOLO11 モデルをExecuTorchにエクスポートするのは簡単です:
使用法
from ultralytics import YOLO
# Load the YOLO11 model
model = YOLO("yolo11n.pt")
# Export the model to ExecuTorch format
model.export(format="executorch") # creates 'yolo11n_executorch_model' directory
executorch_model = YOLO("yolo11n_executorch_model")
results = executorch_model.predict("https://ultralytics.com/images/bus.jpg")
# Export a YOLO11n PyTorch model to ExecuTorch format
yolo export model=yolo11n.pt format=executorch # creates 'yolo11n_executorch_model' directory
# Run inference with the exported model
yolo predict model=yolo11n_executorch_model source=https://ultralytics.com/images/bus.jpg
エクスポート引数
ExecuTorch フォーマットにエクスポートする場合、以下の引数を指定できます:
引数 | 種類 | デフォルト | 説明 |
---|---|---|---|
imgsz |
int または list |
640 |
モデル入力用の画像サイズ(高さ、幅) |
device |
str |
'cpu' |
輸出に使用するデバイス ('cpu' ) |
出力構造
ExecuTorch エクスポートは、モデルとメタデータを含むディレクトリを作成します:
yolo11n_executorch_model/
├── yolo11n.pte # ExecuTorch model file
└── metadata.yaml # Model metadata (classes, image size, etc.)
エクスポートされた ExecuTorch モデルの使用
モデルをエクスポートした後、ExecuTorch ランタイムを使用してターゲット・アプリケーションに統合する必要があります。
モバイル・インテグレーション
モバイルアプリケーションiOSAndroidiOS)の場合、以下のことが必要です:
- ExecuTorch ランタイムを追加します:モバイル・プロジェクトに ExecuTorch ランタイム・ライブラリをインクルードする。
- 負荷モデル:をロードする。
.pte
ファイルを作成します。 - 推論を実行する:画像を処理して予測を得る
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/yolo11n.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 統合例(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/yolo11n.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>
// Load model
auto module = torch::executor::Module("yolo11n.pte");
// Prepare input
std::vector<float> input_data = preprocessImage(image);
auto input_tensor = torch::executor::Tensor(input_data, {1, 3, 640, 640});
// Run inference
auto outputs = module.forward({input_tensor});
アプリケーションへの ExecuTorch の統合の詳細については、ExecuTorch ドキュメント を参照してください。
パフォーマンスの最適化
モデルサイズの最適化
配備のためにモデルのサイズを小さくする:
- 小さいモデルを使う:フットプリントが最も小さいYOLO11n(ナノ)から始める
- 入力分解能の低下:画像サイズを小さくする(例.
imgsz=320
またはimgsz=416
) - 量子化:量子化技術を適用(将来のExecuTorchバージョンでサポート)
推論スピードの最適化
より速い推論のために:
- XNNPACKバックエンド:デフォルトのXNNPACKバックエンドは、最適化されたCPU 推論を提供する。
- ハードウェア・アクセラレーション:プラットフォーム固有のデリゲートを使用(例:iOS用CoreML
- バッチ処理:可能な限り複数の画像を処理
ベンチマーク
Ultralytics チームはYOLO11 モデルをベンチマークし、PyTorch ExecuTorchのスピードと精度を比較した。
パフォーマンス
モデル | 形式 | ステータス | サイズ(MB) | メトリクス/mAP50-95(B) | 推論時間 (ms/im) |
---|---|---|---|---|---|
YOLO11n | PyTorch | ✅ | 5.4 | 0.5060 | 337.67 |
YOLO11n | エクゼキュートーチ | ✅ | 11 | 0.5080 | 167.28 |
YOLO11s | PyTorch | ✅ | 19 | 0.5770 | 928.80 |
YOLO11s | エクゼキュートーチ | ✅ | 37 | 0.5780 | 388.31 |
注
推論時間には、プリ/ポスト処理は含まれていません。
トラブルシューティング
よくある問題
問題: Python version error
解決方法ExecuTorch にはPython 3.10 以上が必要です。Python アップグレードしてください:
```bash
# Using conda
conda create -n executorch python=3.10
conda activate executorch
```
問題: Export fails during first run
解決方法ExecuTorchは、初回使用時にコンポーネントのダウンロードとコンパイルが必要な場合があります。以下を確認してください:
```bash
pip install --upgrade executorch
```
問題: Import errors for ExecuTorch modules
解決策ExecuTorch が正しくインストールされていることを確認してください:
```bash
pip install executorch --force-reinstall
```
トラブルシューティングのヘルプについては、Ultralytics GitHub IssuesまたはExecuTorch Documentation をご覧ください。
概要
YOLO11 モデルをExecuTorchフォーマットにエクスポートすることで、モバイルやエッジデバイスへの効率的なデプロイが可能になります。PyTorch統合、クロスプラットフォームのサポート、最適化されたパフォーマンスにより、ExecuTorchはエッジAIアプリケーションに最適です。
主な収穫
- ExecuTorchは優れたパフォーマンスでPyTorchエッジデプロイメントを提供します。
- エクスポートは
format='executorch'
パラメータ - モデルはXNNPACKバックエンドによってモバイルCPUに最適化されている。
- iOS、Android、組み込みLinuxプラットフォームに対応
- Python 3.10+とFlatBuffersコンパイラが必要
よくある質問
YOLO11 モデルをExecuTorch形式にエクスポートするにはどうすればよいですか?
Python またはCLI、YOLO11 モデルをExecuTorchにエクスポートします:
```python
from ultralytics import YOLO
model = YOLO("yolo11n.pt")
model.export(format="executorch")
```
または
```bash
yolo export model=yolo11n.pt format=executorch
```
ExecuTorch export のシステム要件は何ですか。
ExecuTorchエクスポートが必要です:
- Python 3.10以上
executorch
パッケージ(インストールはpip install executorch
)- PyTorch (ultralytics一緒に自動的にインストールされる)
注意: 最初のエクスポートの際、ExecuTorchはFlatBuffersコンパイラを含む必要なコンポーネントを自動的にダウンロードし、コンパイルします。
Python直接ExecuTorchモデルの推論を実行できますか?
ExecuTorchモデル(.pte
ファイル) は、ExecuTorch ランタイムを使用したモバイル・デバイスやエッジ・デバイスへのデプロイ用に設計されています。で直接ロードすることはできません。 YOLO()
Python推論用。ExecuTorch ランタイム・ライブラリを使用して、それらをターゲット・アプリケーションに統合する必要があります。
ExecuTorch がサポートしているプラットフォームは?
ExecuTorchはサポートしている:
- モバイル:iOS およびAndroid
- 組み込みLinux:Raspberry Pi、NVIDIA Jetson、その他のARMデバイス
- デスクトップLinux、macOS、Windows(開発用)
ExecuTorchとTFLiteのモバイル展開の比較は?
ExecuTorchとTFLiteはどちらもモバイル展開に優れている:
- ExecuTorch:より良いPyTorch 統合、ネイティブなPyTorch ワークフロー、成長するエコシステム
- TFLite:より成熟し、幅広いハードウェアをサポート、より多くの導入例
すでにPyTorch 、ネイティブなデプロイパスが必要な場合は、ExecuTorchを選択してください。最大限の互換性と成熟したツールを求めるなら TFLite を選んでください。
ExecuTorchモデルをGPU アクセラレーションで使用できますか?
はい!ExecuTorchは様々なバックエンドを通してハードウェア・アクセラレーションをサポートしています:
- モバイルGPU:Vulkan、Metal、またはOpenCLデリゲート経由
- NPU/DSP:プラットフォーム固有のデリゲート経由
- デフォルト最適化されたCPU 推論用のXNNPACK
バックエンド固有の設定については、ExecuTorch のドキュメントを参照してください。