迈微电子研发社作者

CVPR 2020 | 华为GhostNet,超越谷歌MobileNet,已开源

来自华为诺亚方舟实验室的一篇工作近日被CVPR 2020接受,提出了一种新型的端侧神经网络架构,GhostNet。作者:韩凯、王云鹤等。该架构可以在同样精度下,速度和计算量均少于SOTA算法。

来自华为诺亚方舟实验室的一篇工作近日被CVPR 2020接受,提出了一种新型的端侧神经网络架构,GhostNet。作者:韩凯、王云鹤等。该架构可以在同样精度下,速度和计算量均少于SOTA算法。

该论文提供了一个全新的Ghost模块,旨在通过廉价操作生成更多的特征图。基于一组原始的特征图,作者应用一系列线性变换,以很小的代价生成许多能从原始特征发掘所需信息的“幻影”特征图(Ghost feature maps)。该Ghost模块即插即用,通过堆叠Ghost模块得出Ghost bottleneck,进而搭建轻量级神经网络——GhostNet。在ImageNet分类任务,GhostNet在相似计算量情况下Top-1正确率达75.7%,高于MobileNetV3的75.2%。

论文链接:https://arxiv.org/pdf/1911.11907.pdf

开源地址:https://github.com/huawei-noah/ghostnet

00 引言

卷积神经网络推动了计算机视觉诸多任务的进步,比如图像识别、目标检测等。但是,神经网络在移动设备上的应用还亟待解决,主要原因是现有模型又大又慢。因而,一些研究提出了模型的压缩方法,比如剪枝量化知识蒸馏等;还有一些则着重于高效的网络结构设计,比如MobileNet,ShuffleNet等。本文就设计了一种全新的神经网络基本单元Ghost模块,从而搭建出轻量级神经网络架构GhostNet。

在一个训练好的深度神经网络中,通常会包含丰富甚至冗余的特征图,以保证对输入数据有全面的理解。如下图所示,在ResNet-50中,将经过第一个残差块处理后的特征图拿出来,三个相似的特征图对示例用相同颜色的框注释。该对中的一个特征图可以通过廉价操作(用扳手表示)将另一特征图变换而获得,可以认为其中一个特征图是另一个的“幻影”。因为,本文提出并非所有特征图都要用卷积操作来得到,“幻影”特征图可以用更廉价的操作来生成。

图1 ResNet50特征图可视化 

在本文中,作者提出了一种新颖的Ghost模块,可以使用更少的参数来生成更多特征图。

具体来说,深度神经网络中的普通卷积层将分为两部分。

第一部分涉及普通卷积,但是将严格控制它们的总数。给定第一部分的固有特征图,然后将一系列简单的线性运算应用于生成更多特征图。与普通卷积神经网络相比,在不更改输出特征图大小的情况下,该Ghost模块中所需的参数总数和计算复杂度均已降低。基于Ghost模块,作者建立了一种有效的神经体系结构,即GhostNet。作者首先在基准神经体系结构中替换原始的卷积层,以证明Ghost模块的有效性,然后在几个基准视觉数据集上验证GhostNet的优越性。

实验结果表明,所提出的Ghost模块能够在保持相似识别性能的同时降低通用卷积层的计算成本,并且GhostNet可以超越MobileNetV3等先进的高效深度模型,在移动设备上进行快速推断。

01 方法

Ghost模块

深度卷积神经网络通常引用由大量卷积组成的卷积神经网络,导致大量的计算成本。尽管最近的工作,例如MobileNet和ShuffleNet引入了深度卷积或混洗操作,以使用较小的卷积核(浮点运算)来构建有效的CNN,其余 1X1 卷积层仍将占用大量内存和FLOPs。

鉴于主流CNN计算出的中间特征图中存在大量的冗余(如图1所示),作者提出减少所需的资源,即用于生成它们的卷积核。实际上,给定输入数据  ,其中c 是输入通道数, h和 w是高度,输入数据的宽度,分别用于生成 n 个特征图的任意卷积层的运算可表示为

其中 * 是卷积运算, b是偏差项,  是具有 n 个通道的输出特征图,  是这一层中的卷积核。另外,h‘ 和 w' 分别是输出数据的高度和宽度,k × k 分别是卷积核 f的内核大小。在此卷积过程中,由于卷积核数量n 和通道数 c 通常非常大(例如256或512),所需的FLOPs数量达 之多。

Image caption

根据上述公式,要优化的参数数量( f 和 b 中的参数)由输入和输出特征图的尺寸确定。如图1中所观察到的,卷积层的输出特征图通常包含很多冗余,并且其中一些可能彼此相似。作者指出,没有必要使用大量的FLOP和参数一一生成这些冗余特征图,而是说,输出特征图是少数原始特征图通过一些廉价转换的“幻影”。这些原始特征图通常具有较小的大小,并由普通的卷积核生成。具体来说, m 个原始特征图  是使用一次卷积生成的:

其中 是使用的卷积核,m ≤ n ,为简单起见,这里省略了偏差项。超参数(例如卷积核大小,stride,padding)与普通卷积中的超参数相同,以保持输出特征图的空间大小(即 h和 w')保持一致。为了进一步获得所需的 n个特征图,作者提出对 Y'中的每个原始特征应用一系列廉价的线性运算,以生成 s 个幻影特征图:

 其中 yi 是Y’中第 i 个原始特征图,上述函数中的 Φi,j 是第 j 个线性运算,用于生成第 j 个幻影特征图 yij,也就是说, yi' 可以具有一个或多个幻影特征图  。最后的 Φi,s  是用于保留原始特征图的恒等映射,如图2(b)所示。通过使用廉价操作,我们可以获得 n = m · s 个特征图  作为Ghost模块的输出数据。注意,线性运算 Φ 在每个通道上运行,其计算量比普通卷积少得多。实际上,Ghost模块中可能有几种不同的线性运算,例如 3×3 和 5×5 线性内核,将在实验部分进行分析。

复杂度分析

利用Ghost模块生成与普通卷积层相同数量的特征图,我们可以轻松地将Ghost模块替换卷积层,集成到现有设计好的神经网络结构中,以减少计算成本。在这里,我们来进一步分析通过使用Ghost模块带来的内存和计算量的收益。具体来说,Ghost模块具有一个恒等映射和  个线性运算,并且每个线性运算的平均内核大小为 d × d 。理想情况下,n · (s-1) 个线性运算可以具有不同的形状和参数,但是特别是考虑到CPU或GPU的实用性,在线推理会受到阻碍。因此,作者建议在一个Ghost模块中采用相同大小的线性运算(例如全 3×3 或全  5×5 )以高效实现Ghost模块。使用Ghost模块升级普通卷积的理论加速比为

其中   d×d 的幅度与  k×k  和 s << c 相似。同样,参数压缩比可以计算为

它大约等于加速比。

构建GhostNet

Ghost Bottleneck:利用Ghost模块的优势,作者介绍了专门为小型CNN设计的Ghost bottleneck(G-bneck)。如图3所示,Ghost bottleneck似乎类似于ResNet中的基本残差块(Basic Residual Block),其中集成了多个卷积层和shortcut。Ghost bottleneck主要由两个堆叠的Ghost模块组成。第一个Ghost模块用作扩展层,增加了通道数。这里将输出通道数与输入通道数之比称为expansion ratio。第二个Ghost模块减少通道数,以与shortcut路径匹配。然后,使用shortcut连接这两个Ghost模块的输入和输出。这里借鉴了MobileNetV2,第二个Ghost模块之后不使用ReLU,其他层在每层之后都应用了批量归一化(BN)和ReLU非线性激活。上述Ghost bottleneck适用于stride= 1,对于stride = 2的情况,shortcut路径由下采样层和stride = 2的深度卷积(Depthwise Convolution)来实现。出于效率考虑,Ghost模块中的初始卷积是点卷积(Pointwise Convolution)。

图3 Ghost bottleneck



GhostNet:基于Ghost bottleneck,作者提出GhostNet,如表1所属。作者遵循MobileNetV3的基本体系结构的优势,然后使用Ghost bottleneck替换MobileNetV3中的bottleneck。GhostNet主要由一堆Ghost bottleneck组成,其中Ghost bottleneck以Ghost模块为构建基础。第一层是具有16个卷积核的标准卷积层,然后是一系列Ghost bottleneck,通道逐渐增加。这些Ghost bottleneck根据其输入特征图的大小分为不同的阶段。除了每个阶段的最后一个Ghost bottleneck是stride = 2,其他所有Ghost bottleneck都以stride = 1进行应用。最后,利用全局平均池和卷积层将特征图转换为1280维特征向量以进行最终分类。SE模块也用在了某些Ghost bottleneck中的残留层,如表1中所示。与MobileNetV3相比,这里用ReLU换掉了Hard-swish激活函数。尽管进一步的超参数调整或基于自动架构搜索的Ghost模块将进一步提高性能,但表1所提供的架构提供了一个基本设计参考。


表1 GhostNet网络架构 

02 实验

Ghost模块消融实验

如上所述,Ghost模块具有两个超参数,也就是,s 用于生成 m = n / s 个内在特征图,以及用于计算幻影特征图的线性运算的 d × d (即深度卷积核的大小)。作者测试了这两个参数的影响。

首先,作者固定 s = 2 并在 {1,3,5,7} 范围中调整 d ,并在表2中列出CIFAR-10验证集上的结果。作者可以看到,当 d = 3 的时候,Ghost模块的性能优于更小或更大的Ghost模块。这是因为大小为 1×1 的内核无法在特征图上引入空间信息,而较大的内核(例如 d = 5 或 的 d = 7 )会导致过拟合和更多计算。因此,在以下实验中作者采用 d = 3 来提高有效性和效率。

表2 超参数d的影响

在研究了内核大小的影响之后,作者固定 d = 3 并在 {2,3,4,5} 的范围内调整超参数 s 。实际上, s 与所得网络的计算成本直接相关,即,较大的 s 导致较大的压缩率和加速比。从表3中的结果可以看出,当作者增加 s 时,FLOP显着减少,并且准确性逐渐降低,这是在预期之内的。特别地,当 s = 2 ,也就是将VGG-16压缩 2 × 时,Ghost模块的性能甚至比原始模型稍好,表明了所提出的Ghost模块的优越性。

表3 超参数s的影响

作者将Ghost模块用在VGG-16和ResNet-56架构上,然后和几个代表性的最新模型进行了比较。Ghost-VGG-16 ( s = 2 最高的性能(93.7%)胜过竞争对手,但FLOPs明显减少。对于已经比VGG-16小得多的ResNet-56,基于Ghost模块的模型可以将计算量降低一半时获得可比的精度,还可以看到,其他具有相似或更大计算成本的最新模型所获得的准确性低于Ghost模型。

表4 在CIFAR-10数据集和SOTA模型对比

特征图可视化

作者还可视化了Ghost模块的特征图,如图4所示。图4展示了Ghost-VGG-16的第二层特征,左上方的图像是输入,左红色框中的特征图来自初始卷积,而右绿色框中的特征图是经过廉价深度变换后的幻影特征图。尽管生成的特征图来自原始特征图,但它们之间确实存在显着差异,这意味着生成的特征足够灵活,可以满足特定任务的需求。

图4 Ghost-VGG-16的第二层输出特征图可视化

图5 原始VGG-16的第二层输出特征图可视化


GhostNet性能

ImageNet分类数据集:为了验证所提出的GhostNet的优越性,作者对ImageNet分类任务进行了实验。
在ImageNet验证集上报告的所有结果均是single crop的top-1的性能。对于GhostNet,为简单起见,作者在初始卷积中设置了内核大小  k = 1  ,在所有Ghost模块中设置了 s = 2 和 d = 3 。作者和现有最优秀的几种小型网络结构作对比,包括MobileNet系列、ShuffleNet系列、IGCV3、ProxylessNAS、FBNet、MnasNet等。结果汇总在表5中,这些模型分为3个级别的计算复杂性,即~50,~150和200-300 MFLOPs。

从结果中我们可以看到,通常较大的FLOPs会在这些小型网络中带来更高的准确性,这表明了它们的有效性。而GhostNet在各种计算复杂度级别上始终优于其他竞争对手,主要是因为GhostNet在利用计算资源生成特征图方面效率更高。

表5 GhostNet在ImageNet数据集的表现

硬件推理速度:由于提出的GhostNet是为移动设备设计的,因此作者使用TFLite工具在基于ARM的手机华为P30Pro上进一步测量GhostNet和其他模型的实际推理速度。遵循MobileNet中的常用设置,作者使用Batch size为1的单线程模式。从图6的结果中,我们可以看到与具有相同延迟的MobileNetV3相比,GhostNet大约提高了0.5%的top-1的准确性,另一方面GhostNet需要更少的运行时间来达到相同的精度。例如,精度为75.0%的GhostNet仅具有40毫秒的延迟,而精度类似的MobileNetV3大约需要46毫秒来处理一张图像。总体而言,作者的模型总体上胜过其他最新模型,例如谷歌MobileNet系列,ProxylessNAS,FBNet和MnasNet。

值得指出的是,华为内部开发了一款神经网络部署工具Bolt,对GhostNet实现做了进一步优化,速度相比其他框架如NCNN、TFLite更快。感兴趣的读者可以参考:

https://github.com/huawei-noah/bolt

图6 GhostNet和其他模型的FLOPs、推理速度对比

COCO目标检测数据集:为了进一步评估GhostNet的泛化能力,作者在MS COCO数据集上进行了目标检测实验。具有特征金字塔网络(FPN)的两阶段Faster R-CNN和单阶段的RetinaNet作为baseline,而GhostNet用于骨干网络做特征提取器。表6显示了检测结果,其中FLOPs是使用 224 × 224 输入图像计算的。通过使用显着降低的计算成本,GhostNet可以在单阶段的RetinaNet和两阶段的Faster R-CNN框架上达到和MobileNetV2和MobileNetV3类似的mAP。

表6 GhostNet在COCO数据集的表现

03 总结

为了减少最新的深度神经网络的计算成本,本文提出了一种用于构建高效的神经网络结构的新型Ghost模块。Ghost模块将原始卷积层分为两部分,首先使用较少的卷积核来生成原始特征图,然后,进一步使用廉价变换操作以高效生产更多幻影特征图。在基准模型和数据集上进行的实验表明,该方法是一个即插即用的模块,能够将原始模型转换为更紧凑的模型,同时保持可比的性能。此外,在效率和准确性方面,使用提出的新模块构建的GhostNet均优于最新的轻量神经网络,如MobileNetV3。

迈微电子研发社
迈微电子研发社

专注于机器学习、深度学习、计算机视觉、NLP等领域。分享最新最前沿的科技与宝贵的资源资料,定期不定期发布顶会论文研读文章。欢迎加入迈微AI社群。

专栏二维码
理论GhostNet深度学习神经网络CNN
2
相关数据
华为机构

华为创立于1987年,是全球领先的ICT(信息与通信)基础设施和智能终端提供商,致力于把数字世界带入每个人、每个家庭、每个组织,构建万物互联的智能世界。目前华为有19.4万员工,业务遍及170多个国家和地区,服务30多亿人口。

https://www.huawei.com/cn/
激活函数技术

在 计算网络中, 一个节点的激活函数定义了该节点在给定的输入或输入的集合下的输出。标准的计算机芯片电路可以看作是根据输入得到"开"(1)或"关"(0)输出的数字网络激活函数。这与神经网络中的线性感知机的行为类似。 一种函数(例如 ReLU 或 S 型函数),用于对上一层的所有输入求加权和,然后生成一个输出值(通常为非线性值),并将其传递给下一层。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

VGG技术

2014年,牛津大学提出了另一种深度卷积网络VGG-Net,它相比于AlexNet有更小的卷积核和更深的层级。AlexNet前面几层用了11×11和5×5的卷积核以在图像上获取更大的感受野,而VGG采用更小的卷积核与更深的网络提升参数效率。VGG-Net 的泛化性能较好,常用于图像特征的抽取目标检测候选框生成等。VGG最大的问题就在于参数数量,VGG-19基本上是参数量最多的卷积网络架构。VGG-Net的参数主要出现在后面两个全连接层,每一层都有4096个神经元,可想而至这之间的参数会有多么庞大。

基准技术

一种简单的模型或启发法,用作比较模型效果时的参考点。基准有助于模型开发者针对特定问题量化最低预期效果。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

分类数据技术

一种特征,拥有一组离散的可能值。以某个名为 house style 的分类特征为例,该特征拥有一组离散的可能值(共三个),即 Tudor, ranch, colonial。通过将 house style 表示成分类数据,相应模型可以学习 Tudor、ranch 和 colonial 分别对房价的影响。 有时,离散集中的值是互斥的,只能将其中一个值应用于指定样本。例如,car maker 分类特征可能只允许一个样本有一个值 (Toyota)。在其他情况下,则可以应用多个值。一辆车可能会被喷涂多种不同的颜色,因此,car color 分类特征可能会允许单个样本具有多个值(例如 red 和 white)。

剪枝技术

剪枝顾名思义,就是删去一些不重要的节点,来减小计算或搜索的复杂度。剪枝在很多算法中都有很好的应用,如:决策树,神经网络,搜索算法,数据库的设计等。在决策树和神经网络中,剪枝可以有效缓解过拟合问题并减小计算复杂度;在搜索算法中,可以减小搜索范围,提高搜索效率。

超参数技术

在机器学习中,超参数是在学习过程开始之前设置其值的参数。 相反,其他参数的值是通过训练得出的。 不同的模型训练算法需要不同的超参数,一些简单的算法(如普通最小二乘回归)不需要。 给定这些超参数,训练算法从数据中学习参数。相同种类的机器学习模型可能需要不同的超参数来适应不同的数据模式,并且必须对其进行调整以便模型能够最优地解决机器学习问题。 在实际应用中一般需要对超参数进行优化,以找到一个超参数元组(tuple),由这些超参数元组形成一个最优化模型,该模型可以将在给定的独立数据上预定义的损失函数最小化。

验证集技术

验证数据集是用于调整分类器超参数(即模型结构)的一组数据集,它有时也被称为开发集(dev set)。

计算机视觉技术

计算机视觉(CV)是指机器感知环境的能力。这一技术类别中的经典任务有图像形成、图像处理、图像提取和图像的三维推理。目标识别和面部识别也是很重要的研究领域。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

卷积神经网络技术

卷积神经网路(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。卷积神经网路由一个或多个卷积层和顶端的全连通层(对应经典的神经网路)组成,同时也包括关联权重和池化层(pooling layer)。这一结构使得卷积神经网路能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网路在图像和语音识别方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他深度、前馈神经网路,卷积神经网路需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。 卷积网络是一种专门用于处理具有已知的、网格状拓扑的数据的神经网络。例如时间序列数据,它可以被认为是以一定时间间隔采样的一维网格,又如图像数据,其可以被认为是二维像素网格。

映射技术

映射指的是具有某种特殊结构的函数,或泛指类函数思想的范畴论中的态射。 逻辑和图论中也有一些不太常规的用法。其数学定义为:两个非空集合A与B间存在着对应关系f,而且对于A中的每一个元素x,B中总有有唯一的一个元素y与它对应,就这种对应为从A到B的映射,记作f:A→B。其中,y称为元素x在映射f下的象,记作:y=f(x)。x称为y关于映射f的原象*。*集合A中所有元素的象的集合称为映射f的值域,记作f(A)。同样的,在机器学习中,映射就是输入与输出之间的对应关系。

过拟合技术

过拟合是指为了得到一致假设而使假设变得过度严格。避免过拟合是分类器设计中的一个核心任务。通常采用增大数据量和测试样本集的方法对分类器性能进行评价。

知识蒸馏技术

Hinton 的工作引入了知识蒸馏压缩框架,即通过遵循“学生-教师”的范式减少深度网络的训练量,这种“学生-教师”的范式,即通过软化“教师”的输出而惩罚“学生”。为了完成这一点,学生学要训练以预测教师的输出,即真实的分类标签。这种方法十分简单,但它同样在各种图像分类任务中表现出较好的结果。

堆叠技术

堆叠泛化是一种用于最小化一个或多个泛化器的泛化误差率的方法。它通过推导泛化器相对于所提供的学习集的偏差来发挥其作用。这个推导的过程包括:在第二层中将第一层的原始泛化器对部分学习集的猜测进行泛化,以及尝试对学习集的剩余部分进行猜测,并且输出正确的结果。当与多个泛化器一起使用时,堆叠泛化可以被看作是一个交叉验证的复杂版本,利用比交叉验证更为复杂的策略来组合各个泛化器。当与单个泛化器一起使用时,堆叠泛化是一种用于估计(然后纠正)泛化器的错误的方法,该泛化器已经在特定学习集上进行了训练并被询问了特定问题。

深度神经网络技术

深度神经网络(DNN)是深度学习的一种框架,它是一种具备至少一个隐层的神经网络。与浅层神经网络类似,深度神经网络也能够为复杂非线性系统提供建模,但多出的层次为模型提供了更高的抽象层次,因而提高了模型的能力。

目标检测技术

一般目标检测(generic object detection)的目标是根据大量预定义的类别在自然图像中确定目标实例的位置,这是计算机视觉领域最基本和最有挑战性的问题之一。近些年兴起的深度学习技术是一种可从数据中直接学习特征表示的强大方法,并已经为一般目标检测领域带来了显著的突破性进展。

本体技术

在计算机科学和信息科学中,本体包括表示、正式命名和定义概念,数据,实体之间的类别,属性和关系,并在一个,多个或所有域实例中。

小样本学习技术

人类非常擅长通过极少量的样本识别一个新物体,比如小孩子只需要书中的一些图片就可以认识什么是“斑马”,什么是“犀牛”。在人类的快速学习能力的启发下,研究人员希望机器学习模型在学习了一定类别的大量数据后,对于新的类别,只需要少量的样本就能快速学习,这就是 Few-shot Learning 要解决的问题。

量化技术

深度学习中的量化是指,用低位宽数字的神经网络近似使用了浮点数的神经网络的过程。

暂无评论
暂无评论~