TensorFlow Mobile 简介
TensorFlow 设计之初就考虑了移动平台并针对 Android 和 iOS 等移动平台提供了良好的深度学习解决方案。此教程将帮助你了解如何在移动端使用机器学习,以及如何将 TensorFlow 有效且高效的集成到移动应用中。
关于此教程
此教程面向已经具备一个能够在桌面环境成功运行的 TensorFlow 模型、希望将其集成到移动应用而无法使用 TensorFlow Lite 的开发者。你将面临以下挑战:
- 理解如何在移动端使用 TensorFlow
- 为你所在的平台构建 TensorFlow
- 将 TensorFlow 集成到你的应用中
- 为移动端部署准备模型文件
- 优化访问延迟、内存使用、模型文件的大小及二进制文件的大小。
移动端机器学习的常见用例
为什么要在移动端运行 TensorFlow
传统意义上来说,深度学习被认为是数据中心和大规模 GPU 集群的产物。但是通过网络连接来发送设备能够访问的全部数据的成本极高且相当耗时。在移动平台上运行机器学习可以在无需等待网络回传交付的情况下让交互性极高的应用成为可能。
下面是一些常见的设备上的深度学习常见用例:
语音识别
简易语音识别
图像识别
能够理解相机图像的移动端应用是非常有用的。如果你的用户正在拍照,那么识别他们的拍摄内容可以帮助你的相机应用对照片进行适当的过滤,或者将照片标记起来方便查找。对于嵌入式应用而言,由于你还可以使用图像传感器来检测各种有趣的状况,比如在野外发现濒临灭绝的动物和 报告火车的晚点时间
TensorFlow 内置了几个用于图像物体类型识别的预训练的模型代码,他们都可以在移动平台上运行。你可以尝试一下我们的 TensorFlow for Poets 和 Tensorflow for Poets 2: 移动端优化版 来了解如何使用预训练模型从而运行一些高效且轻量的模型,从而先教会它识别特定物体,再在移动端进行优化。
目标定位
有时,知道一个物体是什么以及它们在图像中的位置是相当重要的。很多增强现实的应用都是它们的产物。例如,引导用户修复其无线网络或提供一些信息覆盖的增强现实功能。嵌入式应用经常需要对经过它们的物体进行统计,无论是农作物中的害虫、还是经过路灯的行人亦或者汽车和自行车。
TensorFlow 提供了一种预训练模型,用于在图像中检测物体周围绘制边框,并能根据时间的推移来持续追踪目标。追踪目标其实对于那些需要持续计算图中出现的对象的个数相当重要,因为它为你提供了新目标出现或离开场景时的信息。我们在 Github 上提供了一些可以用于 Android 的代码,还有一些更加 一般的目标检测模型 。
手势识别
通过手或其他手势来控制应用是非常有用的,我们可以进行图像中识别或分析加速度传感器数据。创建这些模型已经超出了本教程的范围,但 TensorFlow 是部署他们的有效方式。
光学字符识别
谷歌翻译移动端软件的实时相机翻译就是一个非常好的展示如何高效的在移动设备上进行交互式文本检测的例子。
识别图像中的文字包含多个步骤。首先我们需要确定文本所在区域,这是目标定位问题的一种形式,我们可以用类似的技术来解决。一旦你找到了文本所在的区域,你就需要将其解释并转换为为字母,然后通过语言模型来辅助猜测它们所代表的单词。估计出现什么字母的最简单的方法就是讲文本分割成一个个单一的字母,然后简单的将神经网络应用在每个字母的边界框上。尽管你可能希望高分辨率的输入,但其实有些 MNIST 的模型就能获得相当好的结果,你可以在 TensorFlow 的教程中找到它们。一个更好的方案是选择使用一个 LSTM 模型来处理一整行的文字,模型本身就能够将片段分隔成不同的字符。
翻译
一个非常重要的场景就是在没有网络连接的情况下,你依然希望能准确的将一种语言翻译成另一种语言。深度神经网络在这类任务中相当高效,你可以在不同的文献中找到很多不同类型的模型。通常它们都是序列到序列的循环模型,你可以运行单个计算图来完成整个序列的转换,而无需分阶段进行语法分析。
文本分类
如果你想要根据用户输入或阅读的内容向用户推荐相关提示,那么文本理解对这种任务来说相当重要。这就是分本分类的动机。文本分类是涵盖了从情感分析到主题发现的全部内容的统称。你可能会有自己想要使用的类别标签,因此最好的方式是看看 Skip-Thoughts 的例子再开始用自己的样本来进行训练。
语音合成
合成后的语音是给与用户反馈与辅助的最好方式之一, WaveNet 等最新研究进展表明,深度学习也可以提供非常自然的合成语音。
移动端机器学习与云服务
上面这些用例给出了设备上的网络可以作为云服务的想法。云服务在受控的环境下具备相当大的计算能力,但设备上运行则更加致力于提供更高的交互性。在云服务不可用或云容量有限的情况下,你可以提供离线应用的体验或者通过处理少量的云服务负载来处理设备上出现的一些简单的情况。
在设备上进行计算当然也意味着可以指明何时能够切换到云服务上。语音中的触发词检测就是一个相当好的例子。由于设备能够不断监听关键字,因此一旦识别出这些关键字,就会触发大量基于云服务的语音识别流量。如果没有设备上的这种组件,这种应用是不可能的。而且,这种模式还能跨多个应用进行部署。识别传感器的输入对进一步处理能促使一些有趣的产品成为可能。
所需的软件与硬件
安装 TensorFlow
注意,我们为移动端 TensorFlow 提供的一些演示代码要求你对 TensorFlow 源码进行编译,因此你还需要使用除了 pip install
之外的方法来处理全部示例代码。
要尝试移动端代码,你需要一个设备来搭建 Android Studio 或 XCode 开发环境。
开始前的准备工作
在获得移动端解决方案之前你需要思考下面这些问题:
- 判断移动端机器学习能够解决你的问题
- 创建监督式数据集来定义你的问题
- 为问题选择一个高效的模型
我们将在下面的篇幅中详细讨论。
判断移动端机器学习能否解决你的问题
一旦你想出了你想要解决的问题的解决方法,那你就需要制定一个如何构建解决方案的计划。最重要的第一步是确保你的问题是技术上可行的,最好的方法就是让用户参与其中从而模拟这个问题。
举个例子,如果你想要使用语音指令来控制智能汽车,可以试着在设备上录制一些音频然后再反复听到底说了什么,看看你是否能够理解所说的内容。通常情况下,你就会发现一些在录制过程中存在的问题,比如由于发动机的声音太吵了亦或者说话人与录制设备的距离太远导致语音没有办法听清等,你应该在建模之前解决这些问题。
再举个例子,你把拍摄的照片发给别人看看他们能否对这个照片的内容进行分类。如果他们做不到这件事情(例如,尝试从照片中的食物估算出卡路里是不可能的,因为白色的汤汁看起来都一样),那么你就需要重新设计你的用户体验来处理这个问题。一个比较好的实践原则是:如果人都不能处理这个任务,那么很难训练一个比人做得更好的机器出来。
创建监督式数据集
在解决了使用场景的基本问题后,你需要创建一个带有标签的监督式数据集来定义你的问题。这个步骤非常重要,甚至比你选择哪种模型更加重要。由于模型只有在你监督训练良好的情况下才能表现的高效,所以你会希望这个数据集能够尽可能的表示你实际问题的场景。
同样地,花时间优化你标记数据的工具的效率和精确度也很重要。举个例子,如果你能够将一个网页界面上一个按钮替换成简单的键盘快捷键,你就能获得更高的工作效率。最初的时候你应该自己对数据集进行标记,这样便能了解到相关的困难和可能出现的错误,这样就能在修改标签或者处理数据的时候避免错误出现。一旦你和你的团队开始持续的对样本进行标注(即你基本上统一大部分的样本标签时),就可以尝试总结你的知识,并将它们交给其他外部的评估人员从而执行相同的过程。
选择一个高效的模型
下一步是选择一个高效的模型进行使用。如果别人已经实现了类似的你所需要的模型,那么你可以避免从零开始训练一个新的模型;我们在 Github 仓库 上保存了一些 TensorFlow 所实现的模型库,你可以先阅读是否有你所需要的模型。尽量从简单的模型入手,并竟可能早的开始使用,哪怕你搜集到的监督数据还很少,因为以后你能够在快速迭代的过程中获得更好的结果。对于一个算法而言,在数据集上获得相当好的效果却在实际情况下表现一般是相当常见的,这就是所谓的数据偏置导致的。以最快的速度搭建一个端到端的原型,从而才能构建一致的用户体验。
下一步
在 iOS 中构建 TensorFlow
如果您发现本页面存在错误或可以改进,请 点击此处 帮助我们改进。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论