查看 2022 年 Google I/O 大会上介绍的 Firebase 新动态。了解详情

将自定义 TensorFlow Lite 模型与 Flutter 结合使用

如果您的应用使用自定义TensorFlow Lite模型,您可以使用 Firebase ML 来部署您的模型。通过使用 Firebase 部署模型,您可以减少应用的初始下载大小并更新应用的 ML 模型,而无需发布应用的新版本。而且,通过远程配置和 A/B 测试,您可以为不同的用户组动态地提供不同的模型。

TensorFlow Lite 模型

TensorFlow Lite 模型是经过优化以在移动设备上运行的 ML 模型。要获取 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 解释器一起使用来执行推理。为此,您有多种选择:

附录:模型安全

无论您如何使 TensorFlow Lite 模型可用于 Firebase ML,Firebase ML 都会以标准序列化 protobuf 格式将它们存储在本地存储中。

理论上,这意味着任何人都可以复制您的模型。然而,在实践中,大多数模型都是特定于应用程序的,并且被优化混淆了,其风险类似于竞争对手反汇编和重用代码的风险。不过,在您的应用程序中使用自定义模型之前,您应该意识到这种风险。