アプリでカスタム TensorFlow Lite モデルを使用する場合は、Firebase ML を使用してモデルをデプロイできます。Firebase でモデルをデプロイすることで、アプリの初期ダウンロード サイズを減少し、アプリの新しいバージョンをリリースすることなくアプリの ML モデルを更新できます。また、Remote Config と A/B Testing では、異なるモデルを異なるユーザー グループに動的に提供できます。
TensorFlow Lite モデル
TensorFlow Lite モデルは、モバイル デバイス上での実行に最適化された ML モデルです。TensorFlow Lite モデルを取得するには、次のようにします。
- 公式 TensorFlow Lite モデルで紹介されているモデルなど、構築済みモデルを使用します。
- TensorFlow モデル、Keras モデル、または具象関数を TensorFlow Lite に変換します。
Dart 用に維持されている TensorFlow Lite ライブラリがない場合は、ご利用のプラットフォーム用のネイティブ TensorFlow Lite ライブラリと統合する必要があります。この統合については、ここで説明しません。
始める前に
- Flutter 用の Firebase SDK をインストールして初期化します(まだ行っていない場合)。 
- Flutter プロジェクトのルート ディレクトリから、次のコマンドを実行して ML モデル ダウンローダー プラグインをインストールします。 - flutter pub add firebase_ml_model_downloader
- プロジェクトを再ビルドします。 - flutter run
1. モデルをデプロイする
Firebase コンソールまたは Firebase Admin Python と Node.js SDK を使用して、カスタム TensorFlow モデルをデプロイします。カスタムモデルをデプロイして管理するをご覧ください。
Firebase プロジェクトにカスタムモデルを追加した後は、指定した名前を使用してアプリ内でモデルを参照できます。新しい TensorFlow Lite モデルのデプロイと、ユーザーのデバイスへの新しいモデルのダウンロードは、getModel() を呼び出すことでいつでも行うことができます(下記参照)。
2. モデルをデバイスにダウンロードして TensorFlow Lite インタープリタを初期化する
TensorFlow Lite モデルをアプリで使用するには、モデル ダウンローダーを使用して、最新バージョンのモデルをデバイスにダウンロードします。次に、モデルを使用して TensorFlow Lite インタープリタをインスタンス化します。
モデルのダウンロードを開始するには、モデル ダウンローダーの getModel() メソッドを呼び出し、モデルをアップロードしたときに割り当てた名前、常に最新モデルをダウンロードするかどうか、ダウンロードを許可する条件を指定します。
以下の 3 種類のダウンロードの動作から選択できます。
| ダウンロードの種類 | 説明 | 
|---|---|
| localModel | デバイスからローカルモデルを取得します。使用できるローカルモデルがない場合は、 latestModelと同じ動作を行います。このダウンロードの種類は、モデルの更新の確認を行わなくてもいい場合に使用します。たとえば、Remote Config を使用してモデル名を取得し、常に新しい名前でモデルをアップロードする場合です(推奨)。 | 
| localModelUpdateInBackground | デバイスからローカルモデルを取得し、バックグラウンドでモデルの更新を開始します。使用できるローカルモデルがない場合は、 latestModelと同じ動作を行います。 | 
| latestModel | 最新のモデルを取得します。ローカルモデルが最新バージョンの場合は、ローカルモデルを返します。それ以外の場合は最新のモデルをダウンロードします。その際に、最新バージョンがダウンロードされるまで処理がブロックされます(非推奨)。この動作は、明らかに最新バージョンが必要な場合にのみ使用してください。 | 
モデルがダウンロード済みであることを確認するまで、モデルに関連する機能を無効にする必要があります(UI の一部をグレー表示または非表示にするなど)。
FirebaseModelDownloader.instance
    .getModel(
        "yourModelName",
        FirebaseModelDownloadType.localModel,
        FirebaseModelDownloadConditions(
          iosAllowsCellularAccess: true,
          iosAllowsBackgroundDownloading: false,
          androidChargingRequired: false,
          androidWifiRequired: false,
          androidDeviceIdleRequired: false,
        )
    )
    .then((customModel) {
      // Download complete. Depending on your app, you could enable the ML
      // feature, or switch from the local model to the remote model, etc.
      // The CustomModel object contains the local path of the model file,
      // which you can use to instantiate a TensorFlow Lite interpreter.
      final localModelPath = customModel.file;
      // ...
    });
多くのアプリは、初期化コードでモデルのダウンロード タスクを開始しますが、モデルを使用する前に開始することもできます。
3. 入力データの推論を行う
デバイス上にモデルファイルが揃ったので、次に、そのファイルを使って TensorFlow Lite インタープリタで推論を行います。Dart 用に維持されている TensorFlow Lite ライブラリがない場合は、iOS および Android 用のネイティブ TensorFlow Lite ライブラリと統合する必要があります。
付録: モデルのセキュリティ
TensorFlow Lite モデルを Firebase ML で利用可能にした方法に関係なく、Firebase ML は標準のシリアル化された protobuf 形式でモデルをローカル ストレージに格納します。
理論上、これは誰でもモデルをコピーできることを意味します。ただし、実際には、ほとんどのモデルはアプリケーションに固有であり、最適化により難読化されています。このため、リスクは、競合他社がコードを逆アセンブルして再利用する場合と同程度です。そうであっても、アプリでカスタムモデルを使用する前に、このリスクを認識しておく必要があります。