Path: blob/master/site/ja/lite/inference_with_metadata/codegen.md
38397 views
メタデータを使用してモデルインターフェイスを生成する
TensorFlow Lite メタデータを使用すると、開発者はラッパーコードを生成して、Android での統合を有効にできます。一般的に最も使いやすいのは、Android Studio ML モデルバインディングのグラフィカルインターフェイスです。さらにカスタマイズが必要な場合、またはコマンドラインツールを使用している場合は、TensorFlow Lite Codegen も利用できます。
Android Studio ML モデルバインディングを使用する {:#mlbinding}
メタデータで拡張された TensorFlow Lite モデルの場合、開発者は Android Studio ML モデルバインディングを使用して、プロジェクトの設定を自動的に構成し、モデルメタデータに基づいてラッパークラスを生成できます。ラッパーコードを使用すると、ByteBufferと直接対話する必要がなくなり、開発者はBitmapやRectなどの型付きオブジェクトを使用して TensorFlow Lite モデルと対話できます。
注意: Android Studio 4.1 以上が必要です。
TensorFlow Lite モデルを Android Studio にインポートする
TF Lite モデルを使用するモジュールを右クリックするか、
Fileをクリックして、New>Other>TensorFlow Lite Modelに移動します。
TFLite ファイルの場所を選択します。ユーザーに代わってツールが、ML Model バインディングとのモジュールの依存関係と Android モジュールの
build.gradleファイルに自動的に挿入されたすべての依存関係を構成します。オプション: GPU アクセラレーションを使用する場合は、TensorFlow GPU をインポートするための 2 番目のチェックをオンにしてください。
Finishをクリックします。インポートが正常に完了すると、次の画面が表示されます。モデルを使用し始めるには、Kotlin または Java を選択し、
Sample Codeセクションにあるコードをコピーして貼り付けます。Android Studio のmlディレクトリにある TFLite モデルをダブルクリックすると、この画面に戻ることができます。
モデル推論の加速
ML Model Binding を利用すると、開発者はデリゲートや様々なスレッドを使用してコードを高速化できます。
注意: TensorFlow Lite インタープリタは、実行時と同じスレッドで作成する必要があります。そうでないと、「TfLiteGpuDelegate Invoke: GpuDelegate must run on the same thread where it was initialized.」が表示される可能性があります。
ステップ1. モジュールbuild.gradleファイルに、次の依存関係が含まれていることを確認します。
ステップ 2.デバイスで実行されている GPU が TensorFlow GPU デリゲートと互換性があるかどうかを検出します。互換性がない場合は、複数の CPU スレッドを使用してモデルを実行します。
Kotlin
import org.tensorflow.lite.gpu.CompatibilityList
import org.tensorflow.lite.gpu.GpuDelegate import org.tensorflow.lite.support.model.Model
import org.tensorflow.lite.gpu.CompatibilityList;
import org.tensorflow.lite.gpu.GpuDelegate;
// Initialize interpreter with GPU delegate
Model.Options options;
CompatibilityList compatList = CompatibilityList();
if(compatList.isDelegateSupportedOnThisDevice()){
// if the device has a supported GPU, add the GPU delegate
options = Model.Options.Builder().setDevice(Model.Device.GPU).build();
} else {
// if the GPU is not supported, run on 4 threads
options = Model.Options.Builder().setNumThreads(4).build();
}
MyModel myModel = new MyModel.newInstance(context, options);
// Run inference per sample code
TensorFlow Lite コードジェネレータを使用してモデルインターフェイスを生成する{:#codegen}
注意:TensorFlow Lite ラッパーコードジェネレータは現在、Android のみをサポートしています。
メタデータで拡張された TensorFlow Lite モデルの場合、開発者は TensorFlow Lite Android ラッパーコードジェネレータを使用してプラットフォーム固有のラッパーコードを作成できます。ラッパーコードにより、ByteBufferと直接対話する必要がなくなり、開発者はBitmapやRectなどの型付きオブジェクトを使用して TensorFlow Lite モデルと対話できます。
コードジェネレータの有用性は、TensorFlow Lite モデルのメタデータエントリの完全性に依存します。codegen ツールが各フィールドを解析する方法については、metadata_schema.fbs の関連フィールドの下にある<Codegen usage>セクションを参照してください。
ラッパーコードを生成する
端末に以下のツールをインストールする必要があります。
完了すると、次の構文を使用してコードジェネレータを使用できます。
結果のコードは、宛先ディレクトリに配置されます。Google Colab またはその他のリモート環境を使用している場合は、結果を zip アーカイブに圧縮して Android Studio プロジェクトにダウンロードする方が簡単な場合があります。
生成されたコードを使用する
ステップ 1:生成されたコードをインポートする
必要に応じて、生成されたコードをディレクトリ構造に解凍します。生成されたコードのルートは、SRC_ROOTであると想定されます。
TensorFlow Lite モデルを使用する Android Studio プロジェクトを開き、生成されたモジュールを次の方法でインポートします。And File-> New-> Import Module-> SRC_ROOTを選択します。
上記の例を使用すると、インポートされたディレクトリとモジュールはclassify_wrapperと呼ばれます。
ステップ 2:アプリのbuild.gradleファイルを更新します
生成されたライブラリモジュールを使用するアプリモジュールでは、次のようになります。
Android セクションの下に、以下を追加します。
注:Android Gradle プラグインのバージョン 4.1 以降、.tflite はデフォルトで noCompress リストに追加され、上記の aaptOptions は不要になりました。
依存関係セクションの下に、以下を追加します。
ステップ 3:モデルの使用
モデル推論の高速化
生成されたコードを使用すると、開発者はデリゲートとスレッド数を使用してコードを高速化できます。これは、次の 3 つのパラメータを使用し、モデルオブジェクトを開始するときに設定できます。
Context:Android アクティビティまたはサービスからのコンテキスト(オプション)
Device:GPUDelegate や NNAPIDelegate などの TFLite アクセラレーションデリゲート(オプション)
numThreads:モデルの実行に使用されるスレッドの数。デフォルトは 1 です。
例えば、NNAPI デリゲートと最大 3 つのスレッドを使用するには、次のようにモデルを初期化します。
トラブルシューティング
「java.io.FileNotFoundException: This file can not be opened as a file descriptor; it is probably compressed」エラーが発生する場合、ライブラリモジュールを使用するアプリモジュールの Android セクションの下に次の行を挿入します。
注:Android Gradle プラグインのバージョン 4.1 以降、.tflite はデフォルトで noCompress リストに追加され、上記の aaptOptions は不要になりました。