Google Play 開発者サービスの LiteRT には、Java API を使用してアクセスすることもできます。 ネイティブ API の追加が可能です特に、Google Play の LiteRT LiteRT Interpreter インタープリタ API。
インタープリタ API の使用
TensorFlow ランタイムで提供される LiteRT Interpreter API は、ML モデルを構築して実行するための汎用インターフェースを提供します。こちらの TensorFlow を使用して Interpreter API で推論を実行する手順は次のとおりです。 Google Play 開発者サービス ランタイムの Lite 版。
1. プロジェクトの依存関係を追加する
Play にアクセスするには、アプリ プロジェクトのコードに次の依存関係を追加します。 Services API for LiteRT:
dependencies {
...
// LiteRT dependencies for Google Play services
implementation 'com.google.android.gms:play-services-tflite-java:16.0.1'
// Optional: include LiteRT Support Library
implementation 'com.google.android.gms:play-services-tflite-support:16.0.1'
...
}
2. LiteRT の初期化を追加する
Google Play 開発者サービス API の LiteRT コンポーネントを初期化する 前に次の作業を行っておく必要があります。
Kotlin
val initializeTask: Task<Void> by lazy { TfLite.initialize(this) }
Java
Task<Void> initializeTask = TfLite.initialize(context);
3. インタープリタを作成してランタイム オプションを設定する
InterpreterApi.create()
を使用してインタープリタを作成し、以下を使用するように構成します。
Google Play 開発者サービスのランタイム(InterpreterApi.Options.setRuntime()
を呼び出して、
これを次のサンプルコードに示します。
Kotlin
import org.tensorflow.lite.InterpreterApi import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime ... private lateinit var interpreter: InterpreterApi ... initializeTask.addOnSuccessListener { val interpreterOption = InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) interpreter = InterpreterApi.create( modelBuffer, interpreterOption )} .addOnFailureListener { e -> Log.e("Interpreter", "Cannot initialize interpreter", e) }
Java
import org.tensorflow.lite.InterpreterApi import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime ... private InterpreterApi interpreter; ... initializeTask.addOnSuccessListener(a -> { interpreter = InterpreterApi.create(modelBuffer, new InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)); }) .addOnFailureListener(e -> { Log.e("Interpreter", String.format("Cannot initialize interpreter: %s", e.getMessage())); });
Android のブロックを回避できるため、上記の実装を使用する必要があります。
ユーザー インターフェース スレッドです。スレッドの実行をより厳密に管理する必要がある場合は、
次のようにして、インタープリタを作成するための Tasks.await()
呼び出しを追加できます。
Kotlin
import androidx.lifecycle.lifecycleScope ... lifecycleScope.launchWhenStarted { // uses coroutine initializeTask.await() }
Java
@BackgroundThread InterpreterApi initializeInterpreter() { Tasks.await(initializeTask); return InterpreterApi.create(...); }
4. 推論を実行する
作成した interpreter
オブジェクトを使用して、run()
メソッドを呼び出して生成します。
行います。
Kotlin
interpreter.run(inputBuffer, outputBuffer)
Java
interpreter.run(inputBuffer, outputBuffer);
ハードウェア アクセラレーション
LiteRT では、次を使用してモデルのパフォーマンスを高速化できます。 画像処理装置(GPU)などの専用ハードウェア プロセッサマイページ というハードウェア ドライバを使用して、これらの専用プロセッサを活用できます。 代理人。
GPU デリゲートは Google Play 開発者サービスを介して提供される Play 開発者サービスのバージョンと同様に、動的に Interpreter API。
デバイスの互換性を確認しています
すべてのデバイスが TFLite による GPU ハードウェア アクセラレーションをサポートしているわけではありません。目的
エラーと潜在的なクラッシュを軽減するには、
デバイスが動作しているかどうかを確認する TfLiteGpu.isGpuDelegateAvailable
メソッド
GPU デリゲートと互換性がありません。
この方法を使用して、デバイスが GPU に対応しているかどうかを確認し、CPU を使用します。 GPU がサポートされていない場合の フォールバックとして使用します
useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context)
useGpuTask
のような変数を取得したら、それを使用して
デバイスは GPU デリゲートを使用します。
Kotlin
val interpreterTask = useGpuTask.continueWith { task -> val interpreterOptions = InterpreterApi.Options() .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) if (task.result) { interpreterOptions.addDelegateFactory(GpuDelegateFactory()) } InterpreterApi.create(FileUtil.loadMappedFile(context, MODEL_PATH), interpreterOptions) }
Java
Task<InterpreterApi.Options> interpreterOptionsTask = useGpuTask.continueWith({ task -> InterpreterApi.Options options = new InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY); if (task.getResult()) { options.addDelegateFactory(new GpuDelegateFactory()); } return options; });
GPU とインタープリタ API
Interpreter API で GPU デリゲートを使用するには:
Play 開発者サービスの GPU デリゲートを使用するように、プロジェクトの依存関係を更新します。
implementation 'com.google.android.gms:play-services-tflite-gpu:16.1.0'
TFlite の初期化で GPU デリゲート オプションを有効にします。
Kotlin
TfLite.initialize(context, TfLiteInitializationOptions.builder() .setEnableGpuDelegateSupport(true) .build())
Java
TfLite.initialize(context, TfLiteInitializationOptions.builder() .setEnableGpuDelegateSupport(true) .build());
インタープリタ オプションで GPU デリゲートを有効にする: デリゲート ファクトリを GpuDelegateFactory には、
addDelegateFactory() within
InterpreterApi.Options()` を呼び出します。Kotlin
val interpreterOption = InterpreterApi.Options() .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) .addDelegateFactory(GpuDelegateFactory())
Java
Options interpreterOption = InterpreterApi.Options() .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) .addDelegateFactory(new GpuDelegateFactory());
スタンドアロン LiteRT からの移行
スタンドアロンの LiteRT から Play 開発者サービスの API 呼び出しについては、 アプリ プロジェクト コード:
- このページの制限事項セクションに目を通し、 サポートします。
- コードを更新する前に、コードのパフォーマンスと精度のチェックを 特に、以前のバージョンの LiteRT を使用している場合に バージョン 2.1 よりバージョン 2.1 よりも優先されるため、 説明します。
- すべてのコードを移行し、Google Play 開発者サービスの API を
LiteRT を使用するには、既存の LiteRT ランタイムを削除する必要があります。
ライブラリ依存関係(
org.tensorflow:tensorflow-lite:*
など)を build.gradle から アプリのサイズを小さくすることができます。 - コード内で発生した
new Interpreter
オブジェクトをすべて特定します。 InterpreterApi.create() 呼び出しを使用するように各要素を変更します。「 新しい TfLite.Initialize は非同期です。つまり、ほとんどの場合、 ドロップイン置換: 呼び出しの応答時にリスナーを登録し、 表示されます。ステップ 3 のコードにあるコード スニペットをご覧ください。 import org.tensorflow.lite.InterpreterApi;
とimport org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime;
を任意のソースに追加 使用する場合は、org.tensorflow.lite.Interpreter
またはorg.tensorflow.lite.InterpreterApi
クラス。- 結果として得られる
InterpreterApi.create()
の呼び出しに、 単一の引数の場合は、引数リストにnew InterpreterApi.Options()
を追加します。 - 最後の引数に
.setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
を追加します。InterpreterApi.create()
の呼び出し。 org.tensorflow.lite.Interpreter
クラスの他の箇所をすべて置き換えるorg.tensorflow.lite.InterpreterApi
に置き換えます。
スタンドアロンの LiteRT と Play 開発者サービス API を使用する場合 LiteRT 2.9 以降を使用する必要があります。LiteRT 2.8 以前のバージョンは、Play 開発者サービス API バージョンと互換性がありません。