メタデータを使用してモデル インターフェースを生成する

LiteRT メタデータを使用すると、 ラッパーコードを使用して Android での統合を有効にします。ほとんどのデベロッパーにとって、 Android Studio ML Model Binding のグラフィカル インターフェースは、 簡単に操作できますさらにカスタマイズが必要な場合やコマンドラインを使用する場合 LiteRT Codegen も利用できます。

Android Studio ML モデル バインディングを使用する

メタデータで拡張された LiteRT モデルの場合: デベロッパーは Android Studio ML Model Binding を使用して、 設定を行い、モデルに基づいてラッパー クラスを生成する 提供します。ラッパーコードを使用すると、直接やり取りする必要が ByteBuffer。デベロッパーは LiteRT モデルを操作して、 BitmapRect などの型付きオブジェクトを含む。

Android Studio で LiteRT モデルをインポートする

  1. TFLite モデルを使用するモジュールを右クリックするか、 File、その後は New >Other >LiteRT Model

  2. TFLite ファイルの場所を選択します。なお、 ML モデル バインディングを使用してモジュールの依存関係を構成し、 すべての依存関係が Android モジュールのモジュールに自動的に挿入され、 build.gradle ファイル。

    省略可: 次の場合は、TensorFlow GPU をインポートするための 2 番目のチェックボックスをオンにします。 使用したい場合は

  3. [Finish] をクリックします。

  4. インポートが正常に完了すると、次の画面が表示されます。開始方法 [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 を操作して、 BitmapRect などの型付きオブジェクトを含む 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"
}