透過 Flutter 使用自訂 TensorFlow Lite 模型

如果應用程式使用自訂 TensorFlow Lite 模型,可以透過 Firebase ML 部署模型。透過 Firebase 部署模型,您可以縮減應用程式的初始下載大小,並更新應用程式的 ML 模型,不必發布新版應用程式。此外,您也可以使用遠端設定和 A/B 測試,動態為不同使用者群組提供不同模型。

TensorFlow Lite 模型

TensorFlow Lite 模型是經過最佳化的機器學習模型,可在行動裝置上執行。如要取得 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 專案後,您可以使用指定的名稱在應用程式中參照模型。您可以隨時部署新的 TensorFlow Lite 模型,並呼叫 getModel() (如下所示),將新模型下載到使用者的裝置。

2. 將模型下載至裝置,並初始化 TensorFlow Lite 解譯器

如要在應用程式中使用 TensorFlow Lite 模型,請先使用模型下載工具,將最新版本的模型下載至裝置。接著,使用模型例項化 TensorFlow Lite 解譯器。

如要開始下載模型,請呼叫模型下載器的 getModel() 方法,並指定您上傳模型時指派的名稱、是否要一律下載最新模型,以及允許下載的條件。

您可以選擇三種下載行為:

下載類型 說明
localModel 從裝置取得本機模型。 如果沒有可用的本機模型,這項功能的行為與 latestModel 類似。如果您不想檢查模型更新,請使用這個下載類型。舉例來說,您使用遠端設定擷取模型名稱,並一律以新名稱上傳模型 (建議做法)。
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 格式將模型儲存在本機儲存空間。

從理論上來說,這表示任何人都能複製您的模型。不過,實際上大多數模型都經過最佳化,因此會針對特定應用程式進行混淆處理,風險與競爭對手拆解及重複使用您程式碼的風險類似。不過,在應用程式中使用自訂模型前,請務必瞭解這項風險。