YOLOモデルをLiteRTにエクスポートしてエッジやWebにデプロイ#
LiteRT(軽量ランタイムの略)は、Googleが提供する高性能なオンデバイスAIランタイムです。これはTensorFlow Lite(TFLite)の次世代版であり、新しい名称です。また、同じ.tfliteモデル形式を使用します。LiteRTを使えば、エクスポートした1つのUltralytics YOLOモデルを、モバイル、組み込み、エッジ、ブラウザーにデプロイできます。従来は別々に対応していたtfliteとtfjsのエクスポート形式を、1つの形式に統合します。
視聴: Ultralytics YOLO26をGoogle LiteRTにエクスポートする方法 | AndroidとiOSでビジョンAIをデプロイ | モバイルAI 📱🚀
LiteRTのエクスポート形式は、物体検出、セグメンテーション、姿勢推定、分類などのタスクに合わせてモデルを最適化し、幅広いデバイスで高速かつオフラインで実行できるようにします。
公式のUltralytics YOLO Flutterプラグインは、LiteRTの.tfliteエクスポートをそのままAndroidで実行できます。リアルタイムのカメラ推論、単一画像の予測、GPUアクセラレーション、Depthを含むYOLO26の7つすべてのタスクに対応したモデルの自動ダウンロードが可能です。AppleデバイスではCoreMLエクスポートを、Qualcomm Snapdragon NPUではQualcomm QNN統合をご利用ください。
分類モデルはimgsz=224でエクスポートします。detect、segment、semantic、depth、pose、OBBモデルは imgsz=640でエクスポートします。この224/640規格は、公式LiteRT、CoreML、QNNのモバイルアセットで共通です。
公式のUltralytics YOLO NPMパッケージは、LiteRT.jsを介してLiteRTの.tfliteエクスポートをブラウザーで直接実行します。サーバーもPythonも必要ありません。リアルタイムのWebカメラ推論、単一画像の予測、WebGPUアクセラレーション(CPU/WASMへの自動フォールバック)に対応し、YOLO26の6つのタスク(detect、segment、semantic、classify、pose、OBB)を実行できます。WebGPUでは、ONNX Runtime Webより約~2倍高速になることがよくあります。
npm i @ultralytics/yolo @litertjs/coreLiteRTにエクスポートする理由#
LiteRTは、オンデバイス推論、つまりエッジコンピューティング向けに設計されたオープンソースのフレームワークです。開発者はこのフレームワークを使って、トレーニング済みモデルをモバイル、組み込み、IoTデバイスや従来型のコンピューターで実行できます。また、LiteRT.jsを使えば、WebブラウザーやNode.jsでも直接実行できます。
1つのモデル形式で、あらゆるターゲットに対応します。
- モバイルと組み込み: Android、iOS、組み込みLinux、マイクロコントローラー(MCU)に対応します。
- エッジアクセラレータ: Coral Edge TPUと互換性があり、さらなる高速化が可能です。
- ブラウザーとNode.js: LiteRT.jsは、同じ
.tfliteモデルをWeb上で実行し、WebGPU/WASMアクセラレーションに対応します。これにより、別途TensorFlow.jsにエクスポートする必要がなくなります。
LiteRTモデルの主な機能#
- オンデバイス最適化: データをローカルで処理してレイテンシを低減し、個人データを送信しないことでプライバシーを強化し、モデルサイズを最小限に抑えてストレージを節約します。
- 複数プラットフォームのサポート: Android、iOS、組み込みLinux、マイクロコントローラー、最新のWebブラウザーで動作します。
- ハードウェアアクセラレーション: CPUではXNNPACKを活用し、OpenCL、Metal、WebGPUを介してGPUアクセラレーションを利用します。GPUデリゲートは、さらなる高速化のためデフォルトでFP16を実行します。
- 量子化: FP32、静的INT8(
quantize=8、int8ウェイト + int8アクティベーション)、静的INT16アクティベーション(quantize="w8a16"、精度向上のためint8ウェイト + int16アクティベーション)、動的INT8(quantize="w8a32"、int8ウェイト + FP32アクティベーション、キャリブレーションデータ不要)をサポートし、精度の低下を最小限に抑えながら、モデルを圧縮して推論を高速化します。 - 多様な言語のサポート: Java/Kotlin、Swift、Objective-C、C++、Python、JavaScriptに対応しています。
実測パフォーマンス#
ハードウェア: 12 GBのLPDDR5XメモリとAndroid 16 / API 36を搭載したXiaomi 17。3 nmのSnapdragon 8 Elite Gen 5(SM8850)は、8コアのQualcomm Oryon CPU(最大4.6 GHzのPrimeコア2基と最大3.62 GHzのPerformanceコア6基)、Adreno GPU、Hexagon NPUを搭載しています。
| モデル | タスク | サイズ (ピクセル) | CPU w8a32 LiteRT (ms) | GPU w8a32 LiteRT (ms) |
|---|---|---|---|---|
| YOLO26n | Detect | 640 | 52.2 1.8 / 48.1 / 2.4 | 15.8 2.3 / 8.9 / 4.6 |
| YOLO26n-seg | Segment | 640 | 73.4 1.8 / 65.6 / 6.0 | 33.2 1.8 / 23.8 / 7.6 |
| YOLO26n-sem | セマンティック | 640 | 61.2 1.8 / 51.1 / 8.3 | 34.2 1.8 / 24.0 / 8.3 |
| YOLO26n-depth | 深度 | 640 | 124.4 1.9 / 115.1 / 7.4 | 23.0 1.8 / 13.5 / 7.7 |
| YOLO26n-cls | 分類 | 224 | 4.4 0.4 / 4.0 / 0.0 | 3.1 0.8 / 2.1 / 0.2 |
| YOLO26n-pose | 姿勢推定 | 640 | 57.4 1.8 / 53.8 / 1.8 | 16.6 2.7 / 10.1 / 3.9 |
| YOLO26n-obb | OBB | 640 | 50.3 1.8 / 47.2 / 1.4 | 11.7 1.8 / 7.8 / 2.0 |
- 速度の値は単一画像のバーストレイテンシです。
bus.jpg上で3回のウォームアップ後に15回実行した平均値を、Ultralytics Flutterプラグイン0.6.10と標準化されたv0.6.6アセットを使用して測定しました。1回の連続実行では、タスク間でCPU/GPUの順序を交互にしました。ネイティブログにより、すべてのCPU行でLiteRT CPU/XNNPACKが使用され、すべてのGPU行でグラフ全体がLiteRT OpenCL(LITERT_CL)に委譲されたことを確認しました。 - LiteRTエクスポートではPyTorchモデルを直接トレースし、浮動小数点入力のNCHW
.tfliteを生成します。GPUデリゲートはグラフ全体をコンパイルし(ここでは7つすべてのタスクがAdreno GPU上で実行されます)、w8a32ではキャリブレーションデータは不要です。従来のonnx2tf NHWCレイアウトやIdentityの出力名を前提とせず、テンソル形状とシグネチャ名を確認してください。RGBデータは平面CHW形式で直接パックするか、推論前に転置してください。セマンティックエクスポートはNCHWロジットを返すため、ホスト側でクラスのargmax処理が必要です。公式Androidアセットはyolo-flutter-appv0.6.6リリースで提供されており、詳細なベンチマーク記録はFlutterパフォーマンスドキュメントにあります。 - 対応するSnapdragon Hexagon NPUとLiteRT CPU/GPUの数値は、Qualcomm QNN統合をご覧ください。
- Apple CPU/アクセラレーターの結果は、CoreML統合で比較できます。
以下のデバイス別測定では、同じ標準化されたv0.6.6アセットを使用しています。
Google Pixel 10#
ハードウェア: 12 GBメモリとAndroid 16 / API 36を搭載したGoogle Pixel 10。3 nmのGoogle Tensor G5は、8コアCPU(最大3.78 GHzのPrimeコア1基、最大3.05 GHzのPerformanceコア5基、最大2.25 GHzのEfficiencyコア2基)、PowerVR D-Series GPU、Google TPUを搭載しています。Googleはリンク先の仕様でコアクロックとGPUドライバー名を公開していないため、ベンチマーク対象デバイスから読み取りました。
| モデル | タスク | サイズ (ピクセル) | CPU w8a32 LiteRT (ms) | GPU w8a32 LiteRT (ms) |
|---|---|---|---|---|
| YOLO26n | Detect | 640 | 53.3 1.5 / 50.2 / 1.6 | 45.5 3.8 / 37.7 / 4.0 |
| YOLO26n-seg | Segment | 640 | 87.7 1.8 / 78.5 / 7.5 | 50.9 3.0 / 36.9 / 10.9 |
| YOLO26n-sem | セマンティック | 640 | 68.6 1.5 / 59.0 / 8.0 | 71.6 1.5 / 59.5 / 10.6 |
| YOLO26n-depth | 深度 | 640 | 120.3 1.5 / 112.5 / 6.3 | 52.5 2.0 / 37.5 / 13.0 |
| YOLO26n-cls | 分類 | 224 | 4.0 0.3 / 3.4 / 0.2 | 17.6 0.9 / 16.7 / 0.1 |
| YOLO26n-pose | 姿勢推定 | 640 | 59.7 1.5 / 57.0 / 1.2 | 46.6 3.8 / 39.2 / 3.5 |
| YOLO26n-obb | OBB | 640 | 52.0 1.5 / 48.9 / 1.7 | 45.5 4.0 / 38.5 / 2.9 |
ベンチマーク: bus.jpg上でpredict()を3回ウォームアップした後、15回呼び出した平均値です。ultralytics_yolo 0.6.10と公式のv0.6.6アセットを使用しています。1回の連続実行では、タスク間でCPU/GPUの順序を交互にしています。ネイティブログにより、すべてのCPU行でLiteRT CPU/XNNPACKが使用され、すべてのGPU行でグラフ全体がLiteRT OpenCL(LITERT_CL)に委譲されたことを確認しました。
Samsung Galaxy S26#
ハードウェア: 12 GBメモリとAndroid 16 / API 36を搭載したSamsung Galaxy S26(SM-S942B)。2 nmのExynos 2600は、10コアのArmv9.3 CPU(最大3.8 GHzのC1-Ultraコア1基、最大3.26 GHzのC1-Proパフォーマンスコア3基、最大2.76 GHzのC1-Pro効率コア6基)、Xclipse 960 GPU、Samsung NPUを搭載しています。
| モデル | タスク | サイズ (ピクセル) | CPU w8a32 LiteRT (ms) | GPU w8a32 LiteRT (ms) |
|---|---|---|---|---|
| YOLO26n | Detect | 640 | 36.7 1.3 / 33.8 / 1.7 | 16.4 1.4 / 12.3 / 2.6 |
| YOLO26n-seg | Segment | 640 | 54.6 1.2 / 48.0 / 5.3 | 32.8 1.3 / 24.5 / 7.0 |
| YOLO26n-sem | セマンティック | 640 | 47.8 1.2 / 38.4 / 8.1 | 34.2 1.3 / 24.9 / 8.0 |
| YOLO26n-depth | 深度 | 640 | 92.9 1.2 / 84.8 / 6.9 | 33.5 1.3 / 22.4 / 9.8 |
| YOLO26n-cls | 分類 | 224 | 2.7 0.2 / 2.3 / 0.2 | 2.6 0.2 / 2.4 / 0.0 |
| YOLO26n-pose | 姿勢推定 | 640 | 42.8 1.3 / 40.5 / 1.0 | 18.4 1.4 / 14.1 / 2.9 |
| YOLO26n-obb | OBB | 640 | 37.5 1.3 / 35.1 / 1.2 | 18.8 2.5 / 14.6 / 1.8 |
ベンチマーク: bus.jpg上でpredict()を3回ウォームアップした後、15回呼び出した平均値です。ultralytics_yolo 0.6.10と公式のv0.6.6アセットを使用しています。1回の連続実行では、タスク間でCPU/GPUの順序を交互にしています。ネイティブログにより、すべてのCPU行でLiteRT CPU/XNNPACKが使用され、すべてのGPU行でグラフ全体がLiteRT OpenCL(LITERT_CL)に委譲されたことを確認しました。
Xiaomi 17T Pro#
ハードウェア: 12 GBのLPDDR5XメモリとAndroid 16 / API 36を搭載したXiaomi 17T Pro(2602EPTC0G)。3 nmのMediaTek Dimensity 9500(MT6993)は、8コアのArmv9.3 CPU(最大4.21 GHzのC1-Ultraコア1基、最大3.5 GHzのC1-Premiumコア3基、最大2.7 GHzのC1-Proコア4基)、Mali-G1 Ultra MC12 GPU、MediaTek NPU 990を搭載しています。
| モデル | タスク | サイズ (ピクセル) | CPU w8a32 LiteRT (ms) | GPU w8a32 LiteRT (ms) |
|---|---|---|---|---|
| YOLO26n | Detect | 640 | 45.4 1.3 / 42.1 / 2.0 | 26.6 1.9 / 22.0 / 2.7 |
| YOLO26n-seg | Segment | 640 | 126.2 2.6 / 113.9 / 9.7 | 46.7 2.6 / 33.3 / 10.8 |
| YOLO26n-sem | セマンティック | 640 | 117.9 2.6 / 98.8 / 16.5 | 74.3 2.6 / 54.7 / 17.0 |
| YOLO26n-depth | 深度 | 640 | 182.4 2.5 / 167.6 / 12.3 | 47.8 2.5 / 32.3 / 12.9 |
| YOLO26n-cls | 分類 | 224 | 6.2 0.4 / 5.3 / 0.4 | 7.4 0.4 / 6.9 / 0.1 |
| YOLO26n-pose | 姿勢推定 | 640 | 97.6 2.5 / 93.3 / 1.8 | 28.6 2.5 / 23.3 / 2.8 |
| YOLO26n-obb | OBB | 640 | 91.5 2.6 / 85.8 / 3.2 | 27.5 2.7 / 21.8 / 2.9 |
ベンチマーク: bus.jpg上でpredict()を3回ウォームアップした後、15回呼び出した平均値です。ultralytics_yolo 0.6.10と公式のv0.6.6アセットを使用しています。1回の連続実行では、タスク間でCPU/GPUの順序を交互にしています。ネイティブログにより、すべてのCPU行でLiteRT CPU/XNNPACKが使用され、すべてのGPU行でグラフ全体がLiteRT OpenCL(LITERT_CL)に委譲されたことを確認しました。
対応タスク#
LiteRTエクスポートはUltralyticsの7つすべてのタスクをサポートします。セマンティックセグメンテーションと深度推定はYOLO26でのみ利用できます。これらのヘッドを提供するファミリーはYOLO26だけです。
LiteRTへのエクスポート: YOLOモデルの変換#
モデルをLiteRT形式に変換することで、オンデバイス実行の効率を向上させ、デプロイの選択肢を広げることができます。
インストール#
必要なパッケージをインストールするには、次を実行します。
# Install the required package for YOLO
pip install ultralytics詳しい手順とベストプラクティスについては、Ultralyticsインストールガイドをご覧ください。問題が発生した場合は、よくある問題のガイドを参照してください。
LiteRTのエクスポートは現在、Linux x86_64とmacOSでサポートされています。エクスポートされた.tfliteモデル自体は、LiteRTがサポートするすべてのプラットフォーム(モバイル、組み込み、エッジ、ブラウザー)で動作します。
使用方法#
すべてのUltralytics YOLOモデルは、そのままエクスポートをサポートしています。LiteRT形式はエクスポート、予測、検証モードをサポートしているため、モデルをエクスポートした後に読み込んで、推論を実行したり、ローカルで精度を検証したりできます。
from ultralytics import YOLO
# YOLO26モデルを読み込みます
model = YOLO("yolo26n.pt")
# モデルをLiteRT形式にエクスポートします
model.export(format="litert", imgsz=640) # 'yolo26n.tflite'を生成します。分類ではimgsz=224を使用しますfrom ultralytics import YOLO
model = YOLO("yolo26n.pt")
# 動的INT8: int8ウェイト、FP32アクティベーション — キャリブレーションデータ不要
model.export(format="litert", quantize="w8a32", imgsz=640) # 'yolo26n_w8a32.tflite'を生成します
# 静的INT8: int8ウェイト + int8アクティベーション — キャリブレーションデータが必要です
model.export(format="litert", quantize=8, data="coco8.yaml", imgsz=640) # 'yolo26n_int8.tflite'を生成します
# 静的w8a16: int8ウェイト + int16アクティベーション(精度向上)— キャリブレーションデータが必要です
model.export(format="litert", quantize="w8a16", data="coco8.yaml", imgsz=640) # 'yolo26n_w8a16.tflite'を生成しますfrom ultralytics import YOLO
# エクスポートしたLiteRTモデルを読み込みます
model = YOLO("yolo26n.tflite")
# 推論を実行
results = model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# エクスポートしたLiteRTモデルを読み込みます
model = YOLO("yolo26n.tflite")
# COCO8データセットで精度を検証します
metrics = model.val(data="coco8.yaml")エクスポート引数#
| 引数 | 種類 | デフォルト | 説明 |
|---|---|---|---|
format | str | 'litert' | エクスポートしたモデルのターゲットフォーマットです。さまざまなデプロイ環境との互換性を定義します。 |
imgsz | intまたはtuple | 640 | モデル入力の画像サイズです。正方形画像の場合は整数、特定のサイズの場合はタプル(height, width)を指定できます。 |
quantize | intまたはstr | None | 量子化の精度: 8(静的INT8、int8ウェイト + int8アクティベーション。キャリブレーションdata/fractionが必要)、'w8a16'(静的、int8ウェイト + int16アクティベーション。キャリブレーションdata/fractionが必要)、'w8a32'(動的INT8、int8ウェイト + FP32アクティベーション。キャリブレーション不要)、または32/未設定(FP32)。FP16は個別にはエクスポートされません(下記の注記を参照)。非推奨のhalf/int8フラグに代わるものです。 |
batch | int | 1 | エクスポートモデルのバッチ推論サイズ、またはpredictモードでエクスポートモデルが同時に処理する画像の最大数を指定します。 |
data | str | None | INT8キャリブレーションに使用するデータセットYAMLです。分類の場合は、代わりにデータセットディレクトリまたは組み込みデータセット名を指定します。quantize=8または'w8a16'を指定して省略した場合、Ultralyticsはモデルのタスクに応じたデフォルトのキャリブレーションデータセットを選択します。 |
fraction | float、int、またはlist | 1.0 | キャリブレーション用サブセットを、比率、画像数、または[train, val, test]の比率/件数として指定します。2項目のリストではtestがすべて含まれ、0では除外されます。 |
device | str | None | エクスポートに使用するデバイスを指定します。LiteRTエクスポートはCPU(device=cpu)で実行されます。 |
従来のtfliteエクスポートとは異なり、LiteRTではFP16の個別エクスポートは不要です。GPUデリゲート(WebGPU、OpenCL、Metal)を使用すると、FP32の.tfliteモデルは実行時に半精度で動作します。これがFP16推論に対する公式のLiteRTアプローチです。
エクスポートプロセスの詳細については、Ultralyticsのエクスポートに関するドキュメントページをご覧ください。
エクスポートしたYOLO LiteRTモデルのデプロイ#
Ultralytics YOLOモデルをLiteRTにエクスポートした後は、さまざまなプラットフォームにデプロイできます。ローカルで最も手早く動作を確認するには、上記のYOLO("yolo26n.tflite")メソッドを使用します。他の環境へのデプロイについては、以下のリソースをご覧ください。
モバイルおよび組み込み#
- Android: LiteRTをAndroidアプリケーションに統合するためのクイックスタートガイドです。
- iOS: LiteRTモデルをiOSアプリケーションに統合してデプロイするためのガイドです。
- 組み込みLinuxおよびRaspberry Pi: シングルボードコンピューターでLiteRTモデルを実行します。Coral Edge TPUを使用して高速化することもできます。
- マイクロコントローラー: 数キロバイトのメモリしかないMCUにデプロイできます。コアランタイムはArm Cortex-M3で約16 KBに収まります。
ブラウザーおよびNode.js(LiteRT.js)#
- LiteRT.jsの概要: 同じ
.tfliteモデルを、WebGPU/WASMアクセラレーションを使用してブラウザーで直接実行できます。サーバー側の計算が不要になり、データをユーザーのデバイス内に保持できます。 - エンドツーエンドの例: モバイル、エッジ、ウェブでLiteRTを実装するための実用的な例とチュートリアルです。
概要#
このガイドでは、Ultralytics YOLOモデルをLiteRT形式にエクスポートする方法を説明しました。モバイル/エッジ(旧TFLite)とブラウザー(旧TF.js)のデプロイを単一の.tfliteモデルに統合することで、LiteRTを使えばYOLOモデルを高速化、小型化でき、ほぼすべてのオンデバイス環境に移植できます。
詳細については、LiteRT公式ドキュメントをご覧ください。
また、ほかのUltralytics YOLO統合に関心がある場合は、役立つリソースを多数掲載した統合ガイドページをご覧ください。
よくある質問#
Ultralyticsライブラリを使用して、YOLOモデルをLiteRT(
.tflite)にエクスポートします。まず、パッケージをインストールします。pip install ultralytics次に、モデルをエクスポートします。
from ultralytics import YOLO # YOLO26モデルを読み込みます model = YOLO("yolo26n.pt") # モデルをLiteRT形式にエクスポートします model.export(format="litert", imgsz=640) # 分類ではimgsz=224を使用しますCLIを使用する場合:
yolo export model=yolo26n.pt format=litert imgsz=640 # use imgsz=224 for classification詳細については、Ultralyticsエクスポートガイドをご覧ください。
LiteRTはTensorFlow Liteの新しい名称です。モデル形式は同じ
.tfliteで、ランタイムの系譜も同じであり、Googleによるブランド変更です。Ultralyticsでは、以前は別々の2つの形式が必要だった次の両方の用途を、単一のlitertエクスポート形式で扱えるようになりました。- 従来の
tflite形式 → モバイル、組み込み、エッジへのデプロイ。 - 従来の
tfjs形式 → ブラウザーおよびNode.jsへのデプロイ。現在は、同じ.tfliteファイルを実行するLiteRT.jsで処理されます。
既存の
.tfliteファイルがある場合は、そのファイルをYOLO("model.tflite")で直接読み込むと、LiteRTバックエンドを通じて実行できます。- 従来の
はい。モデルをLiteRT形式にエクスポートし、Raspberry Piで実行すると推論速度を向上できます。さらに最適化するには、Coral Edge TPUの利用をご検討ください。詳しい手順については、Raspberry Piデプロイガイドをご覧ください。
はい。LiteRT.jsを使用すると、エクスポート済みの同じ
.tfliteモデルを、WebGPU/WASMアクセラレーションを利用してウェブブラウザーまたはNode.jsアプリケーションで直接実行できます。これにより、従来のTensorFlow.jsワークフローが置き換えられます。ブラウザー向けに別途エクスポートする必要はなく、LiteRT.jsランタイムでLiteRTモデルをデプロイするだけです。はい、ランタイムで対応しています。FP32 LiteRTモデルをGPUデリゲート(WebGPU、OpenCL、またはMetal)で実行すると、自動的にFP16で実行されます。これが公式のLiteRT方式です。そのため、専用のFP16エクスポートは必要ありません。さらに圧縮するには、
quantize=8を使ってINT8量子化を行ってください。YOLOモデルをLiteRTにエクスポートする際にエラーが発生した場合、一般的な解決策は次のとおりです。
- プラットフォームを確認する: LiteRTエクスポートはLinux x86_64およびmacOSでサポートされています。環境が条件に合っていることを確認してください。
- パッケージの互換性を確認する: 互換性のあるバージョンのUltralyticsを使用していることを確認してください。インストールガイドをご覧ください。
- 量子化の問題: INT8量子化を使用する場合は、
dataパラメーターでデータセットのパスが正しく指定されていることを確認してください。
その他のトラブルシューティングのヒントについては、一般的な問題のガイドをご覧ください。