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

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

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

アプリでカスタムTensorFlowLiteモデルを使用している場合は、FirebaseMLを使用してモデルをデプロイできます。 Firebaseを使用してモデルをデプロイすることで、アプリの初期ダウンロードサイズを縮小し、アプリの新しいバージョンをリリースせずにアプリのMLモデルを更新できます。また、リモート構成とA / Bテストを使用すると、さまざまなモデルをさまざまなユーザーセットに動的に提供できます。

TensorFlowLiteモデル

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

あなたが始める前に

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

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

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

    flutter run
    

1.モデルをデプロイします

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

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

2.モデルをデバイスにダウンロードし、TensorFlowLiteインタープリターを初期化します

アプリでTensorFlowLiteモデルを使用するには、最初にモデルダウンローダーを使用して、モデルの最新バージョンをデバイスにダウンロードします。次に、モデルを使用してTensorFlowLiteインタープリターをインスタンス化します。

モデルのダウンロードを開始するには、モデルダウンローダーの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.入力データに対して推論を実行します

デバイスにモデルファイルができたので、TensorFlowLiteインタープリターでモデルファイルを使用して推論を実行できます。このために、いくつかのオプションがあります。

付録:モデルのセキュリティ

TensorFlowLiteモデルをFirebaseMLで利用できるようにする方法に関係なく、FirebaseMLはそれらを標準のシリアル化されたprotobuf形式でローカルストレージに保存します。

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