https://blog.tensorflowcn.cn/2019/12/example-on-device-model-personalization.html
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8Ry3mIRwvSC71u52LEpb0i26vhZHX7VbagjiP_7FIB0EzbSb3XD5i72gsZof2tPTWVkS2g80xrd_-_50uktgZ44qRsHR95rMRFGxITATKHvClTrLnECtRSqFaselGlUuHMmgn7JCU8eI/s1600/imageLikeEmbed.png
作者:Pavel Senchanka,谷歌软件工程实习生
TensorFlow Lite 是一款业界领先的用于设备上机器学习模型推理的解决方案。虽然 TensorFlow Lite 的完整训练解决方案仍在开发中,但我们很高兴与您分享一个新的设备上迁移学习示例。这说明了一种在设备上个性化机器学习模型的方法,您可以立即使用它。让我们深入探讨迁移学习可以解决的问题以及它的工作原理。
为什么个性化机器学习有用
如今,许多问题的机器学习解决方案都依赖于大量的训练数据。图像识别、目标检测、语音和语言模型经过精心训练,使用高质量数据集,以便它们尽可能通用和无偏见。这种规模解决了许多问题,但它并没有针对单个用户的需求进行定制。
假设您希望通过调整模型来满足用户的需求,获得最佳的用户体验。将用户数据发送到云端以训练模型需要非常小心,以防止潜在的隐私泄露。将数据发送到中央服务器进行训练并不总是切合实际的——电源、数据上限和隐私等问题可能很麻烦。但是,直接在设备上进行训练是一种具有许多优势的强大方法:隐私敏感数据保留在设备上,因此它节省了带宽,并且可以在没有互联网连接的情况下工作。
这带来了挑战:训练可能需要大量的样本数据,而这很难在设备上获得。从头开始训练深度网络可能需要在云端花费几天时间,因此不适合在设备上进行。与其从头开始训练全新的模型,我们可以通过迁移学习过程重新训练已经训练过的模型,使其适应类似的问题。
什么是迁移学习?
迁移学习是一种技术,它涉及使用预训练模型完成一项“数据丰富”的任务,并重新训练模型部分层(通常是最后一层)来解决另一项“数据贫乏”的任务。
例如,您可以使用一个在 ImageNet 上预先训练的一组类别上预训练的图像分类模型(例如 MobileNet),并重新训练最后几层以完成另一个任务。迁移学习不仅限于图像;您也可以将类似的技术应用于文本或语音。
|
这幅图说明了传统机器学习与迁移学习之间的概念差异。 |
使用迁移学习,即使数据有限且计算资源不足,您也可以轻松地在设备上训练个性化模型,同时保护用户隐私。
在您的 Android 设备上训练图像分类器
我们发布的示例项目包含一个 Android 应用程序,该应用程序可以实时学习对相机图像进行分类。训练是在设备上进行的,方法是拍摄不同目标类别的样本照片。
该应用程序在量化的 MobileNetV2 模型上使用迁移学习,该模型在 ImageNet 上预先训练,最后几层被可训练的 Softmax 分类器替换。您可以训练最后几层以识别任何四个新类别。准确率取决于类别的“难易程度”。我们观察到,即使只有几十个样本,也足以获得良好的结果。(将其与拥有 130 万个样本的 ImageNet 相比!)。
该应用程序可以在任何更新的 Android 设备(5.0+)上运行,因此我们鼓励您尝试一下。发布的示例包括与 Android Studio 兼容的项目配置。要运行它,只需在 Android Studio 中导入项目,连接您的设备,然后单击“运行”。项目
README 文件包含更详细的说明。使用 #TFLite、#TensorFlow 和 #PoweredByTF 与我们分享您的体验!
使用我们的迁移学习管道解决您自己的任务
新的 GitHub 示例包含一组易于重用的工具,使创建和使用您自己的可个性化模型变得容易。该示例包含三个不同的独立部分,每个部分负责迁移学习管道中的一个步骤。
转换器
要为您的任务生成迁移学习模型,您需要选择两个将构成它的模型
- 通常是深度神经网络,在通用的数据丰富任务上预先训练。
- 将基本模型生成的特征作为输入并从这些特征中学习以解决目标(个性化)任务的模型。这通常是一个更简单的网络,包含几个全连接层。
您可以在 TensorFlow 中定义您的模型,或者使用转换器附带的一些方便快捷方式。特别是,
SoftmaxClassifier
是一个包含一个全连接层和一个 Softmax 激活的头部模型的快捷方式,它经过专门优化,可以更好地与 TensorFlow Lite 协同工作。
迁移学习转换器提供 CLI 和 Python API,因此您可以从程序或笔记本中使用它。
Android 库
迁移学习转换器生成的迁移学习模型不能直接与 TensorFlow Lite 解释器一起使用。需要一个中间层来处理模型的非线性生命周期。我们目前只提供此中间层的 Android 实现。
Android 库作为示例的一部分托管,但它位于独立的 Gradle 模块中,因此可以轻松地集成到任何 Android 应用程序中。
要详细了解迁移学习管道,请查看
README 中的详细说明。
未来工作
将来迁移学习管道的演变可能会与 TensorFlow Lite 中完整训练解决方案的开发相结合。今天,我们以 GitHub 上的一个单独示例的形式提供迁移学习管道,将来我们计划支持完整训练。然后,迁移学习转换器将被改造成生成一个能够在没有其他运行时库的情况下运行的单个 TensorFlow Lite 模型。
感谢您的阅读!请在
TensorFlow Lite Google Group 中告诉我们您使用它完成的任何项目。
致谢
这个项目是团队合作的成果,感谢 Yu-Cheng Ling 和 Jared Duke 指导我完成整个过程,Eileen Mao 和 Tanjin Prity(我的实习生同事),以及谷歌 TensorFlow Lite 团队的其他人。