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

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

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 管理 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 格式儲存在本機儲存中。

從理論上講,這意味著任何人都可以複製您的模型。然而,在實踐中,大多數模型都是特定於應用程式的,並且因最佳化而變得混亂,因此風險類似於競爭對手反彙編和重複使用您的程式碼。儘管如此,在應用程式中使用自訂模型之前,您應該意識到這種風險。