Google I/O 2022 で発表された Firebase の最新情報をご覧ください。詳細

FlutterでカスタムTensorFlowLiteモデルを使用する

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

アプリでカスタムTensorFlow Liteモデルを使用している場合は、Firebase ML を使用してモデルをデプロイできます。モデルを Firebase でデプロイすることにより、アプリの初期ダウンロード サイズを削減し、アプリの新しいバージョンをリリースすることなくアプリの ML モデルを更新できます。また、Remote Config と A/B Testing を使用すると、さまざまなモデルをさまざまなユーザー セットに動的に提供できます。

TensorFlow Lite モデル

TensorFlow Lite モデルは、モバイル デバイスでの実行に最適化された ML モデルです。 TensorFlow Lite モデルを取得するには:

Dart 用に維持されている TensorFlow Lite ライブラリがない場合は、プラットフォームのネイティブ TensorFlow Lite ライブラリと統合する必要があることに注意してください。この統合については、ここでは説明しません。

あなたが始める前に

  1. Flutter 用の Firebase SDK をまだインストールしていない場合は、インストールして初期化します

  2. Flutter プロジェクトのルート ディレクトリから次のコマンドを実行して、ML モデル ダウンローダー プラグインをインストールします。

    flutter pub add firebase_ml_model_downloader
    
  3. プロジェクトを再構築します。

    flutter run
    

1. モデルをデプロイする

Firebase コンソールまたは Firebase Admin Python および Node.js SDK のいずれかを使用して、カスタム TensorFlow モデルをデプロイします。カスタム モデルの展開と管理を参照してください。

カスタム モデルを Firebase プロジェクトに追加したら、指定した名前を使用してアプリでモデルを参照できます。 getModel()を呼び出すことで、いつでも新しい TensorFlow Lite モデルをデプロイし、新しいモデルをユーザーのデバイスにダウンロードできます (以下を参照)。

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 形式でローカル ストレージに保存します。

理論的には、これは誰でもあなたのモデルをコピーできることを意味します。ただし、実際には、ほとんどのモデルはアプリケーション固有であり、最適化によって難読化されているため、競合他社がコードを逆アセンブルして再利用する場合と同様のリスクがあります。ただし、アプリでカスタム モデルを使用する前に、このリスクを認識しておく必要があります。