アプリでカスタムTensorFlow Liteモデルを使用している場合は、Firebase ML を使用してモデルをデプロイできます。モデルを Firebase でデプロイすることにより、アプリの初期ダウンロード サイズを削減し、アプリの新しいバージョンをリリースすることなくアプリの ML モデルを更新できます。また、Remote Config と A/B Testing を使用すると、さまざまなモデルをさまざまなユーザー セットに動的に提供できます。
TensorFlow Lite モデル
TensorFlow Lite モデルは、モバイル デバイスでの実行に最適化された ML モデルです。 TensorFlow Lite モデルを取得するには:
- 公式の TensorFlow Lite モデルの 1 つなど、事前に構築されたモデルを使用する
- TensorFlow モデル、Keras モデル、または具象関数を TensorFlow Lite に変換します。
Dart 用に維持されている TensorFlow Lite ライブラリがない場合は、プラットフォームのネイティブ TensorFlow Lite ライブラリと統合する必要があることに注意してください。この統合については、ここでは説明しません。
あなたが始める前に
Flutter プロジェクトのルート ディレクトリから次のコマンドを実行して、ML モデル ダウンローダー プラグインをインストールします。
flutter pub add firebase_ml_model_downloader
プロジェクトを再構築します。
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 形式でローカル ストレージに保存します。
理論的には、これは誰でもあなたのモデルをコピーできることを意味します。ただし、実際には、ほとんどのモデルはアプリケーション固有であり、最適化によって難読化されているため、競合他社がコードを逆アセンブルして再利用する場合と同様のリスクがあります。ただし、アプリでカスタム モデルを使用する前に、このリスクを認識しておく必要があります。