TensorFlow Lite 助你从原型走向产品
2020 年 4 月 14 日
Khanh LeViet 发布,开发者拥护者

TensorFlow Lite 是在边缘设备上运行 TensorFlow 模型推断的官方框架。TensorFlow Lite 已部署在全球超过 40 亿台边缘设备上,支持 Android、iOS、基于 Linux 的 IoT 设备和微控制器。

自 2017 年底首次发布以来,我们一直在改进 TensorFlow Lite,使其功能强大,同时对所有开发者来说易于使用,包括从机器学习专家到刚开始了解机器学习的移动开发者。

在本博客中,我们突出一些近期发布,它们会让你更轻松地推进流程,从创建设备使用案例原型到部署到生产。
如你喜欢视频格式,可以查看 TensorFlow DevSummit 2020 的谈话


原型:使用最先进的模型快速启动

由于机器学习是一个发展十分迅速的领域,在投入资源构建一项功能之前了解当前技术可做什么非常重要。我们有一个预训练的 模型 存储库和实现了这些模型的示例应用程序,这样您无需编写任何代码即可在真实设备上试用 TensorFlow Lite 模型。然后,您可快速将这些模型集成到您的应用程序中,构建原型并测试用户的体验方式,而无需在培训自己的模型上花费时间。

我们发布了几种新的预训练模型,包括 问答 模型和 风格迁移 模型。



我们还致力于将来自研究团队的更多先进模型引入 TensorFlow Lite。最近,我们启用了三种新的模型架构: EfficientNet Lite论文)、MobileBERT论文)和 ALBERT Lite论文)。
  • EfficientNet Lite 是一款新颖的图像分类模型,通过减少几个数量级的计算和参数,实现了先进的准确性。它经过优化,适用于 TensorFlow Lite,支持量化,精度损失可以忽略不计,并完全受 GPU 代理支持,从而可以进行更快的推理。在我们的 博文中了解详情。
    Pixel 4 CPU 上的基准测试,4 个线程,2020 年 3 月
  • MobileBERT 是流行 BERT论文)模型的优化版本,在各种 NLP 任务上实现了先进的准确性,包括问答、自然语言推理等。MobileBERT 比 BERT 快约 4 倍,体积更小,但保持了类似的准确性。
  • ALBERT 是 BERT 的另一个轻量级版本,该版本针对模型大小进行了优化,同时保持准确性。ALBERT Lite 是 ALBERT 的 TensorFlow Lite 兼容版本,其体积比 BERT 小 6 倍,比 MobileBERT 小 1.5 倍,而延迟与 BERT 持平。

Pixel 4 CPU 上的基准测试,4 个线程,2020 年 3 月
模型超参数:序列长度 128,词表大小 30K

开发模型:无需机器学习专业知识即可为您的数据集创建模型

在我们将先进的研究模型引入 TensorFlow Lite 时,我们还希望让您更容易根据自己的用例定制这些模型。我们很高兴地宣布推出 TensorFlow Lite 模型制作器,这是一款易于使用的工具,可通过迁移学习将先进的机器学习模型调整到您的数据集。它用直观的 API 封装了复杂的机器学习概念,以便每个人都可以在没有任何机器学习专业知识的情况下开始使用。仅需 4 行代码,即可训练一项先进的图像分类
data = ImageClassifierDataLoader.from_folder('flower_photos/')
model = image_classifier.create(data)
loss, accuracy = model.evaluate()
model.export('flower_classifier.tflite', 'flower_label.txt', with_metadata=True)
Model Maker 支持 TensorFlow Hub 上提供的多款先进模型,包括 EfficientNet-Lite 模型。如果您想获得更高的准确度,只需更改一行代码即可切换到不同的模型架构,同时保留您的训练管道的其余部分。
# EfficinetNet-Lite2.
model = image_classifier.create(data, efficientnet_lite2_spec)

# ResNet 50.
model = image_classifier.create(data, resnet_50_spec)
Model Maker 当前支持两个用例:图像分类(教程)和文本分类(教程),更多计算机视觉和 NLP 用例即将推出。

开发模型:附加元数据以实现无缝模型交换

TensorFlow Lite 文件格式始终在其元数据中保存输入/输出张量形状。当模型创建者也是应用开发者时,此方法的效果很好。然而,随着设备机器学习生态系统的发展,这些任务越来越多地由组织内部的不同团队甚至组织间执行。为促进这些模型知识交换,我们在元数据中添加了新的字段。它们分属两大类
  1. 机器可读参数 - 例如规范化参数,如均值和标准差、类别标签文件。其他系统可以读取这些参数,以便生成包装器代码。您可以在下一部分看到此示例。
  2. 人类可读参数 - 例如模型描述、模型许可。这可以向使用该模型的应用开发者提供关于如何正确使用该模型的关键信息 - 是否存在他们应该注意的优点或缺点?此外,许可之类的字段在决定是否可以使用某个模型时至关重要。将此附加到模型可以显著降低采用障碍。
为了加强这一工作,TensorFlow Lite Model Maker 创建的模型和 TensorFlow Hub 上的图像相关 TensorFlow Lite 模型已附加其元数据。如果您正在创建自己的模型,您可以附加元数据,以便更轻松地共享模型。
# Creates model info.
model_meta = _metadata_fb.ModelMetadataT()
model_meta.name = "MobileNetV1 image classifier"
model_meta.description = ("Identify the most prominent object in the "
                          "image from a set of 1,001 categories such as "
                          "trees, animals, food, vehicles, person etc.")
model_meta.version = "v1"
model_meta.author = "TensorFlow"
model_meta.license = ("Apache License. Version 2.0 "
                      "http://www.apache.org/licenses/LICENSE-2.0.")
# Describe input and output tensors
# ...

# Writing the metadata to your model
b = flatbuffers.Builder(0)
b.Finish(
    model_meta.Pack(b),
    _metadata.MetadataPopulator.METADATA_FILE_IDENTIFIER)
metadata_buf = b.Output()
populator = _metadata.MetadataPopulator.with_model_file(model_file)
populator.load_metadata_buffer(metadata_buf)
populator.load_associated_files(["your_path_to_label_file"])
populator.populate()
有关我们如何填充 MobileNet v1 元数据的完整示例,请参阅此指南

开发应用:自动从模型生成代码

代码生成器可以使用元数据的机器可读部分来生成包装器代码,从而无需复制和粘贴容易出错的样板代码才能将 Bitmap 这样的类型对象转换为 ByteArray,再将其馈送给 TensorFlow Lite 解释器。

您可以使用我们为 Android 构建的第一个代码生成器来生成模型包装器。我们还在将此工具集成到 Android Studio 中。

开发应用:使用 benchmark 和分析工具了解性能

创建模型后,我们希望检查它在移动设备上的性能表现。TensorFlow Lite 提供 基准工具 以测量模型的性能。我们已添加使用所有运行时选项运行基准的支持,包括在 GPU 或其他受支持的硬件加速器上运行模型、指定线程数等等。您还可以获得单次操作粒度的推理延迟细分,以识别最耗时的操作并优化您的模型推理。

将模型集成到您的应用程序后,您可能会遇到其他性能问题,需要借助平台提供的性能分析工具。例如,在 Android 上,人们可以通过各种 跟踪工具 来调查性能问题。我们在 Android 上推出了 TensorFlow Lite 性能跟踪模块,可帮助探测 TensorFlow Lite 内部。它已默认安装在我们的夜间发布中。通过跟踪,人们可以查明推理期间是否存在资源争用。请参阅 我们的文档 了解更多关于如何在 Android 基准工具的上下文中使用该模块的信息。

我们将继续改进 TensorFlow Lite 性能工具,以使其更直观、更有助于测量和调整各种设备上的 TensorFlow Lite 性能。

部署:轻松扩展到多个平台

如今,大多数应用程序需要支持多种平台。这就是我们构建 TensorFlow Lite 以在平台之间无缝工作的缘故:Android、iOS、Raspberry Pi 和其他基于 Linux 的 IoT 设备。所有 TensorFlow Lite 模型都可以在任何官方支持的平台上开箱即用,以便您可以专注于创建优秀的模型,而不用担心如何将模型适应不同的平台。

每个平台都有自己的硬件加速器,可用于加快模型推理。TensorFlow Lite 已支持在 Android 上为 NNAPI、iOS 和 Android 上的 GPU 运行模型。我们很高兴能增加更多硬件加速器
  • 在 Android 上,我们已经添加对 高通 Hexagon DSP 的支持,该处理器现已被数百万台设备采用。这使开发人员能够在 Android 8.1 以下且 Android NN API 不可用的旧版 Android 设备上利用 DSP。
  • 在 iOS 上,我们已推出 CoreML 代理 以为 TensorFlow Lite 模型在 Apple 的神经引擎上运行提供支持。
此外,我们将继续改进现有支持平台上的性能,您可以在下方的图表中看到 2019 年 5 月和 2020 年 2 月之间的性能比较。您只需升级到最新版本的 TensorFlow Lite 库即可从这些改进中受益。
Pixel 4 - 单线程 CPU,2020 年 2 月

未来工作

在接下来的几个月内,我们将致力于支持更多的用例并改进开发人员体验
  • 持续发布最新的最先进的设备模型,包括对 BERT 系列模型以执行 NLP 任务和新的视觉模型更好的支持。
  • 发布新的教程和示例,展示更多用例,包括如何在移动设备上使用 C/C++ API 进行推理。
  • 增强 Model Maker 以支持更多任务,包括对象检测和若干个 NLP 任务。我们将在 NLP 任务中添加 BERT 支持,例如问答。这将让机器学习专业知识有限的开发人员通过迁移学习构建最先进的 NLP 模型。
  • 扩展元数据和代码生成工具以支持更多用例,包括对象检测和更多 NLP 任务。
  • 启动更多平台集成以提供更简单的端到端体验,包括与 Android Studio 和 TensorFlow Hub 更出色的集成。

反馈

我们致力于不断改进 TensorFlow Lite,期待看到您使用 TensorFlow Lite 构建的产品,以及听取您的反馈。与我们直接分享您的用例,或使用哈希标签 #TFLite 和 #PoweredByTF 在 Twitter 上分享。要报告错误和问题,请在GitHub上与我们联系。

致谢

感谢 Amy Jang、Andrew Selle、Arno Eigenwillig、Arun Venkatesan、Cédric Deltheil、Chao Mei、Christiaan Prins、Denny Zhou、Denis Brulé、Elizabeth Kemp、Hoi Lam、Jared Duke、Jordan Grimstad、Juho Ha、Jungshik Jang、Justin Hong、Hongkun Yu、Karim Nosseir、Khanh LeViet、Lawrence Chan、Lei Yu、Lu Wang、Luiz Gustavo Martins、Maxime Brénon、Mia Roh、Mike Liang、Mingxing Tan、Renjie Liu、Sachin Joglekar、Sarah Sirajuddin、Sebastian Goodman、Shiyu Hu、Shuangfeng Li、Sijia Ma、Tei Jeong、Tian Lin、Tim Davis、Vojtech Bardiovsky、Wei Wei、Wouter van Oortmerssen、Xiaodan Song、Xunkai Zhang、YoungSeok Yoon、Yuqi Li、Yi Zhou、Zhenzhong Lan、Zhiqing Sun 等。
下一篇
How TensorFlow Lite helps you from prototype to product

由开发者倡导者Khanh LeViet发布

TensorFlow Lite 是在边缘设备上使用 TensorFlow 模型运行推理的官方框架。TensorFlow Lite 已在全球 40 多亿台边缘设备上部署,支持 Android、iOS、基于 Linux 的物联网设备和微控制器。

自 2017 年末首次发布以来,我们一直在改进 TensorFlow Lite 以使其更稳健,同时保持其易用性...