ExecuTorchを使用してモバイルおよびエッジデバイスでYOLO26をデプロイ

スマートフォン、タブレット、組み込みシステムなどのエッジデバイスでコンピュータビジョンモデルをデプロイするには、パフォーマンスとリソースの制約のバランスをとる最適化されたランタイムが必要です。PyTorchのエッジコンピューティング向けソリューションであるExecuTorchにより、Ultralytics YOLOモデルの効率的なオンデバイス推論が可能になります。

本ガイドでは、Ultralytics YOLOモデルをExecuTorch形式にエクスポートし、モバイルおよびエッジデバイスでモデルを最適化されたパフォーマンスでデプロイする方法を説明します。

なぜExecuTorchにエクスポートするのか?

PyTorch ExecuTorch mobile inference framework

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 YOLO26モデルをExecuTorchにエクスポートする

Ultralytics YOLO26モデルをExecuTorch形式に変換することで、モバイルおよびエッジデバイスでの効率的なデプロイが可能になります。

インストール

ExecuTorchのエクスポートには、Python 3.10以上と特定の依存関係が必要です。

インストール
# Install Ultralytics package
pip install ultralytics

インストールプロセスに関する詳細な手順とベストプラクティスについては、YOLO26インストールガイドを確認してください。YOLO26に必要なパッケージをインストールする際に問題が発生した場合は、一般的な問題ガイドで解決策やヒントを参照してください。

使用方法

YOLO26モデルをExecuTorchにエクスポートするのは簡単です。

使用方法
from ultralytics import YOLO

# Load the YOLO26 model
model = YOLO("yolo26n.pt")

# Export the model to ExecuTorch format
model.export(format="executorch")  # creates 'yolo26n_executorch_model' directory

# Load the exported ExecuTorch model
executorch_model = YOLO("yolo26n_executorch_model")

# Run inference on a single image
results = executorch_model.predict("https://ultralytics.com/images/bus.jpg")

ExecuTorchのエクスポートは、.pteファイルとメタデータを含むディレクトリを生成します。モバイルまたは組み込みアプリケーションでExecuTorchランタイムを使用して、.pteモデルを読み込み推論を実行します。

エクスポート引数

ExecuTorch形式にエクスポートする際、以下の引数を指定できます。

引数タイプデフォルト説明
formatstr'executorch'エクスポートされたモデルのターゲットフォーマット。さまざまなデプロイ環境との互換性を定義します。
imgszint または tuple640モデル入力に希望する画像サイズ。正方形の画像の場合は整数、特定の寸法のタプル (height, width) で指定できます。
batchint1エクスポートされたモデルのバッチ推論サイズ、または predict モードでモデルが同時に処理する画像の最大数を指定します。
devicestrNoneエクスポートするデバイスを指定します:GPU (device=0)、CPU (device=cpu)、Appleシリコン用MPS (device=mps)。

出力構造

ExecuTorchのエクスポートは、モデルとメタデータを含むディレクトリを作成します。

yolo26n_executorch_model/
├── yolo26n.pte              # ExecuTorch model file
└── metadata.yaml            # Model metadata (classes, image size, etc.)

エクスポートされたExecuTorchモデルの使用

モデルをエクスポートした後、ExecuTorchランタイムを使用してターゲットアプリケーションに統合する必要があります。

モバイル統合

モバイルアプリケーション(iOS/Android)の場合、以下の手順が必要です。

  1. ExecuTorchランタイムの追加: モバイルプロジェクトにExecuTorchランタイムライブラリを含めます。
  2. モデルの読み込み: アプリケーションで.pteファイルを読み込みます。
  3. 推論の実行: 画像を処理して予測を取得します。

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/yolo26n.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/yolo26n.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("yolo26n.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ドキュメントをご覧ください。

パフォーマンスの最適化

モデルサイズの最適化

デプロイに向けてモデルサイズを削減するには:

  • より小さなモデルを使用: フットプリントを最小にするためにYOLO26n(nano)から開始します。
  • 入力解像度の低減: より小さな画像サイズを使用します(例: imgsz=320またはimgsz=416)。
  • 量子化: 量子化技術を適用します(将来のExecuTorchバージョンでサポート予定)。

推論速度の最適化

推論を高速化するには:

  • XNNPACKバックエンド: デフォルトのXNNPACKバックエンドは、最適化されたCPU推論を提供します。
  • ハードウェアアクセラレーション: プラットフォーム固有のデリゲートを使用します(例: iOSの場合はCoreML)。
  • バッチ処理: 可能な場合は複数の画像をバッチ処理します。

ベンチマーク

UltralyticsチームはYOLO26モデルをベンチマークし、PyTorchとExecuTorchの間で速度と精度を比較しました。

性能
モデル形式ステータスサイズ (MB)metrics/mAP50-95(B)推論時間 (ms/im)
YOLO26nPyTorch5.30.4790314.80
YOLO26nExecuTorch9.40.4800142
YOLO26sPyTorch19.50.5730930.90
YOLO26sExecuTorch36.50.5780376.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ドキュメントをご覧ください。

まとめ

YOLO26モデルをExecuTorch形式にエクスポートすることで、モバイルおよびエッジデバイスでの効率的なデプロイが可能になります。PyTorchネイティブの統合、クロスプラットフォームのサポート、および最適化されたパフォーマンスにより、ExecuTorchはエッジAIアプリケーションにとって優れた選択肢です。

重要なポイント:

  • ExecuTorchは優れたパフォーマンスを備えたPyTorchネイティブのエッジデプロイメントを提供します
  • format='executorch'パラメーターによりエクスポートが簡単
  • XNNPACKバックエンドを介してモバイルCPU用にモデルが最適化される
  • iOS、Android、および組み込みLinuxプラットフォームをサポート
  • Python 3.10+およびFlatBuffersコンパイラが必要

FAQ

YOLO26モデルをExecuTorch形式にエクスポートするにはどうすればよいですか?

PythonまたはCLIを使用してYOLO26モデルをExecuTorchにエクスポートします。

from ultralytics import YOLO

model = YOLO("yolo26n.pt")
model.export(format="executorch")

または

yolo export model=yolo26n.pt format=executorch

ExecuTorchエクスポートのシステム要件は何ですか?

ExecuTorchのエクスポートには以下が必要です:

  • Python 3.10以上
  • executorchパッケージ(pip install executorch経由でインストール)
  • PyTorch(ultralyticsと共に自動的にインストールされます)

注:初回エクスポート時に、ExecuTorchはFlatBuffersコンパイラを含む必要なコンポーネントを自動的にダウンロードしてコンパイルします。

Pythonで直接ExecuTorchモデルを使用して推論を実行できますか?

ExecuTorchモデル(.pteファイル)は、ExecuTorchランタイムを使用してモバイルおよびエッジデバイスにデプロイするために設計されています。これらは、Pythonでの推論のためにYOLO()で直接読み込むことはできません。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を選択してください。

GPUアクセラレーションでExecuTorchモデルを使用できますか?

はい!ExecuTorchは、さまざまなバックエンドを通じてハードウェアアクセラレーションをサポートしています。

  • モバイルGPU: Vulkan、Metal、またはOpenCLデリゲート経由
  • NPU/DSP: プラットフォーム固有のデリゲート経由
  • デフォルト: 最適化されたCPU推論のためのXNNPACK

バックエンド固有のセットアップについては、ExecuTorchドキュメントを参照してください。

コメント