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

1. 简介

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

什么是 ML Kit?

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

什么是 AutoML?

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

在此 Codelab 中,我们将使用 ML Kit 中的 AutoML Vision Edge 训练花卉分类模型。模型在云端进行训练,然后由应用进行捆绑或下载,以便完全在设备上运行推理。

93f21fd287496e4e.png

学习内容

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

所需条件

对于 Android 应用

对于 iOS 应用

  • 最新版 Xcode (v10.2+)
  • iOS 模拟器或 iOS 设备(版本 9.0 及更高版本)
  • CocoaPods
  • 具备使用 Swift 进行 iOS 开发的基础知识

2. 设置

下载代码和训练数据集

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

创建 Firebase 控制台项目

  1. 前往 Firebase 控制台
  2. 选择创建新项目,并将项目命名为“ML Kit 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.png

4. 训练模型

上传训练数据集

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

cdb18b61f890934f.png

训练图片分类模型

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

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

dd6b7eaa2dd5a9de.png

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

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

73f98fbed5ae5ee5.png

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

准备工作

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

下载图片分类模型

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

将模型添加到示例应用

您只需将模型添加到示例应用,它们即可开箱即用。如需有关如何将 ML Kit AutoML 集成到应用中的完整指南,请参阅我们的文档(AndroidiOS)。与 ML Kit SDK 互动的代码分别位于 ImageClassifier.ktImageClassifier.swift 文件中,您可以从这里开始探索应用的工作方式。

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

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

2e71ed2c7cb8757c.png

Android 应用

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

2e71ed2c7cb8757c.png

iOS 应用

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

65172c3f35336d4e.png

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

借助 ML Kit 的远程模型,您无需在应用二进制文件中添加 TensorFlow Lite 模型,而是在需要时从 Firebase 按需下载。与本地模型相比,远程模型具有以下优势:

  • 更小的应用二进制文件
  • 无需更新应用即可更新模型
  • 对模型的多个版本进行 A/B 测试

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

发布模型

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

使用远程模型识别鲜花

示例应用配置为在远程模型可用时使用远程模型。发布远程模型后,您只需重新运行应用即可触发模型下载。您可以通过查看应用界面底部中的“来源”值,验证应用是否正在使用远程模型。如果此方法不起作用,请参阅下文的“问题排查”部分。

7c8292293fd858ad.png de359886ccecef2.png

问题排查

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

Android 应用

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

iOS 应用

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

7. 恭喜!

您已完成整个流程,即使用 AutoML 和您自己的训练数据训练图片分类模型,然后使用机器学习套件在移动应用中使用该模型。

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

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

Android 示例

iOS 示例