TensorFlow Lite 在 DevSummit 2020 中有哪些新功能
2020 年 4 月 20 日
Khanh LeViet 发布,代表 TensorFlow Lite 团队的开发者宣传
诸如智能手机之类的边缘设备每年都变得更加强大,并且能够实现越来越多的设备上机器学习用例。 TensorFlow Lite 是在边缘设备上运行 TensorFlow 模型推断的官方框架。它在全球超过 40 亿台活跃设备上运行,在各种平台上运行,包括 Android、iOS 和基于 Linux 的物联网设备,以及裸机微控制器。

我们通过使 TensorFlow Lite 变得更快、更容易使用,不断推动设备上机器学习的极限。在这篇博文中,我们重点介绍了过去六个月内发布的最新 TensorFlow Lite 功能,直至 2020 年 3 月的 TensorFlow 开发者峰会

推动设备上机器学习的极限

启用最先进的模型

机器学习是一个快速发展的领域,新的模型每隔几个月就会打破最先进的记录。我们在使这些最先进的模型在 TensorFlow Lite 上良好运行方面付出了很多努力。例如,我们现在支持 EfficientNet-Lite (论文),这是一系列图像分类模型,MobileBERT (论文),以及 ALBERT-Lite (论文),BERT (论文) 的轻量级版本,支持多个 NLP(自然语言处理)任务。查看下面的一些性能基准测试。

EfficientNet-Lite

EfficientNet-Lite 是一系列图像分类模型,它们以少一个数量级的计算量和参数实现了最先进的准确性。这些模型针对 TensorFlow Lite 进行了优化,并进行了量化,从而导致推理速度更快,准确性损失可忽略不计,并且可以在 CPU、GPU 或 Edge TPU 上运行。在我们的 博文 中了解更多信息。
图:在 Pixel 4 CPU 上使用 4 个线程运行的仅整数量化模型。

MobileBERT 和 ALBERT-Lite

MobileBERT 和 ALBERT-Lite 是流行的 BERT 模型的优化版本,在各种 NLP 任务(包括问答、自然语言推理等)上取得了最先进的准确性。MobileBERT 比 BERT 快 4 倍,体积更小,但保留了类似的准确性。同时,ALBERT-Lite 比 BERT 小 6 倍,但比 MobileBERT 慢。
图:Pixel 4,Float32 问答模型,CPU 4 个线程

新的 TensorFlow Lite 转换器

我们推出了一个新的转换器,它可以支持更多模型并改善开发人员体验
  • 支持转换新类别的模型,包括 DeepSpeech V2、Mask R-CNN、Mobile BERT、MobileNetSSD 等等
  • 添加对函数式控制流的支持(在 TensorFlow 2.x 中默认启用)
  • 跟踪原始 TensorFlow 节点名称和 Python 代码,并在转换过程中发生错误时公开它们
  • 利用 MLIR,Google 的面向 ML 的尖端编译器技术,这使得更轻松地排查转换错误并扩展以适应功能请求
新转换器完全向后兼容,并且**从 TensorFlow 2.2 开始默认启用**,而旧转换器仍然可以通过标志使用。有关更多详细信息,请参阅 文档

对 Keras 的量化感知训练支持

量化感知训练 (QAT) 使您能够训练和部署具有量化性能和大小优势的模型 - 使您的模型缩小 4 倍并运行速度更快,同时保持准确性。您可以在一行代码中添加 QAT。
import tensorflow_model_optimization as tfmot

model = tf.keras.Sequential([
   ...
])
# Quantize the entire model.
quantized_model = tfmot.quantization.keras.quantize_model(model)

# Continue with training as usual.
quantized_model.compile(...)
quantized_model.fit(...)
以下是如何将 QAT 与原始浮点模型和训练后量化进行比较。
在我们的 博文 中了解更多信息。

跨平台更快的推理

更好的 CPU 性能

提高 CPU 性能一直是团队的主要优先事项,我们在最近几个月发布了许多实质性的 CPU 相关性能优化。作为这项工作的一部分,我们开发了一个优化的矩阵乘法库 (ruy),从头开始构建,以在移动环境中通常使用的 CPU 硬件和模型类别上提供更好的性能。从 TensorFlow 1.15 开始,此库默认针对所有 ARM 设备启用,并且已帮助在极其广泛的模型和用例中实现了**从 1.2 倍到 5 倍的延迟改进**。
Pixel 4 - 单线程 CPU,2020 年 2 月
我们计划在 TensorFlow 2.3 版本中发布一些额外的 CPU 优化,包括使用 训练后权重量化 的模型的**执行速度提高约 40%**,以及一个新的高度优化的浮点卷积内核库 (XNNPACK),它可以实现**所有关键浮点卷积模型的执行速度提高 20-50%**,这些模型由 TensorFlow Lite 支持。

使用新的硬件加速器委托实现更快的推理

TensorFlow Lite 确实是跨平台的,因此您只需训练一次模型,就可以在所有支持的平台上获得最佳性能。在过去的几个月中,我们添加了对在高通的 Hexagon DSP、苹果的 Core ML、使用 OpenCL 的 Android GPU 上运行推断的支持。

Hexagon DSP 是一种微处理器,可以在使用高通骁龙 SoC 的数百万台现代 Android 手机中找到。新的 TensorFlow Lite Hexagon 委托利用 DSP 实现性能提升,对于 MobileNet 和 Inceptionv3 等模型,与 CPU 相比,性能提升幅度在 3-25 倍之间,同时比 CPU 和 GPU 更节能。在我们的 博文 中了解更多信息。

Core ML 是苹果设备上提供的机器学习框架,并提供 API 以在苹果的神经引擎上运行 ML 模型。新的 TensorFlow Lite Core ML 委托允许在 Core ML 和神经引擎(如果可用)上运行 TensorFlow Lite 模型,以实现更快的推断,并提高功耗效率。在 iPhone XS 及更新机型上(神经引擎可用),我们观察到各种计算机视觉模型的性能提升幅度从 1.3 倍到 11 倍。在我们的 博文 中可以找到更多详细信息。

OpenCL 是一个用于编写跨异构平台执行程序的框架。我们最近在 TensorFlow Lite 的 GPU 委托 中添加了对 OpenCL 的支持,在各种计算机视觉模型上实现了大约比 CPU 快 4-6 倍,大约比 OpenGL 快 2 倍。以下是 OpenCL 后端性能在 Pixel 4 上的快照。

Android 性能瓶颈分析器

TensorFlow Lite on Android 支持对内部事件(包括操作调用)进行工具化记录,这些事件可以由 Android 的 系统跟踪 跟踪。新的分析数据可以让您识别性能瓶颈。

以下是一些您可以从分析器中获得的见解示例,以及提高性能的潜在解决方案
  • 如果可用 CPU 核心数量小于推断线程数量,则 CPU 调度开销会导致性能低下。您可以重新安排应用程序中的其他 CPU 密集型任务,以避免与模型推断重叠,或者调整解释器线程数量。
  • 如果操作没有完全委托,则模型图的某些部分将在 CPU 上执行,而不是在预期的硬件加速器上执行。您可以用类似的受支持操作替换不受支持的操作。
此功能现已在 TensorFlow Lite Android 库的 nightly build 中提供。更多详细信息请访问 此处

使 ML 更易于使用

无需 ML 专业知识即可创建模型

TensorFlow Lite 的 Model Maker 使您能够使用迁移学习将最先进的机器学习模型调整到您的数据集。它通过一个直观的 API 来包装复杂的机器学习概念,缩短了初学者开发人员的学习曲线。例如,您只需四行代码即可训练一个最先进的图像分类模型。
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 模型。它目前支持图像分类 (教程) 和文本分类 (教程),更多计算机视觉和 NLP 用例即将推出。

使用元数据简化模型共享

传统上,使用 TensorFlow Lite 进行推断意味着使用原始张量。这带来了两个障碍
  1. 使用 TensorFlow Lite 模型的使用者需要确切地知道张量形状的含义(例如 1 x 224 x 224 x 3)。它是位图吗?如果是,它是红、蓝、绿通道还是其他方案?如果创建模型的团队与使用模型的团队不同,就会出现问题。
  2. 需要使用大量容易出错的样板代码来将高级数据类型(例如 Bitmap)转换为 RGB float 数组或 ByteArray,才能使用它。
为了解决第一个问题,我们在 TensorFlow Lite 中添加了对 模型元数据支持,使模型创建者可以使用类型化对象描述模型的输入和输出。除了位图大小或颜色通道等基本信息外,我们还包含了平均值和标准差等信息,以传达给模型使用者,以便应用适当的规范化。

为了解决第二个样板代码问题,我们创建了 Android 代码生成器,它读取 TensorFlow Lite 元数据并创建适当的包装代码来调整大小、规范化以及从 ByteArray 转换到 ByteArray。这意味着您现在可以使用熟悉的高级对象与 TensorFlow Lite 模型交互。
// 1. Initializing the Model    
MyClassifierModel myImageClassifier = new MyClassifierModel(activity);

// 2. Setting the input with a Bitmap called inputBitmap
MyClassifierModel.Inputs inputs = myImageClassifier.createInputs();
inputs.loadImage(inputBitmap));

// 3. Running the model
MyClassifierModel.Outputs outputs = myImageClassifier.run(inputs);

// 4. Retrieving the result
Map labeledProbability = outputs.getProbability();
这目前是一个实验性功能,只支持基于图像的模型。我们已将元数据支持添加到 TensorFlow Hub 上的大多数 TensorFlow Lite 视觉模型以及 TensorFlow Hub图像分类模型制作器。未来,该项目将以三种方式扩展。
  1. 支持除图像以外的输入类型,以支持更多用例。
  2. 构建一个 Android Studio 插件,使使用更加容易。
  3. 添加 iOS 支持。

更多示例和学习资料。

我们在 CourseraUdacity 推出了两门在线课程,为 TensorFlow Lite 提供结构化的学习路径。这两门课程都为期四周,教授如何在 Android、iOS 和 IoT 设备上使用 TensorFlow Lite。

我们发布了新的示例应用程序,展示了如何使用预训练模型,包括 风格迁移问答等。
我们很高兴看到 TensorFlow Lite 社区的参与度。最近,一位成员收集了社区创建的预训练模型、示例和教程,并在 GitHub 上进行整理。欢迎贡献!

更好地支持微控制器。

官方支持 Arduino。

TensorFlow Lite for Microcontrollers 现在已作为官方 Arduino 库提供,这使得 在不到 5 分钟的时间内将语音检测部署到 Arduino Nano 变得容易。

更多 TensorFlow for Microcontrollers 优化。

我们正在与领先的行业合作伙伴合作,他们正在为其硬件架构编写优化的 TensorFlow Lite for Microcontrollers 内核实现。例如,Cadence 宣布了其对 TensorFlow for Microcontrollers 的支持,用于其 Tensilica HiFi DSP 系列。

谷歌如何使用 TensorFlow Lite

TensorFlow Lite 在 Google 内部广泛使用,用于我们的许多关键产品,包括 YouTube、Google Assistant 和 Google Photos。

Google Lens 团队分享了他们如何从基于服务器的模型迁移到基于客户端的设备上模型,以改善用户体验。



实时感知团队展示了如何构建机器学习管道以实时处理实时相机馈送。

接下来是什么

我们将在几个月内推出新功能和改进。
  • XNNPACK 集成,用于高度优化的浮点模型执行。这将显着提高跨平台的 CPU 推理速度。
  • 最新的设备上模型、更新的指南和示例,展示了更多用例,例如用于移动端推理的原生 C/C++ API。
  • 用于根据客户端模型中使用的操作来修剪二进制大小的附加工具,从而减少对客户端应用程序的大小影响。
  • 对 Model Maker 的增强,用于更多任务,例如对象检测或 NLP 任务。我们正在添加 BERT 支持,以支持新的 NLP 任务(例如问答),这将使没有 ML 经验的开发人员能够通过迁移学习来构建最先进的 NLP 模型。
  • 扩展元数据和代码生成工具以支持更多用例,包括对象检测和其他与 NLP 相关的任务,以及与 Android Studio 的更好集成。

要查看长期的 TensorFlow Lite 产品路线图,请查看我们的 网站
下一篇文章
 What’s new in TensorFlow Lite from DevSummit 2020

由 TensorFlow Lite 团队的开发者倡导者 Khanh LeViet 发布
边缘设备(如智能手机)每年都在变得越来越强大,并且支持越来越多的设备上机器学习用例。 TensorFlow Lite 是在边缘设备上运行 TensorFlow 模型推理的官方框架。它在全球超过 40 亿台活跃设备上运行,涵盖各种平台……