LiteRT メタデータを使用すると、 ラッパーコードを使用して Android での統合を有効にします。ほとんどのデベロッパーにとって、 Android Studio ML Model Binding のグラフィカル インターフェースは、 簡単に操作できますさらにカスタマイズが必要な場合やコマンドラインを使用する場合 LiteRT Codegen も利用できます。
Android Studio ML モデル バインディングを使用する
メタデータで拡張された LiteRT モデルの場合:
デベロッパーは Android Studio ML Model Binding を使用して、
設定を行い、モデルに基づいてラッパー クラスを生成する
提供します。ラッパーコードを使用すると、直接やり取りする必要が
ByteBuffer
。デベロッパーは LiteRT モデルを操作して、
Bitmap
や Rect
などの型付きオブジェクトを含む。
Android Studio で LiteRT モデルをインポートする
TFLite モデルを使用するモジュールを右クリックするか、
File
、その後はNew
>Other
>LiteRT Model
TFLite ファイルの場所を選択します。なお、 ML モデル バインディングを使用してモジュールの依存関係を構成し、 すべての依存関係が Android モジュールのモジュールに自動的に挿入され、
build.gradle
ファイル。省略可: 次の場合は、TensorFlow GPU をインポートするための 2 番目のチェックボックスをオンにします。 使用したい場合は
[
Finish
] をクリックします。インポートが正常に完了すると、次の画面が表示されます。開始方法 [Kotlin] または [Java] を選択し、コードを
Sample Code
セクション。この画面に戻るには、 Android Studio のml
ディレクトリにある TFLite モデル。
モデル推論の高速化
ML Model Binding を使用すると、ML モデル バインディングを通じてコードを高速化できます。 デリゲートの使用とスレッド数の制限を受けます。
ステップ 1. モジュール build.gradle
ファイルに、次の内容が含まれていることを確認します。
:
dependencies {
...
// TFLite GPU delegate 2.3.0 or above is required.
implementation 'com.google.ai.edge.litert:litert-gpu:2.3.0'
}
ステップ 2. デバイスで実行されている GPU が TensorFlow GPU と互換性があるかどうかを検出する デリゲートします。複数の CPU スレッドを使用してモデルを実行しない場合は、次のようにします。
Kotlin
import org.tensorflow.lite.gpu.CompatibilityList import org.tensorflow.lite.gpu.GpuDelegate val compatList = CompatibilityList() val options = if(compatList.isDelegateSupportedOnThisDevice) { // if the device has a supported GPU, add the GPU delegate Model.Options.Builder().setDevice(Model.Device.GPU).build() } else { // if the GPU is not supported, run on 4 threads Model.Options.Builder().setNumThreads(4).build() } // Initialize the model as usual feeding in the options object val myModel = MyModel.newInstance(context, options) // Run inference per sample code
Java
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
LiteRT コード生成ツールを使用してモデル インターフェースを生成する
メタデータで拡張された LiteRT モデルの場合:
デベロッパーは LiteRT Android ラッパー コード ジェネレータを使用して、
プラットフォーム固有のラッパーコードです。ラッパーコードを使用すると
ByteBuffer
と直接やり取りします。デベロッパーは TensorFlow を操作して、
Bitmap
や Rect
などの型付きオブジェクトを含む Lite モデル。
コード生成ツールの有用性は、コードの完全性と
LiteRT モデルのメタデータ エントリ。<Codegen usage>
セクションを参照
関連するフィールドで
metadata_schema.fbs、
Codegen ツールによる各フィールドの解析方法を確認できます。
ラッパーコードを生成する
ターミナルに次のツールをインストールする必要があります。
pip install tflite-support
完了すると、次の構文を使用してコード生成ツールを使用できます。
tflite_codegen --model=./model_with_metadata/mobilenet_v1_0.75_160_quantized.tflite \
--package_name=org.tensorflow.lite.classify \
--model_class_name=MyClassifierModel \
--destination=./classify_wrapper
作成されたコードは、宛先ディレクトリに配置されます。もし Google Colab またはその他のリモート 結果を zip アーカイブに圧縮してダウンロードし、 Android Studio プロジェクトに追加します。
# Zip up the generated code
!zip -r classify_wrapper.zip classify_wrapper/
# Download the archive
from google.colab import files
files.download('classify_wrapper.zip')
生成されたコードの使用
ステップ 1: 生成されたコードをインポートする
生成されたコードを必要に応じてディレクトリ構造に解凍します。データの
生成されるコードは SRC_ROOT
であるとみなされます。
LiteRT を使用する Android Studio プロジェクトを開きます。
[ファイル] をクリックし、生成されたモジュールをインポートします。新規 ->モジュールをインポート ->
SRC_ROOT
を選択
上記の例では、インポートされたディレクトリとモジュールが
classify_wrapper
。
ステップ 2: アプリの build.gradle
ファイルを更新する
生成されたライブラリ モジュールを使用するアプリ モジュールで、次の操作を行います。
Android セクションに、次のコードを追加します。
aaptOptions {
noCompress "tflite"
}
depends セクションで、以下を追加します。
implementation project(":classify_wrapper")
ステップ 3: モデルを使用する
// 1. Initialize the model
MyClassifierModel myImageClassifier = null;
try {
myImageClassifier = new MyClassifierModel(this);
} catch (IOException io){
// Error reading the model
}
if(null != myImageClassifier) {
// 2. Set the input with a Bitmap called inputBitmap
MyClassifierModel.Inputs inputs = myImageClassifier.createInputs();
inputs.loadImage(inputBitmap));
// 3. Run the model
MyClassifierModel.Outputs outputs = myImageClassifier.run(inputs);
// 4. Retrieve the result
Map<String, Float> labeledProbability = outputs.getProbability();
}
モデル推論の高速化
生成されたコードにより、デベロッパーはコードを高速化できます。 代理人の使用と、 説明します。これらは、モデル オブジェクトの初期化時に設定できます。これは、3 つの parameters:
Context
: Android のアクティビティまたはサービスからのコンテキスト- (省略可)
Device
: TFLite アクセラレーション デリゲート。次に例を示します。 GPUDelegate - (省略可)
numThreads
: モデルの実行に使用されるスレッド数。 デフォルトは 1 です
たとえば、GPU デリゲートと最大 3 つのスレッドを使用するには、次のように初期化します。 次のようなモデルです。
try {
myImageClassifier = new MyClassifierModel(this, Model.Device.GPU, 3);
} catch (IOException io){
// Error reading the model
}
トラブルシューティング
「java.io.FileNotFoundException: このファイルをファイルとして開くことはできません。 記述できます。圧縮されているはずです次の行を挿入して ライブラリ モジュールを使用するアプリ モジュールの android セクションにあります。
aaptOptions {
noCompress "tflite"
}