Android 用の TensorFlow Lite をビルドする

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

このドキュメントでは、TensorFlow Lite Android ライブラリを独自に構築する方法について説明します。通常、TensorFlow Lite Android ライブラリをローカルでビルドする必要はありません。単に使用したい場合は、Android プロジェクトでそれらを使用する方法の詳細について、 Android クイックスタートを参照してください。

毎晩のスナップショットを使用する

毎晩のスナップショットを使用するには、次のリポジトリをルート Gradle ビルド構成に追加します。

allprojects {
    repositories {      // should be already there
        mavenCentral()  // should be already there
        maven {         // add this repo to use snapshots
          name 'ossrh-snapshot'
          url 'https://oss.sonatype.org/content/repositories/snapshots'
        }
    }
}

TensorFlow Lite をローカルでビルドする

場合によっては、TensorFlow Lite のローカル ビルドを使用したい場合があります。たとえば、 TensorFlow から選択された操作を含むカスタム バイナリを構築している場合や、TensorFlow Lite にローカルな変更を加えたい場合があります。

Docker を使用してビルド環境をセットアップする

  • Docker ファイルをダウンロードします。 Docker ファイルをダウンロードすることにより、次の利用規約がその使用に適用されることに同意したことになります。

クリックして同意することにより、Android Studio および Android Native Development Kit のすべての使用が、 https://developer.android.com/studio/termsで入手可能な Android ソフトウェア開発キット ライセンス契約に準拠することに同意したことになります (このような URL は、 Google によって随時更新または変更されます)。

ファイルをダウンロードするには、利用規約に同意する必要があります。 l10n確認

  • 必要に応じて、Android SDK または NDK のバージョンを変更できます。ダウンロードした Docker ファイルを空のフォルダーに置き、次を実行して Docker イメージをビルドします。
docker build . -t tflite-builder -f tflite-android.Dockerfile
  • 現在のフォルダーをコンテナー内の /host_dir にマウントして、docker コンテナーを対話的に開始します (/tensorflow_src はコンテナー内の TensorFlow リポジトリであることに注意してください)。
docker run -it -v $PWD:/host_dir tflite-builder bash

Windows で PowerShell を使用する場合は、「$PWD」を「pwd」に置き換えます。

ホストで TensorFlow リポジトリを使用する場合は、代わりにそのホスト ディレクトリをマウントします (-v hostDir:/host_dir)。

  • コンテナー内に入ったら、次のコマンドを実行して、追加の Android ツールとライブラリをダウンロードできます (ライセンスに同意する必要がある場合があることに注意してください)。
sdkmanager \
  "build-tools;${ANDROID_BUILD_TOOLS_VERSION}" \
  "platform-tools" \
  "platforms;android-${ANDROID_API_LEVEL}"

次に、ワークスペースと .bazelrc の構成セクションに進み、ビルド設定を構成する必要があります。

ライブラリのビルドが完了したら、それらをコンテナー内の /host_dir にコピーして、ホスト上でアクセスできるようにします。

Docker なしでビルド環境をセットアップする

Bazel と Android の前提条件をインストールする

Bazel は、TensorFlow の主要なビルド システムです。それを使用してビルドするには、それと Android NDK および SDK がシステムにインストールされている必要があります。

  1. Bazel ビルド システムの最新バージョンをインストールします。
  2. ネイティブ (C/C++) TensorFlow Lite コードをビルドするには、Android NDK が必要です。現在推奨されているバージョンは 19c で、ここで見つけることができます。
  3. Android SDK とビルド ツールは、こちらから、またはAndroid Studioの一部として入手できます。ビルド ツール API >= 23 は、TensorFlow Lite のビルドに推奨されるバージョンです。

WORKSPACE と .bazelrc を構成する

これは、TF Lite ライブラリをビルドするために必要な 1 回限りの構成手順です。ルートの TensorFlow チェックアウト ディレクトリで./configureスクリプトを実行し、スクリプトが Android ビルド用の./WORKSPACEをインタラクティブに構成するように求められたら、「はい」と答えます。スクリプトは、次の環境変数を使用して設定を構成しようとします。

  • ANDROID_SDK_HOME
  • ANDROID_SDK_API_LEVEL
  • ANDROID_NDK_HOME
  • ANDROID_NDK_API_LEVEL

これらの変数が設定されていない場合は、スクリプト プロンプトで対話的に指定する必要があります。構成が成功すると、ルート フォルダーの.tf_configure.bazelrcファイルに次のようなエントリが生成されます。

build --action_env ANDROID_NDK_HOME="/usr/local/android/android-ndk-r19c"
build --action_env ANDROID_NDK_API_LEVEL="21"
build --action_env ANDROID_BUILD_TOOLS_VERSION="28.0.3"
build --action_env ANDROID_SDK_API_LEVEL="23"
build --action_env ANDROID_SDK_HOME="/usr/local/android/android-sdk-linux"

ビルドしてインストールする

Bazel が適切に構成されたら、次のようにルート チェックアウト ディレクトリから TensorFlow Lite AAR をビルドできます。

bazel build -c opt --fat_apk_cpu=x86,x86_64,arm64-v8a,armeabi-v7a \
  --host_crosstool_top=@bazel_tools//tools/cpp:toolchain \
  //tensorflow/lite/java:tensorflow-lite

これにより、 bazel-bin/tensorflow/lite/java/に AAR ファイルが生成されます。これにより、いくつかの異なるアーキテクチャで「太い」AAR が構築されることに注意してください。それらすべてが必要ない場合は、デプロイメント環境に適したサブセットを使用してください。

次のように、一連のモデルのみを対象とするより小さな AAR ファイルを作成できます。

bash tensorflow/lite/tools/build_aar.sh \
  --input_models=model1,model2 \
  --target_archs=x86,x86_64,arm64-v8a,armeabi-v7a

上記のスクリプトは、モデルの 1 つが Tensorflow ops を使用している場合、 tensorflow-lite.aarファイルとオプションでtensorflow-lite-select-tf-ops.aarファイルを生成します。詳細については、 TensorFlow Lite バイナリ サイズの削減セクションを参照してください。

AAR をプロジェクトに直接追加する

tensorflow-lite.aarファイルをプロジェクトのlibsというディレクトリに移動します。アプリのbuild.gradleファイルを変更して新しいディレクトリを参照し、既存の TensorFlow Lite 依存関係を新しいローカル ライブラリに置き換えます。例:

allprojects {
    repositories {
        mavenCentral()
        maven {  // Only for snapshot artifacts
            name 'ossrh-snapshot'
            url 'https://oss.sonatype.org/content/repositories/snapshots'
        }
        flatDir {
            dirs 'libs'
        }
    }
}

dependencies {
    compile(name:'tensorflow-lite', ext:'aar')
}

AAR をローカルの Maven リポジトリにインストールする

ルート チェックアウト ディレクトリから次のコマンドを実行します。

mvn install:install-file \
  -Dfile=bazel-bin/tensorflow/lite/java/tensorflow-lite.aar \
  -DgroupId=org.tensorflow \
  -DartifactId=tensorflow-lite -Dversion=0.1.100 -Dpackaging=aar

アプリのbuild.gradleで、 mavenLocal()依存関係があることを確認し、標準の TensorFlow Lite 依存関係を選択した TensorFlow ops をサポートする依存関係に置き換えます。

allprojects {
    repositories {
        mavenCentral()
        maven {  // Only for snapshot artifacts
            name 'ossrh-snapshot'
            url 'https://oss.sonatype.org/content/repositories/snapshots'
        }
        mavenLocal()
    }
}

dependencies {
    implementation 'org.tensorflow:tensorflow-lite:0.1.100'
}

ここでのバージョン0.1.100は、純粋にテスト/開発用であることに注意してください。ローカル AAR をインストールすると、標準のTensorFlow Lite Java 推論 APIをアプリ コードで使用できます。