Press "Enter" to skip to content

数十亿次数学运算只消耗几毫瓦电力,谷歌开源Pixel 4背后的视觉模型

点击 我爱计算机视觉 标星,更快获取CVML新技术

 

本文转载自机器之心。

 

选自Google AI Blog

 

作者: Andrew Howard

 

机器之心编译

 

参与: 王子嘉、Geek AI

 

说到今年最热门的智能手机,一定绕不开谷歌重磅推出的 Pixel 4。而 Pixel 4 的强大性能表现在很大程度上还要归功于其背后用到的黑科技——基于终端设备的机器学习。前段时间,谷歌发布了 MobileNetV3 和 MobileNetEdgeTPU 的源代码,让我们一探究竟吧!

 

 

基于终端设备的机器学习(On-device machine learning)是实现具有隐私保护功能、能够时刻运转、快速响应的智能的重要组成部分。这就要求我们将基于终端的机器学习部署在算力有限的设备上,从而推动了从算法意义上来说高效的神经网络模型的研究,以及每秒可执行数十亿次数学运算却只需要消耗几毫瓦电力的硬件的发展。最近发布的「Google Pixel 4」就是这一发展趋势的代表。

 

「Google Pixel 4」搭载了 Pixel 神经核心,它包含了 Edge TPU 架构的实例和 Google 用于边缘计算设备的机器学习加速器,这增强了 Pixel 4 的用户体验,比如更好的面部解锁功能,更快的 Google 助手以及独特的相机功能。同时,MobileNet 之类的算法为移动视觉应用程序提供了紧凑而高效的神经网络模型,是基于终端的机器学习成功的重要因素。

 

去年 11 月,谷歌发布了 MobileNetV3 和进行了 Pixel 4 Edge TPU 优化后的 MobileNetEdgeTPU 模型的源代码及检查点(checkpoint)。这些模型是最新的可感知硬件(hardware-aware)的自动机器学习(AutoML)技术与一些新型架构设计的结晶。

 

在移动版 CPU 上,MobileNetV3 的速度是 MobileNetV2 的两倍(准确率相同的情况下),它也刷新了移动计算机视觉网络目前最佳的性能。在 Pixel 4 Edge TPU 硬件加速器上,MobileNetEdgeTPU 模型在提高模型准确性的同时减少了运行时间和功耗,这个进展进一步突破了这一领域的极限。

 

构建 MobileNetV3

 

与之前手动设计的 MobileNet 相比,MobileNetV3 的搜索空间是适用于移动计算机视觉任务的,它在搜索空间中通过 AutoML 技术找到可能的最佳架构。为了最有效地利用搜索空间,谷歌依次部署了两种技术:MnasNet 和 NetAdapt。首先,MnasNet 使用强化学习从一组离散的选项中选择出最优配置,从而找到一个粗糙的架构。然后,谷歌使用 NetAdapt 对体系结构进行微调,NetAdapt 是一种补充性技术,可以对未充分利用的激活通道进行微调。为了得到在不同条件下的最佳性能,谷歌分别生成了大型模型和小型模型。

 

 

使用 Google Pixel 4 CPU 在 ImageNet 分类任务上对于移动模型的准确性和延迟的比较。

 

MobileNetV3 的搜索空间

 

谷歌在适应移动环境的架构设计上取得了多项进展,MobileNetV3 的搜索空间就建立在这些进展的基础之上。首先,谷歌引入了一种基于 Swish 非线性函数的、被称为 hard-swish(h-swish)的新激活函数。Swish 函数的主要缺点是其在移动硬件上的计算效率很低。因此,谷歌使用了一种可以由两个分段线性函数的乘积表示的近似方案。

 

 

接下来将介绍适用于移动设备的挤压激励块(squeeze-and-excitation),该块利用分段线性近似代替了传统的 sigmoid 函数。

 

在 h-swish 的基础上加上适用于移动设备的挤压激励块,并与改进后的 MobileNetV2 中的倒瓶颈结构相结合,就形成了 MobileNetV3 的一个新的构建块。

 

 

MobileNetV3 通过添加 h-swish 和适用于移动设备的挤压激励块扩展了 MobileNetV2 的倒瓶颈结构,并以此作为可搜索的选项。

 

以下参数定义了构造 MobileNetV3 时使用的搜索空间:

 

扩展层大小

 

挤压激励块压缩度

 

激活函数的选择:h-swish 或 ReLU

 

每个分辨率块的层数

 

谷歌还在网络末端引入了一个新的高效的最后阶段,可将延迟进一步降低 15%。

 

 

MobileNetV3 的目标检测和语义分割

 

除了分类模型之外,谷歌还引入了 MobileNetV3 目标检测模型,该模型在 COCO 数据集上比 MobileNetV2 减少了 25% 的检测延迟(准确率相同的情况下)。

 

为了优化 MobileNetV3 以进行有效的语义分割,谷歌引入了一个低延迟分割解码器,将其称之为「Lite reduce Atrous Spatial Pyramid Pooling」(LR-SPP)。这个新的解码器包含三个分支,一个分支用于低分辨率语义特征,一个用于高分辨率细节,一个用于轻量级注意力机制。LR-SPP 和 MobileNetV3 的组合在高分辨率的 Cityscapes 数据集上减少了超过 35% 的延迟。

 

用于 Edge TPUs 的 MobileNet

 

Pixel 4 中的 Edge TPU 在结构上与 Coral 产品线中的 Edge TPU 相似,但经过定制后,可以满足 Pixel 4 中相机的关键功能的要求。可感知加速器的 AutoML 方法大大减少了为硬件加速器设计和优化神经网络的手工过程。构建神经架构搜索空间是这种方法的重要一环,它以已知可以提高硬件利用率的神经网络操作为中心。尽管诸如「挤压-激励块」和「swish 非线性」等操作已被证明是构建紧凑而快速的 CPU 模型的关键,但这些操作在 Edge TPU 上的执行效果往往欠佳,因此被排除在搜索空间之外。为了能够更容易地移植到其它各种硬件加速器上(如 DSP 和 GPU),简化版的 MobileNetV3 变种也放弃了对这些操作的使用(例如,挤压-激励、swish、以及 5×5 卷积)。

 

谷歌鼓励神经网络架构搜索算法同时优化模型的准确率和 EdgeTPU 延迟,从而生成了 MobileNetEdgeTPU 模型,该模型与现有的移动版模型(如 MobileNetV2 和简化版的 MobileNetV3)相比,可以在准确率相当的情况下具有更低的延迟(或在同等延迟的基础上达到更高的准确率)。与 EfficientNet-EdgeTPU 模型(针对 Coral 中的 Edge TPU 进行了优化)相比,这些模型在 Pixel 4 上的运行延迟要低得多(尽管会损失一部分准确率)。

 

虽然降低模型的功耗不是搜索目标的一部分,但 MobileNetEdgeTPU 模型的低延迟也有助于降低 Edge TPU 的平均功耗。在准确率相当的情况下,MobileNetEdgeTPU 模型消耗的能量不到简化版的 MobileNetV3 模型的 50%。

 

 

左图: 在 Pixel4 EdgeTPU 上运行时,MobileNetEdgeTPU 与其它为移动设备设计的图像分类网络在 ImageNet 分类任务上的准确率比较。 与其它模型相比,MobileNetEdgeTPU 具有更高的准确率和更低的延迟。 右图: 每秒运行 30 帧(fps)的不同分类模型的在 Edge TPU 上的平均功率(瓦特)。

 

使用 MobileNetEdgeTPU 进行目标检测

 

在目标检测任务中,MobileNetEdgeTPU 分类模型也可以看作一个有效的特征提取器。与基于 MobileNetV2 的检测模型相比,在 Edge TPU 上可比较的运行时上,MobileNetEdgeTPU 模型大大提高了在「COCO14 minival」数据集上的模型质量(通过平均精度均值(mean average precision,mAP)衡量)。MobileNetEdgeTPU 检测模型的延迟为 6.6ms, mAP 评分为 24.3,而基于 mobilenetv2 的检测模型 mAP 为 22,每次推理需要 6.8ms。

 

对于可感知硬件的模型的需求

 

虽然上面提到的结果突出了 MobileNetEdgeTPU 模型在功率、性能和质量方面的优势,但是需要注意的是,之所以有这些进步,是由于这些模型专门为 EdgeTPU 加速器定制。

 

在移动版 CPU 上运行时,MobileNetEdgeTPU 的性能要低于专门针对移动版 CPU 进行调优的模型(MobileNetV3)。MobileNetEdgeTPU 模型执行的操作要多得多,因此,它们在移动版 CPU 上运行得更慢也就不足为奇了,移动版 CPU 在模型的计算需求和运行时之间有更线性的关系。

 

 

当部署目标是移动版 CPU 时,MobileNetV3 依旧是最好的模型。

 

致研究员与开发者

 

MobileNetV3 和 MobileNetEdgeTPU 的代码,以及用于 ImageNet 分类的浮点和量化的检查点,都可以在 MobileNet 的 github 主页上找到:https://github.com/tensorflow/models/tree/master/research/slim/nets/mobilenet。

 

在 Tensorflow 目标检测 API 中提供了 MobileNetV3 和 MobileNetEdgeTPU 目标检测的开源实现:https://github.com/tensorflow/models/tree/master/research/object_detection。

 

MobileNetV3 语义分割的 TensorFlow 版开源实现可以在 DeepLab 中找到: https://github.com/tensorflow/models/tree/master/research/object_detection 。

 

原文链接:

 

http://ai.googleblog.com/2019/11/introducing-next-generation-on-device.html

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注