GooglePlayサービスのTensorFlowLite(ベータ版)

TensorFlow Lite は、Google Play サービス API で、現在のバージョンの Play サービスを実行しているすべての Android デバイスでパブリック ベータ版として利用できます。 API を使用すると、TensorFlow Lite ライブラリをアプリに静的にバンドルすることなく、機械学習 (ML) モデルを実行できます。これにより、次のことが可能になります。

  • アプリのサイズを小さくする
  • TensorFlow Lite の最新の安定したバージョンから改善されたパフォーマンスを得る

このページでは、Android アプリで Google Play サービス API の新しい TensorFlow Lite を使用する方法について簡単に説明します。

Google Play サービスの詳細については、 Google Play サービスの Web サイトを参照してください。

アプリに TensorFlow Lite を追加する

Google Play サービス API で TensorFlow Lite を使用するには、アプリ モジュールの依存関係にいくつかの変更を加え、新しい API を初期化し、特定のクラスをインタープリター オブジェクトとして使用します。次の手順では、Google Play サービスで Interpreter API を実装する方法について詳しく説明します。

サンプルアプリ

画像分類アプリで、Google Play サービスの TensorFlow Lite の実装例を確認してテストできます。このサンプルアプリでは、Play サービス内で TensorFlow Lite を使用して画像分類器を実装しています。

インタープリター API で TensorFlow Lite を使用する

Interpreter API を使用して、Google Play サービスで TensorFlow Lite を使用できます。次の手順では、依存関係を追加し、TensorFlow Lite を初期化し、 InterpreterApiインスタンスを作成し、推論を実行する方法を示します。

1. プロジェクトの依存関係を追加する

次の依存関係をアプリ プロジェクト コードに追加して、TensorFlow Lite の Play サービス API にアクセスします。

dependencies {
...
    // Tensorflow Lite dependencies for Google Play services
    implementation 'com.google.android.gms:play-services-tflite-java:16.0.0-beta03'
    // Optional: include Tensorflow Lite Support Library
    implementation 'com.google.android.gms:play-services-tflite-support:16.0.0-beta03'
...
}

2. TensorFlow Lite の初期化を追加

TensorFlow Lite API を使用するに、Google Play サービス API の TensorFlow Lite コンポーネントを初期化します。

コトリン

val initializeTask: Task<Void> by lazy { TfLite.initialize(this) }

ジャワ

Task<Void> initializeTask = TfLite.initialize(context);

3. Interpreter を作成し、ランタイム オプションを設定する

次のコード例に示すように、 InterpreterApi.Options.setRuntime() () を使用してInterpreterApi.create()を呼び出して、Google Play サービス ランタイムを使用するように構成します。

コトリン

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)
  }

ジャワ

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()呼び出しを追加できます。

コトリン

import androidx.lifecycle.lifecycleScope
...
lifecycleScope.launchWhenStarted { // uses coroutine
  initializeTask.await()
}

ジャワ

@BackgroundThread
InterpreterApi initializeInterpreter() {
    Tasks.await(initializeTask);
    return InterpreterApi.create(...);
}

4. 推論を実行する

作成したinterpreterオブジェクトを使用して、 run()メソッドを呼び出して推論を生成します。

コトリン

interpreter.run(inputBuffer, outputBuffer)

ジャワ

interpreter.run(inputBuffer, outputBuffer);

ハードウェアアクセラレーション

TensorFlow Lite を使用すると、グラフィックス プロセッシング ユニット (GPU) などの特殊なハードウェア プロセッサを使用して、モデルのパフォーマンスを高速化できます。デリゲートと呼ばれるハードウェア ドライバーを使用して、これらの特殊なプロセッサを利用できます。 Google Play Services の TensorFlow Lite では、次のハードウェア アクセラレーション デリゲートを使用できます。

  • GPU デリゲート(推奨) - このデリゲートは Google Play サービスを通じて提供され、Task API および Interpreter API の Play サービス バージョンと同様に動的に読み込まれます。

  • NNAPI デリゲート- このデリゲートは、Android 開発プロジェクトに含まれるライブラリの依存関係として利用でき、アプリにバンドルされています。

Google Play サービスの TensorFlow Lite で GPU デリゲートを使用するには:

  1. Play Services からの GPU デリゲートを使用するようにプロジェクトの依存関係を更新します。

    implementation 'com.google.android.gms:play-services-tflite-gpu:16.0.0-beta03'
    
  2. TFlite の初期化で GPU デリゲート オプションを有効にします。

    コトリン

          TfLite.initialize(context,
            TfLiteInitializationOptions.builder()
             .setEnableGpuDelegateSupport(true)
             .build())
        

    ジャワ

          TfLite.initialize(context,
            TfLiteInitializationOptions.builder()
             .setEnableGpuDelegateSupport(true)
             .build());
        
  3. InterpreterApi.Options() addDelegateFactory()を呼び出して、 DelegateFactoryを使用するようにインタープリター オプションで GPU デリゲートを設定します。

    コトリン

          val interpreterOption = InterpreterApi.Options()
           .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
           .addDelegateFactory(GpuDelegateFactory())
        

    ジャワ

          Options interpreterOption = InterpreterApi.Options()
            .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
            .addDelegateFactory(new GpuDelegateFactory());
        

TensorFlow Lite によるハードウェア アクセラレーションの詳細については、 TensorFlow Lite Delegatesページを参照してください。

スタンドアロンの TensorFlow Lite からの移行

アプリをスタンドアロンの TensorFlow Lite から Play サービス API に移行することを計画している場合は、アプリ プロジェクト コードを更新するための次の追加ガイダンスを確認してください。

  1. このページの「制限事項」セクションを確認して、使用事例がサポートされていることを確認してください。
  2. コードを更新する前に、特にバージョン 2.1 より前のバージョンの TensorFlow Lite を使用している場合は、モデルのパフォーマンスと精度のチェックを行い、新しい実装と比較するためのベースラインを用意してください。
  3. TensorFlow Lite の Play サービス API を使用するためにすべてのコードを移行した場合は、既存の TensorFlow Liteランタイム ライブラリの依存関係 ( org.tensorflow: tensorflow-lite :*を含むエントリ) を build.gradle ファイルから削除する必要があります。アプリのサイズを縮小できます。
  4. コード内で発生するnew Interpreterオブジェクトの作成をすべて特定し、InterpreterApi.create() 呼び出しを使用するように変更します。この新しい API は非同期です。つまり、ほとんどの場合、簡単に置き換えることはできず、呼び出しが完了したときのリスナーを登録する必要があります。ステップ 3コードのコード スニペットを参照してください。
  5. import org.tensorflow.lite.InterpreterApi;を追加します。 import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime; org.tensorflow.lite.Interpreterまたはorg.tensorflow.lite.InterpreterApiクラスを使用して任意のソース ファイルに。
  6. 結果として得られるInterpreterApi.create()への呼び出しのいずれかに引数が 1 つしかない場合は、 new InterpreterApi.Options()を引数リストに追加します。
  7. InterpreterApi.create()への呼び出しの最後の引数に.setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)を追加します。
  8. org.tensorflow.lite.Interpreterクラスの他のすべての出現箇所をorg.tensorflow.lite.InterpreterApiに置き換えます。

スタンドアロンの TensorFlow Lite と Play サービス API を並べて使用する場合は、TensorFlow Lite 2.9 (またはそれ以降) を使用する必要があります。 TensorFlow Lite 2.8 以前のバージョンは、Play サービス API バージョンと互換性がありません。

テスト

TensorFlow Lite を Google Play サービスに実装したら、必ずアプリケーションをテストし、アプリの機械学習モデル機能を実行してください。解決できないエラーや問題が発生した場合は、以下のサポートとフィードバックのセクションに記載されているチャネルを使用して報告してください。

LoadingException: 受け入れ可能なモジュールがありません

ベータ版のローンチ期間中に開発環境でアプリをテストしているときに、アプリが TensorFlow Lite クラス ( TfLite.intialize(context) ) を初期化しようとすると、例外が発生する場合があります。

com.google.android.gms.dynamite.DynamiteModule$LoadingException:
  No acceptable module com.google.android.gms.tflite_dynamite found.
  Local version is 0 and remote version is 0.

このエラーは、Google Play サービス API の TensorFlow Lite がテスト デバイスでまだ利用できないことを意味します。デバイスでのテストに使用しているユーザー アカウントでこの Google グループtflite-play-services-beta-accessに参加することで、この例外を解決できます。ベータ アクセス グループに追加されたら、この例外を解決する必要があります。

このグループに参加してから、アクセス権が付与され、エラーが解消されるまで、少なくとも 1 営業日かかります。このエラーが引き続き発生する場合は、以下の「サポートとフィードバック」セクションに概説されているチャネルを使用して報告してください。

制限事項

Google Play サービスの TensorFlow Lite には次の制限があります。

  • ハードウェア アクセラレーション デリゲートのサポートは、「ハードウェア アクセラレーション」セクションにリストされているデリゲートに限定されます。その他のアクセラレーション デリゲートはサポートされていません。
  • ネイティブ APIを介した TensorFlow Lite へのアクセスはサポートされていません。 TensorFlow Lite Java API のみが Google Play サービスから利用できます。
  • カスタム op を含む実験的または非推奨の TensorFlow Lite API はサポートされていません。

サポートとフィードバック

TensorFlow Issue Tracker を通じてフィードバックを提供し、サポートを受けることができます。 Google Play サービスの TensorFlow Lite の問題テンプレートを使用して、問題とサポート リクエストを報告してください。

利用規約とプライバシー ポリシー

Google Play サービスでの TensorFlow Lite の使用には、 Google API サービス利用規約が適用されます。 Google Play サービスの TensorFlow Lite はベータ版であるため、その機能と関連する API は予告なしに変更される可能性があることに注意してください。

Google Play サービス API で TensorFlow Lite を使用する場合、画像、動画、テキストなどの入力データの処理は完全にデバイス上で行われ、Google Play サービスの TensorFlow Lite はそのデータを Google サーバーに送信しません。その結果、当社の API を使用して、デバイスから出てはならないデータを処理できます。

Google Play サービス API の TensorFlow Lite は、バグ修正、更新されたモデル、ハードウェア アクセラレータの互換性情報などを受け取るために、時々 Google サーバーに接続する場合があります。 Google Play サービス API の TensorFlow Lite は、アプリ内の API のパフォーマンスと使用率に関する指標も Google に送信します。 Google はこの指標データを使用して、パフォーマンスの測定、デバッグ、API の維持と改善、誤用や乱用の検出を行います。詳細については、プライバシー ポリシーをご覧ください。

デベロッパーは、適用法で義務付けられている Google Play サービス メトリック データでの Google による TensorFlow Lite の処理について、アプリのユーザーに通知する責任があります。

当社が収集するデータには以下が含まれます。

  • デバイス情報 (メーカー、モデル、OS バージョン、ビルドなど) と利用可能な ML ハードウェア アクセラレータ (GPU および DSP)。診断と使用状況の分析に使用されます。
  • 診断と使用状況の分析に使用されるデバイス識別子。
  • アプリ情報 (パッケージ名、アプリ バージョン)。診断と使用状況の分析に使用されます。
  • API 構成 (どのデリゲートが使用されているかなど)。診断と使用状況の分析に使用されます。
  • イベントの種類 (インタープリターの作成、推論など)。診断と使用状況の分析に使用されます。
  • エラーコード。診断に使用されます。
  • パフォーマンス指標。診断に使用されます。

次のステップ

TensorFlow Lite を使用してモバイル アプリケーションに機械学習を実装する方法の詳細については、 TensorFlow Lite デベロッパー ガイドを参照してください。 TensorFlow Hubで、画像分類、オブジェクト検出、およびその他のアプリケーション用の追加の TensorFlow Lite モデルを見つけることができます。