Register now for Android Dev Summit 2019!

使用机器学习技术构建更智能的应用

机器学习 (ML) 是一种编程技术,可让您的应用自动从经验中汲取教训并改进,而无需您明确对此进行编程。这尤其适合使用非结构化数据(如图像和文本)的应用,或者处理具有大量参数的问题(如预测哪支球队会获胜)。

Android 支持各种机器学习工具和方法。无论您是经验丰富的 Android 开发者还是初学者,下面这些机器学习资源都可帮助您取得最佳成效。

机器学习主要开发阶段

作为 Android 开发者,您将专注于机器学习模型的推断和部署。根据您的自身情况,您也可以参与模型的构建和训练。

机器学习设计

与其他技术类似,要将机器学习技术用作解决方案,需要产品经理、设计人员和开发者相互协作,共同设定产品目标、设计、构建和反复改进。在这一方面,Google 制作了两个指南:

构建和训练模型

机器学习模型需要经过训练才能执行特定任务,例如进行预测、分类或识别某些输入内容。您可以选择(以及自定义)现有模型,也可以从头构建模型。您可以在开发计算机上或云基础架构上创建和训练模型。

探索预训练模型

机器学习套件Google Cloud 中提供了预训练模型。有关详情,请参阅下一节。

了解如何使用 TensorFlow 创建自己的模型

如果您要深入地亲身体验开发工作,可以使用以下 TensorFlow 资源:

推断

推断是一种使用已经过训练的机器学习模型执行特定任务的过程。

Android 开发者需要做出的一个重要决策是,在设备上运行推断还是使用远程访问的云服务进行推断。以下是您在做此决策时应考虑的一些因素:

设备端推断基于云的推断
延迟 延迟低,可提升实时体验 异步通信和可用带宽可能会影响延迟
资源 特定设备的资源(如处理能力和存储空间)可能会限制性能 基于云的资源更强大,存储空间更充足
离线/在线 对于网络基础架构不佳或没有的情况,能够离线运行是一个加分项 需要网络连接
成本 电池用量、最终用户下载模型所用时间 最终用户的数据传输带宽,开发者的计算费用
隐私权 用户数据永远不会离开设备 数据可能会离开设备,可能需要采取额外的预防措施

下表显示了每种推断的可用开发选项:

设备端推断云端推断

机器学习套件

Google Cloud

在 Google Cloud 上训练自定义视觉模型,并在 Android 和其他边缘设备上运行生成的模型:

TensorFlow Lite

TensorFlow Lite 可用于交付经过训练的 TensorFlow 模型,并作为设备端解决方案使用:

机器学习套件

Google Cloud API

部署

部署是指打包和更新模型以供在 Android 上执行设备端推断时使用的流程。系统提供了三个选项:

将机器学习模型与 Android 应用一同打包
模型可以像任何其他资源一样与应用一同部署。更新模型时,也需要更新应用。您可以通过两种方式将机器学习模型与应用一同打包:
  • 将机器学习模型与 Android APK 一同打包 - 这是最常用的方法
  • Android App Bundle - 开发者可以仅针对设备架构 32/64 位包含相关版本。此外,假设机器学习功能可以动态加载
在运行时提供模型
这使您可以独立于应用更新模型,同时更轻松地进行 A/B 测试。您可以使用机器学习套件自定义模型功能提供自定义模型,也可以在您自己的基础架构中托管模型下载包。
结合使用这两者
开发者将初始版本的模型与 Android 应用一同打包的情况并不少见,这样,用户在将模型更新到新版本时,将无需等待模型下载。

对于部分预训练机器学习套件模型(即文本识别和条形码扫描),开发者可以使用 Google Play 服务提供的共享模型,从而缩减 APK 大小。

开发者故事

让不可能变成可能

有些应用在很多情况下都难以实现(例如可靠的条形码扫描),有些应用以前甚至无法实现(例如图像检测和文本情感),而将机器学习技术添加到 Android 应用中为此类应用的构建开辟了新途径。

Lose It!

Lose It! 是一款帮助减肥的卡路里跟踪应用。它可以记录您吃的所有食物,告诉您摄入了多少卡路里,从而帮助您减肥。Lose It! 使用机器学习套件文本识别 API,可在用户输入其库中没有的新食物时通过扫描营养成分标签提取数据。

PlantVillage

PlantVillage 可帮助农民检测木薯植物上的病害。宾夕法尼亚州立大学和国际热带农业研究所使用他们可在移动设备上离线运行的自定义 TensorFlow 模型,帮助农民检测植物病害的早期症状。

Fishbrain

Fishbrain 应用可提供本地渔业地图、进行预测,并连接着数百万垂钓者。Fishbrain 使用机器学习套件自定义模型来提供更新的自定义 TensorFlow Lite 模型。