高效终端设备视觉系统开发与优化

2021-03-02 10:07:59 浏览数 (1)

文 / 汪启扉

整理 / LiveVideoStack

大家好,我是来自Google Research的高级软件工程师汪启扉,首先感谢LiveVideoStack邀请我在此处演讲。今天,我的主题是高效终端设备机器学习的最新进展 。

本次演讲将包括五个主要部分。首先,我将简要介绍端上机器学习。其次我将讨论如何建立适合移动端的机器学习模型,在第三和第四部分 ,我将分别介绍适用于移动应用的端上机器学习优化,以及基于隐私保护的端上机器学习的最新研究。最后,我将讨论端上机器智能的未来工作的展望。

1.端上机器学习

1.1 什么是端上机器学习

得益于深度学习的巨大成功,我们周围的设备、机器、事物都变得越来越智能。智能手机、家庭助理、可穿戴设备等设备、自动驾驶汽车、无人机之类的机器,以及诸如电灯开关、家用传感器之类的机器,正在利用机器智能来支持自动翻译、自动驾驶、智能家居等应用。比如智能手机、家庭助理、可穿戴设备等;机器方面有自动驾驶汽车、无人机,生活中的器件包括电灯开关、家用传感器之类的机器 。这些机器都正在利用自动翻译、自动驾驶、智能家居等功能。用户可以随心所以地使用机器智能并享受其中。

早年,由于移动端上的计算资源非常有限,大多数机器智能都利用云计算实现。在基于云的机器智能中,源数据会发送到云端进行智能推理,然后将结果下载到本地设备。此类基于云和客户端的系统可能会遭受延迟、隐私和可靠性方面的困扰。不过最近,我们注意到将智能推理从云端迁移到边缘端以改善这些问题的趋势。

1.2 为什么我们需要端上机器学习

在基于云的机器智能应用中,用户和设备间的长交互延迟通常是由不稳定的网络带宽引起的。通过将机器智能转移到客户端可以提供稳定的低交互延迟。

机器智能需要访问私有用户数据,例如用户图片、文档、电子邮件、语音等。机器将所有数据上传到云中可能会引起隐私和安全问题。由于端上机器只能在本地设备上处理所有数据,因此可以保护用户私有数据免受恶意软件攻击。

最后,即使在网络不可用或云服务关闭的情况下,将智能计算移到端上可以保持智能服务始终可用。

因此,端上机器智能已成为智能和移动领域重点研究方向。通过隐私保护的云端计算可以很好地平衡延迟、可靠性、隐私和性能等问题。

1.3 端上推理

基本上,因此,端上智能是通过使用来自设备传感器(例如摄像头、麦克风、和所有其他传感器)的输入信号在设备上运行深度学习推理来实现。该模型完全在设备上运行而无需与服务器通信。

1.4 挑战

有限的计算资源

虽然应用终端设备机器学习显示出巨大优势,但仍然面临许多挑战。首要的挑战是有限的计算资源,在过去的几十年中,我们注意到了移动芯片组的计算能力遵循摩尔定律而不断提高。但是,与具有分布式计算系统的云集群相比,单台设备的计算资源仍然非常有限,无法满足新兴应用程序不断增长的计算需求。

有限的功率

如今,用户对设备的使用比以往任何时候都多,每款新手机都在不断提升电池容量并且支持快速充电功能。但是,设备的有限功率仍然是长续航时间的主要挑战。

设备过热

此外,高功耗通常导致设备过热,尤其是对于可穿戴设备,这会影响用户体验并引起安全隐患。

从实验数据中可以看出,机器学习使用的浮点计算会比整数计算需要更高的功耗。为了快速学习并降低功耗和内存的使用,我们必须优化机器智能模型以满足终端设备应用在功耗、内存和延迟上的限制。

2.建立适合移动端的机器学习模型

现在,让我们讨论如何建立适合移动端的智能模型。

2.1 模型效率

在深入探讨开发移动端智能模型的细节之前,我们先了解一下传统服务器端智能模型和移动端智能模型的性能数据。上图显示了模型大小和准确性之间的数据;而下图显示了模型准确性和延迟之间的数据。其中红色虚线框显示了传统智能模型的性能数据,蓝色虚线框显示的移动端智能模型。从图中可以看出就模型大小和推理延迟而言 Google Inceptiom等传统服务器端智能模型比MobileNet模型要繁重得多。因此,传统模型过于繁重,无法应用于移动应用。

2.2 MobileNet V1

2017年 谷歌发布了著名的MobileNnet端上深度学习架构,它的主要贡献之一是将标准卷积运算转换为逐通道卷积运算。如左图所示,逐通道卷积运算将标准卷积运算分解为两个单独的卷积运算:

第一步,它通过M个卷积内核对M个输入通道进行卷积;

第二步,它对第一步的输出进行1x1卷积,而不是通过其他N-1个不同的卷积运算组作为标准卷积运算对输入进行卷积 。

通过这样做可以使模型计算复杂度和参数数量减少约10倍,并使性能与Inception等最新服务器端智能模型保持一致。

此外,MobileNetmobilenetV1还通过可以控制全局比例系数来对模型大小进行等比例缩放。

2.3 MobileNet V3

2019年研究人员设计了一个全新的MobileNet V3平台。它通过硬件性能关联的模型结构搜索来构建新的MobileNetMobilenet模型。新平台通过将网络适应性和移动网络结构搜索融合在一起,并设置了具有目标延迟、 内存和功耗的目标函数来构建智能模型。

2.4 MobileNet 性能基准测试

如图所示,研究人员正在通过MobileNetmobilenetvV3和有效的神经体系结构搜索提升端上机器学习模型的性能。这些端上智能模型都达到了与最新服务器端智能模型相似的性能。但保持了较低的计算复杂度。更具体地说MobileNet V3以最低的计算复杂度限制实现了最高的准确性。这有些类似MobileNetmobilenet的体系结构已成为应用端上智能模型的参考和基准。

MLPerf

此外,我想向大家介绍机器学习性能基准测试平台MLPerf。这是一个开放的平台供研究人员发布智能模型在不同硬件平台上的最新性能基准,包括准确性、延迟、内存占用和功耗。

每项测试结果涵盖最常见的任务,包括在最流行的数据集上进行的图像分类、对象检测、图像分割和自然语言处理。基于这些基准,用户可以轻松查看,模型性能并为他们的应用选择合适的模型。

2.5 TFLite

另一方面,Google发布了端上智能的基础架构TFLite,并将其作为轻量级的机器学习库以及用于移动和嵌入式设备的工具。它已嵌入到TensorFlow生态系统内,开发人员可以通过内置转换器将训练后的TensorFlow模型转换为TFLite模型格式。转换后的TFLite模型可用于构建跨平台应用程序。

在Android系统中 ,Android神经网络API提供了本机接口用于运行TFLitetflite模型,并将解释器提供给开发人员,应用开发人员可以构建自定义的C 和 Java API以在设备上调用模型进行智能推断。在iosiOS系统中,用户可以通过C 直接调用解释器。

TFLite的推理速度更快

TFLite通过以下功能在终端设备机器学习中脱颖而出。首先,其统一的基于FlatBuffer的模型格式与不同平台兼容;其次,它为移动端优化了预融合激活和偏差计算;此外,它还提供了针对ARM上的NEON优化的内核从而显著提高了执行速度;最后,它还支持训练后量化。作为最流行的模型优化方法之一,模型量化将浮点系数转换为整数。通常,量化可以使模型大小减少4倍,并使执行时间加快10-50%。

从图中可以发现由TFLite自带量化工具量化的模型显著减少了类MobileNet模型和Inception V3模型的推理时间。此外,采用后期量化开发人员可以利用最新模型而无需从头开始重新训练模型。

模型压缩

最近TFLite还发布了一个综合库用于将传统的大型模型压缩为较小的模型供给终端设备情形,这被称为Learn2Compress。这项技术采用用户提供的预先训练的大型TensorFlow模型作为输入进行训练和优化 并自动生成尺寸更小、内存效率更高、能源效率更高、推理速度更快、准确性损失最小即用型端上智能模型。具体来说,模型压缩是通过删除对预测最无用的权重或操作(如低分数权重)实现。

它还引入了8位量化以及联合模型训练和模型蒸馏,以从大型模型中获得紧凑的小型模型。对于图像分类Learn2Compress可以生成小型且快速的模型并具有适合移动应用的良好预测精度。例如在ImageNet任务上Learn2Compress所获得的模型比Inception V3基准模型小22倍,比MobileNet V1基准模型小4倍,准确度仅下降4.6-7%。

TFLite 任务API

除了稳定的框架和先进的学习技术,TFLite还公开了一组功能强大且易于使用的工具库供应用程序开发人员使用TFLite创建ML体验。它为流行的机器学习任务(包括基于Bert NLP引擎的自然语言分类器、问题回答器)以及视觉任务API(包括分类器、检测器和分段器)提供了优化的即用型模型接口。

TFLite任务库可以实现跨平台工作,并且在支持JAVA、 C 和Swift等上开发接受支持。这套TFLite ML机器学习任务API提供了四个主要优点。首先,它提供了简洁且明确的API供非ML机器学习专家使用。其次,它为开发人员提供了高度可扩展性和自定义功能,开发者可在不了解模型的情况下构建自己的Android和iosOS应用程序。第三,它还发布了功能强大但通用的数据处理工具库支持通用视觉和自然语言处理逻辑,以在用户数据和模型所需的数据格式之间进行转换,工具库还提供了可以同时用于训练和推理的处理逻辑。最后,它通过优化处理获得了较高的性能,数据处理流程将不超过几毫秒 从而确保使用TensorFlowTFLite的快速推理体验,所有任务库所用到的模型均由Google研究部门提供支持。接下来,我将讨论如何使用TFLite任务API 在设备上构建机器智能应用程序。

从Java运行TFLite Task APIs

此处,我将展示一个Android客户端使用TFLite任务API 的示例 。Android客户端将调用JAVA接口以传递输入信号,输入信号将通过自身API进一步转发给模型调用,模型推断完成后,将输出结果发送给java接口,并进一步回传到Android客户端。

在示例中,用户需要将模型文件复制到设备上的本地目录 :

第一步:导入gradle依赖关系和模型文件的其他设置;

第二步:可以使用对象检测器选项创建对象检测器,并通过调用检测方法进行同步推断。在端到端系统设计中,可以利用MediaPipe框架以同步或异步方式进行设计,请进一步参考开放源代码的MediaPipe系统以获取构建端到端视觉系统的详细信息。

3.建立适合移动端的机器学习模型

看上去我们已经为智能社区建立端上机器智能应用程序做出了卓越的贡献,那我们是否可以做得更好?答案是肯定的。

3.1 硬件加速

端上机器学习社区当前正在研究的一项主要工作,通过诸如GPU EdgeTPU 和DSP之类的等硬件加速器来加速ML机器学习推理。上图显示了一些最近为移动设备开发的硬件加速器。从图中可以发现最新的芯片组(如海思、麒麟980、骁龙855和MediaTtek P9)的性能显著提高。这个令人振奋的消息将鼓励开发人员在终端设备上开发更多的应用程序。

这张幻灯片中的图显示了在ARM GPU和FPGA上运行基本滤波操作和图像分析操作的功耗基准与在CPU上运行相比通过在GPU和FPGA上进行优化来降低能源成本具有显著优势。

对于Filter2D(这是深度学习中最常用的操作之一)在GPU上运行可以将GPU的功耗降低一半。在FPGA上运行可以将功耗进一步降低到CPU的四分之一。

我们通过运行移动模型(如mobilenetMobileNet) 和服务器端流行模型(如Iinception)列出了不同硬件平台的基准。在台式机CPU上运行MobileNet V1和V2大约需要45毫秒 ;在CPU和FPGA上协同运行时将显著减少20倍 。

此外 在嵌入式CPU(如四核Cortex A53 )上运行MobileNet V1和V2将超过150毫秒,而在EdgeTPU上使用不到2.5毫秒。

通过对比CPU和 EdgeTPU上运行inception模型,我们同样可以观察到运行在EdgeTPU的延迟比运行在CPU上的延迟显著减少。

令人难以置信的是上述显著的延迟降低是通过右图所示的微型芯片组实现的。

EfficientNet-EdgeTPU

在这里,我们要展示一个利用自动机器学习构建硬件加速的端上机器学习模型的示例。我们将EfficientNet(也是最先进的移动神经网络体系结构之一)作为这项工作的基础。为了构建旨在利用Edge TPU的加速器体系结构的 EfficientNets,我们调用了自动网络结构搜索框架 ,并使用可以在Edge上高效执行的构建块来扩展原始的EfficientNet的神经网络体系结构搜索空间。我们还构建并集成了一个“延迟预测器”模块,该模块通过在周期精确的模型结构结构模拟器上运行模型来提供在Edge TPU上执行时模型延迟的估计。自动网络结构搜索控制器通过强化学习算法以在尝试通过搜索实现最大化预测延迟和模型准确性的联合奖励函数。

根据过去的经验 我们知道当该模型适合其片上存储器时Edge TPU的功耗和性能就将得到最大化。因此,我们还修改了奖励函数以便为满足此约束的模型生成更高的奖励。

与现有EfficientNet, ResNet, 以及Inception 模型相比,EfficientNet-EdgeTPU-小/中/大模型通过专用于Edge硬件的网络架构可实现更好的延迟和准确性,特别值得注意的是比起ResNet-50,我们获得的,EfficientNet-EdgeTPU-小模型具有更高的精度但运行速度快10倍。

作为广泛采用的终端设备推理平台,TFLite还支持原生硬件加速。在这里,我们显示在CPU, GPU 和边缘TPU上运行MobileNet V1TFLite模型的示例。

从总体上看CPU在MobileNet Vv1上运行浮点,推理一帧数据大约需要124毫秒。在CPU上运行量化的MobileNet Vv1比浮点模型快1.9倍,在GPU上运行浮点模型的速度比CPU快7.7倍,每帧仅使用16毫秒左右。

最后,在Edge TPU上运行量化模型仅需2毫秒。这比CPU上的浮点模型快62倍。因为我们可以得出通过硬件加速,可以在延迟、功耗和内存方面显著优化模型推理的结论。

4.端上机器学习的隐私意识

我们是否已经实现端上机器智能的最终目标?我们才刚开始。

4.1 终端上的数据很有意义

正如我们在开始时提到的,数据隐私是促使我们,转向终端设备机器智能的另一个主要原因。但是,最新的端上机器智能模型的训练仍然需要在服务器端进行。举一个典型的应用案例:为了使机器能够为人类识别狗之类的动物,我们可以使用左侧的公共训练图像来训练模型,但是 我们通常需要在如右侧图片所示的极具挑战性的场景下使用该模型。那么在具有挑战性的日常个性化使用案例中如何使模型达到高精度?一种简单的解决方案是,收集私有图像并通过集中数据中心来重新训练模型。虽然像Google这样的大公司已经建立了最安全、最强大的云基础架构来处理这些数据,以提供更好的服务。但这显然仍然不是最佳的解决方案。因为它引起了使用用户私人数据的问题,其中可能包含敏感信息,例如用户人脸、用户居住空间等。我们如何改善模型的个性化性能并保护用户的隐私。

4.2 联邦学习

现在,对于通过用户与移动设备交互进行训练而得到的模型。我们将引入另一种方法——联邦学习。

联邦学习使手机能够协作学习共享的预测模型。同时将所有训练数据保留在设备上,从而将进行机器学习的能力与将数据存储在云中的需求脱钩,这超出了通过将模型训练带入设备对移动设备进行预测使用本地模型的范围。它的工作方式如下:用户的设备下载当前模型,通过从手机上的数据学习来改进当前模型,然后将更改汇总为一个小的局部更新,仅使用加密通信将模型的更新发送到云,并在此立即将其与其他用户更新平均以改善共享模型。所有训练数据都保留在用户的设备上,并没有将用户个人的数据更新存储在云端,联邦学习可在确保隐私的同时 提供更智能的模型、更低的延迟和更低的功耗。

这种方法的另一个直接优势是除了提供对共享模型的更新之外,还可以立即使用手机上改进的模型,从而为您使用手机的方式提供个性化的体验。

用Gboard测试联邦学习

我们目前正在Android的Google键盘应用Gboard上测试联邦学习。当Gboard显示建议的查询时,您的手机将在本地存储有关当前上下文,以及是否接受建议的信息。联邦学习会处理终端设备上的历史记录以提出对Gboard查询建议模型下一次迭代的改进建议。

对于拥有数百万用户的Gboard而言,将该技术部署到的不同的设备中是一个非常有挑战的任务。在实际部署中,我们使用微型版本的TensorFlow来实现在设备上的模型训练,精心安排的时间表可确保仅在设备闲置插入电源和免费无线连接时进行训练,因此不会影响终端的使用性能。

5.未来的工作

看起来我们已经达成了不错的目标,那么未来会是什么样?

过去,所有的训练和推理都是在集中式云系统上进行的。这引起人们对隐私、延迟和可靠性的日益关注。今天,我们通过节省功效的智能设备,推理来制作部分分布式机器智能模型仍在集中式数据中心上训练并在本地设备上运行。

在不久的将来,借助联邦学习技术我们将拥有完全分布式的AI以解决隐私问题和终身终端设备学习的支持。最近,5G正在全球范围内部署,5G的低延迟和高容量还将使AI处理能够在设备、边缘云和中央云之间分布从而为各种新的和增强的体验提供灵活的混合系统解决方案。

这种无线边缘架构具有适应性,并且可以根据每个用例进行适当的权衡。例如,性能和经济权衡可能有助于确定如何分配工作负载以满足特定应用程序所需的延迟或计算要求。到那时,我们可以看到loT(物联网) 智慧城市和个性化领域中大量的新兴应用。

总结

在本次报告中,我们简要概述了端上机器学习的机遇和挑战。其次 我们讨论关于终端设备机器学习的资源效率计算。在这一部分中,我们介绍了移动模型体系结构TFLite框架用于压缩模型的高级技术,以及用于用户构建端上机器智能应用的开源机器学习任务API。最后,我们介绍了隐私保护的端上机器学习技术(联邦学习)的最新进展。我们还指出了端上人工智能的未来发展方向。

0 人点赞