1. 简介
机器学习的最新进展使计算机可以相对轻松地识别图片中的对象。在此 Codelab 中,我们将引导您构建可以识别不同类型的对象的图片分类模型,然后在 Android 和 iOS 应用中部署该模型。借助机器学习套件和 AutoML,您无需任何机器学习专业知识即可大规模构建和部署模型。
什么是机器学习套件?
机器学习套件是一个移动 SDK,它通过强大且易用的软件包将 Google 的机器学习专业知识融入到 Android 和 iOS 应用中。无论您是刚开始接触机器学习,还是拥有丰富的相关经验,都只需几行代码就能轻松实现所需的功能。有多个 API 可以识别文本、人脸等,这些 API 开箱即可使用。但是,如果您需要识别这些 API 不支持的对象,例如从图片中识别不同类型的花卉,则需要训练自己的模型。在这方面,AutoML 可以助您一臂之力。
什么是 AutoML?
Cloud AutoML 是一套机器学习产品,可让机器学习专业知识有限的开发者利用 Google 最先进的迁移学习技术和 Neural Architecture Search 技术,根据其业务需求训练出高质量的模型。
在此 Codelab 中,我们将使用机器学习套件中的 AutoML Vision Edge 来训练花卉分类模型。模型在云端进行训练,但随后由应用捆绑或下载,以便完全在设备端运行推断。
学习内容
- 如何使用机器学习套件中的 AutoML Vision Edge 训练图片分类模型。
- 如何使用机器学习套件 SDK 在示例 Android 或 iOS 应用中运行此模型。
所需条件
对于 Android 应用
- 最新版本的 Android Studio (v3.4+)
- 带有 Play 商店的 Android Studio 模拟器或 Android 实体设备 (v5.0+)
- 使用 Kotlin 进行 Android 开发的基础知识
对于 iOS 应用
- 最新版本的 XCode (v10.2+)
- iOS 模拟器或 iOS 实体设备 (v9.0+)
- CocoaPods
- 具备使用 Swift 进行 iOS 开发的基础知识
2. 设置
下载代码和训练数据集
下载包含此 Codelab 源代码和训练数据集的 zip 归档文件。将归档解压缩到本地机器。
创建 Firebase 控制台项目
- 前往 Firebase 控制台。
- 选择新建项目,然后将项目命名为“机器学习套件 Codelab”。
设置 Android 应用
- 将 Android 应用添加到 Firebase 项目中。Android 软件包名称:
com.google.firebase.codelab.mlkit.automl
- 下载
google-services.json
配置文件,并将其放入 Android 应用中的android/mlkit-automl/app/google-services.json
下。
设置 iOS 应用
- 将 iOS 应用添加到 Firebase 项目中。iOS 软件包 ID:
com.google.firebase.codelab.mlkit.automl
- 下载
GoogleService-Info.plist
配置文件,然后按照说明将其放入 iOS 应用 (ios/mlkit-automl/GoogleService-Info.plist
)。
3. 准备训练数据集
要训练模型来识别不同类型的对象,您必须准备一组图片,并为每个图片添加标签。我们创建了一个归档,其中包含知识共享许可的花卉照片,供您在此 Codelab 中使用。
该数据集会打包一个名为 flower_photos.zip
的 ZIP 文件,该文件包含在您在上一步中下载的 ZIP 归档文件中。
探索数据集
如果提取 flower_photos.zip
文件,您将看到数据集包含 5 种花卉的图片:蒲公英、雏菊、郁金香、向日葵和玫瑰,这些图片被整理到以花朵命名的文件夹中。这是一种创建训练数据集以提供给 AutoML 并训练图片分类模型的便捷方法。
此训练数据集中每种花卉类型有 200 张图片。每个类别至少需要 10 张图片来训练模型。不过,训练图片越多,通常生成的模型就越好。
4. 训练模型
上传训练数据集
- 在 Firebase 控制台中,打开您刚刚创建的项目。
- 选择机器学习套件 >AutoML。
- 您可能会看到一些欢迎界面。在适用的情况下,选择开始使用。
- 设置进度完成后,选择添加数据集,然后将其命名为“Flowers”。
- 在模型目标中,选择单标签分类,因为训练数据只包含每张图片一个标签。
- 选择创建。
- 上传您在上一步中下载的
flower_photos.zip
文件,以导入花卉训练数据集。 - 等待导入任务完成,这可能需要几分钟。
- 现在您可以确认数据集是否已正确导入。
- 由于训练数据集中的所有图片均已添加标签,您可以继续训练模型。
训练图片分类模型
由于我们的模型将在计算能力和存储空间有限的移动设备上运行,因此我们不仅要注意模型的准确性,还要注意其大小和速度。模型准确率、延迟时间(即对图像进行分类所需的时间)和模型大小始终存在权衡取舍。一般来说,准确率越高,模型的大小越大,对图像进行分类所需的时间也越长。
AutoML 为您提供了多个选项:您可以选择针对准确率进行优化,针对延迟时间和模型大小进行优化,或者在两者之间取得平衡。您还可以选择允许模型训练多长时间。较大的数据集需要训练更长时间。
如果您想自行训练模型,请按以下步骤操作。
- 选择训练模型。
- 选择通用选项和 1 个计算小时训练时间。
- 等待训练任务完成一段时间(可能需要几个小时)。
- 训练任务完成后,您将看到关于训练后模型表现的评估指标。
5. 在移动应用中使用该模型
准备工作
- 此 Codelab 包含 Android 和 iOS 示例应用,其中演示了如何使用我们之前在移动应用中训练的图片分类模型。这两个应用的功能类似。您可以选择自己比较熟悉的平台。
- 在继续之前,请确保您已下载示例应用,并在第 2 步中对其进行了配置。
- 此外,请确保您的本地环境已设置为能够针对您选择的平台 (Android/iOS) 构建应用程序。
下载图片分类模型
- 如果您在上一步中训练了模型,请选择下载以获取模型。
- 如果您未训练模型或训练任务尚未完成,则可以使用示例应用中包含的模型。
将模型添加到示例应用
您只需将模型添加到示例应用,它们便可开箱即用。如需查看如何将机器学习套件 AutoML 集成到应用的完整指南,请参阅我们的文档(Android 版、iOS 版)。与机器学习套件 SDK 交互的代码分别位于 ImageClassifier.kt
和 ImageClassifier.swift
文件中,因此您可以从这里开始探索应用的工作原理。
您可以通过以下两种方式部署模型:本地部署和远程部署。
- 本地模型主要用于将图片分类模型捆绑到应用二进制文件中,不过您也可以提供本地存储空间中保存的模型。采用捆绑销售后,用户从 App Store / Play 商店下载您的应用后,即可立即使用该模型,而且无需互联网连接也可使用。
- 远程模型是指该模型托管在 Firebase 上,并且仅在用户首次需要时才会下载到用户的设备上。之后,该模型也可离线使用。
Android 应用
- 打开 Android Studio。
- 导入
android/mlkit-automl/
下的 Android 应用 - (可选)提取您下载的模型,并将其内容复制到示例应用中包含的模型上。
- 现在,点击 Android Studio 工具栏中的“Run”(),验证其可以识别不同类型的花卉!
iOS 应用
- 打开终端并前往
ios/mlkit-automl/
文件夹 - 运行
pod install
以通过 Cocoapods 下载依赖项 - 运行
open MLVisionExample.xcworkspace/
以在 Xcode 中打开项目工作区。 - (可选)提取您下载的模型,并复制其内容,覆盖位于
ios/ml-automl/Resources/automl/
下的示例应用中的模型 - 现在,点击 Xcode 工具栏中的“Run”(),并验证它能否识别不同类型的花!
6. (可选)使用远程模型
借助机器学习套件的远程模型,您无需在应用二进制文件中添加 Tensorflow Lite 模型,但可以在需要时从 Firebase 中按需下载该模型。与本地模型相比,远程模型具有以下几个优势:
- 缩减应用二进制文件
- 能够在不更新应用的情况下更新模型
- 使用一个模型的多个版本进行 A/B 测试
在此步骤中,我们将发布一个远程模型,并在示例应用中使用该模型。请确保您已完成此 Codelab 第 4 步中的模型训练。
发布模型
- 前往 Firebase 控制台。
- 选择“机器学习套件 AutoML Codelab”创建项目
- 选择机器学习套件 >AutoML。
- 选择“花”数据集。
- 确认训练任务已完成,然后选择模型。
- 选择发布,并将其命名为“mlkit_flowers”。
使用远程模型识别花卉
示例应用配置为使用远程模型(如果可用)。发布远程模型后,您只需重新运行应用即可触发模型下载。您可以通过查看“Source”值。请参阅“问题排查”部分。
问题排查
如果示例应用仍在使用本地模型,请验证代码中远程模型名称的设置是否正确。
Android 应用
- 前往
ImageClassifier.kt
并找到此代码块。
val remoteModel = FirebaseRemoteModel.Builder(REMOTE_MODEL_NAME).build()
- 验证代码中设置的模型名称是否与您之前通过 Firebase 控制台发布的模型名称相匹配。
- 现在,点击 Android Studio 工具栏中的“Run”() 以重新运行应用。
iOS 应用
- 前往
ImageClassifier.swift
并找到此代码块,
return RemoteModel(
name: Constant.remoteAutoMLModelName,
allowsModelUpdates: true,
initialConditions: initialConditions,
updateConditions: updateConditions
)
- 验证代码中设置的模型名称是否与您之前通过 Firebase 控制台发布的模型名称匹配
- 现在,点击 Xcode 工具栏中的“Run”() 以重新运行应用。
7. 恭喜!
您已通过 AutoML 用自己的训练数据训练图片分类模型,然后通过机器学习套件在移动应用中使用该模型。
请参阅我们的文档,了解如何将机器学习套件中的 AutoML Vision Edge 集成到您自己的应用中。
您还可以试用我们的机器学习套件示例应用,了解 Firebase 机器学习套件的其他功能。
Android 示例
iOS 示例