在机器学习套件中使用 AutoML Vision 训练和部署设备端图片分类模型

1. 简介

机器学习的最新进展使计算机可以相对轻松地识别图片中的对象。在此 Codelab 中,我们将引导您构建可以识别不同类型的对象的图片分类模型,然后在 Android 和 iOS 应用中部署该模型。借助机器学习套件和 AutoML,您无需任何机器学习专业知识即可大规模构建和部署模型。

什么是机器学习套件?

机器学习套件是一个移动 SDK,它通过强大且易用的软件包将 Google 的机器学习专业知识融入到 Android 和 iOS 应用中。无论您是刚开始接触机器学习,还是拥有丰富的相关经验,都只需几行代码就能轻松实现所需的功能。有多个 API 可以识别文本、人脸等,这些 API 开箱即可使用。但是,如果您需要识别这些 API 不支持的对象,例如从图片中识别不同类型的花卉,则需要训练自己的模型。在这方面,AutoML 可以助您一臂之力。

什么是 AutoML?

Cloud AutoML 是一套机器学习产品,可让机器学习专业知识有限的开发者利用 Google 最先进的迁移学习技术和 Neural Architecture Search 技术,根据其业务需求训练出高质量的模型。

在此 Codelab 中,我们将使用机器学习套件中的 AutoML Vision Edge 来训练花卉分类模型。模型在云端进行训练,但随后由应用捆绑或下载,以便完全在设备端运行推断。

93f21fd287496e4e

学习内容

  • 如何使用机器学习套件中的 AutoML Vision Edge 训练图片分类模型。
  • 如何使用机器学习套件 SDK 在示例 Android 或 iOS 应用中运行此模型。

所需条件

对于 Android 应用

对于 iOS 应用

  • 最新版本的 XCode (v10.2+)
  • iOS 模拟器或 iOS 实体设备 (v9.0+)
  • CocoaPods
  • 具备使用 Swift 进行 iOS 开发的基础知识

2. 设置

下载代码和训练数据集

下载包含此 Codelab 源代码和训练数据集的 zip 归档文件。将归档解压缩到本地机器。

创建 Firebase 控制台项目

  1. 前往 Firebase 控制台
  2. 选择新建项目,然后将项目命名为“机器学习套件 Codelab”。

设置 Android 应用

  1. 将 Android 应用添加到 Firebase 项目中。Android 软件包名称:com.google.firebase.codelab.mlkit.automl
  2. 下载 google-services.json 配置文件,并将其放入 Android 应用中的 android/mlkit-automl/app/google-services.json 下。

设置 iOS 应用

  1. 将 iOS 应用添加到 Firebase 项目中。iOS 软件包 ID:com.google.firebase.codelab.mlkit.automl
  2. 下载 GoogleService-Info.plist 配置文件,然后按照说明将其放入 iOS 应用 (ios/mlkit-automl/GoogleService-Info.plist)。

3. 准备训练数据集

要训练模型来识别不同类型的对象,您必须准备一组图片,并为每个图片添加标签。我们创建了一个归档,其中包含知识共享许可的花卉照片,供您在此 Codelab 中使用。

该数据集会打包一个名为 flower_photos.zip 的 ZIP 文件,该文件包含在您在上一步中下载的 ZIP 归档文件中。

探索数据集

如果提取 flower_photos.zip 文件,您将看到数据集包含 5 种花卉的图片:蒲公英、雏菊、郁金香、向日葵和玫瑰,这些图片被整理到以花朵命名的文件夹中。这是一种创建训练数据集以提供给 AutoML 并训练图片分类模型的便捷方法。

此训练数据集中每种花卉类型有 200 张图片。每个类别至少需要 10 张图片来训练模型。不过,训练图片越多,通常生成的模型就越好。

e5772b6527a6048d.png 6c4443d31cd5653e

4. 训练模型

上传训练数据集

  1. Firebase 控制台中,打开您刚刚创建的项目。
  2. 选择机器学习套件 >AutoML
  3. 您可能会看到一些欢迎界面。在适用的情况下,选择开始使用
  1. 设置进度完成后,选择添加数据集,然后将其命名为“Flowers”。
  2. 模型目标中,选择单标签分类,因为训练数据只包含每张图片一个标签。
  3. 选择创建
  4. 上传您在上一步中下载的 flower_photos.zip 文件,以导入花卉训练数据集。
  5. 等待导入任务完成,这可能需要几分钟。
  6. 现在您可以确认数据集是否已正确导入。
  7. 由于训练数据集中的所有图片均已添加标签,您可以继续训练模型。

cdb18b61f890934f.png

训练图片分类模型

由于我们的模型将在计算能力和存储空间有限的移动设备上运行,因此我们不仅要注意模型的准确性,还要注意其大小和速度。模型准确率、延迟时间(即对图像进行分类所需的时间)和模型大小始终存在权衡取舍。一般来说,准确率越高,模型的大小越大,对图像进行分类所需的时间也越长。

AutoML 为您提供了多个选项:您可以选择针对准确率进行优化,针对延迟时间和模型大小进行优化,或者在两者之间取得平衡。您还可以选择允许模型训练多长时间。较大的数据集需要训练更长时间。

dd6b7eaa2dd5a9de.png

如果您想自行训练模型,请按以下步骤操作。

  1. 选择训练模型
  2. 选择通用选项和 1 个计算小时训练时间。
  3. 等待训练任务完成一段时间(可能需要几个小时)。
  4. 训练任务完成后,您将看到关于训练后模型表现的评估指标。

73f98fbed5ae5ee5

5. 在移动应用中使用该模型

准备工作

  • 此 Codelab 包含 Android 和 iOS 示例应用,其中演示了如何使用我们之前在移动应用中训练的图片分类模型。这两个应用的功能类似。您可以选择自己比较熟悉的平台。
  • 在继续之前,请确保您已下载示例应用,并在第 2 步中对其进行了配置。
  • 此外,请确保您的本地环境已设置为能够针对您选择的平台 (Android/iOS) 构建应用程序。

下载图片分类模型

  • 如果您在上一步中训练了模型,请选择下载以获取模型。
  • 如果您未训练模型或训练任务尚未完成,则可以使用示例应用中包含的模型。

将模型添加到示例应用

您只需将模型添加到示例应用,它们便可开箱即用。如需查看如何将机器学习套件 AutoML 集成到应用的完整指南,请参阅我们的文档(Android 版、iOS 版)。与机器学习套件 SDK 交互的代码分别位于 ImageClassifier.ktImageClassifier.swift 文件中,因此您可以从这里开始探索应用的工作原理。

您可以通过以下两种方式部署模型:本地部署和远程部署。

  • 本地模型主要用于将图片分类模型捆绑到应用二进制文件中,不过您也可以提供本地存储空间中保存的模型。采用捆绑销售后,用户从 App Store / Play 商店下载您的应用后,即可立即使用该模型,而且无需互联网连接也可使用。
  • 远程模型是指该模型托管在 Firebase 上,并且仅在用户首次需要时才会下载到用户的设备上。之后,该模型也可离线使用。

2e71ed2c7cb8757c

Android 应用

  1. 打开 Android Studio。
  2. 导入 android/mlkit-automl/ 下的 Android 应用
  3. (可选)提取您下载的模型,并将其内容复制到示例应用中包含的模型上。10cf6b1e0f34de29
  4. 现在,点击 Android Studio 工具栏中的“Run”(c8b8a080b7ead886.png),验证其可以识别不同类型的花卉!

2e71ed2c7cb8757c

iOS 应用

  1. 打开终端并前往 ios/mlkit-automl/ 文件夹
  2. 运行 pod install 以通过 Cocoapods 下载依赖项
  3. 运行 open MLVisionExample.xcworkspace/ 以在 Xcode 中打开项目工作区。
  4. (可选)提取您下载的模型,并复制其内容,覆盖位于 ios/ml-automl/Resources/automl/ 下的示例应用中的模型cd291fe04bcdc6ee.png
  5. 现在,点击 Xcode 工具栏中的“Run”(16629f86bbeb4208),并验证它能否识别不同类型的花!

65172c3f35336d4e

6. (可选)使用远程模型

借助机器学习套件的远程模型,您无需在应用二进制文件中添加 Tensorflow Lite 模型,但可以在需要时从 Firebase 中按需下载该模型。与本地模型相比,远程模型具有以下几个优势:

  • 缩减应用二进制文件
  • 能够在不更新应用的情况下更新模型
  • 使用一个模型的多个版本进行 A/B 测试

在此步骤中,我们将发布一个远程模型,并在示例应用中使用该模型。请确保您已完成此 Codelab 第 4 步中的模型训练。

发布模型

  1. 前往 Firebase 控制台
  2. 选择“机器学习套件 AutoML Codelab”创建项目
  3. 选择机器学习套件 >AutoML
  4. 选择“花”数据集。
  5. 确认训练任务已完成,然后选择模型。
  6. 选择发布,并将其命名为“mlkit_flowers”。b63a58b83e814acd.png

使用远程模型识别花卉

示例应用配置为使用远程模型(如果可用)。发布远程模型后,您只需重新运行应用即可触发模型下载。您可以通过查看“Source”值。请参阅“问题排查”部分。

7c8292293fd858ad de359886ccecef2.png

问题排查

如果示例应用仍在使用本地模型,请验证代码中远程模型名称的设置是否正确。

Android 应用

  1. 前往 ImageClassifier.kt 并找到此代码块。
val remoteModel = FirebaseRemoteModel.Builder(REMOTE_MODEL_NAME).build()
  1. 验证代码中设置的模型名称是否与您之前通过 Firebase 控制台发布的模型名称相匹配。
  2. 现在,点击 Android Studio 工具栏中的“Run”(c8b8a080b7ead886.png) 以重新运行应用。

iOS 应用

  1. 前往 ImageClassifier.swift 并找到此代码块,
return RemoteModel(
  name: Constant.remoteAutoMLModelName,
  allowsModelUpdates: true,
  initialConditions: initialConditions,
  updateConditions: updateConditions
)
  1. 验证代码中设置的模型名称是否与您之前通过 Firebase 控制台发布的模型名称匹配
  2. 现在,点击 Xcode 工具栏中的“Run”(16629f86bbeb4208) 以重新运行应用。

7. 恭喜!

您已通过 AutoML 用自己的训练数据训练图片分类模型,然后通过机器学习套件在移动应用中使用该模型。

请参阅我们的文档,了解如何将机器学习套件中的 AutoML Vision Edge 集成到您自己的应用中。

您还可以试用我们的机器学习套件示例应用,了解 Firebase 机器学习套件的其他功能。

Android 示例

iOS 示例