Catch up on highlights from Firebase at Google I/O 2023. Learn more

將自定義 TensorFlow Lite 模型與 Flutter 結合使用

如果您的應用使用自定義TensorFlow Lite模型,您可以使用 Firebase ML 來部署您的模型。通過使用 Firebase 部署模型,您可以減少應用的初始下載大小並更新應用的 ML 模型,而無需發布應用的新版本。而且,通過遠程配置和 A/B 測試,您可以動態地為不同的用戶組提供不同的模型。

TensorFlow Lite 模型

TensorFlow Lite 模型是經過優化以在移動設備上運行的 ML 模型。要獲取 TensorFlow Lite 模型:

請注意,如果沒有為 Dart 維護的 TensorFlow Lite 庫,您將需要為您的平台集成原生的 TensorFlow Lite 庫。此集成未在此處記錄。

在你開始之前

  1. 如果您還沒有安裝並初始化 Firebase SDKs for Flutter ,請執行此操作。

  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 。如果您對檢查模型更新不感興趣,請使用此下載類型。例如,您正在使用 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 格式存儲在本地存儲中。

從理論上講,這意味著任何人都可以復制您的模型。然而,在實踐中,大多數模型都是特定於應用程序的,並且被優化所混淆,以至於風險類似於競爭對手反彙編和重用您的代碼的風險。然而,在您的應用程序中使用自定義模型之前,您應該意識到這種風險。