CVPR2020论文解读—华为高效轻量级网络GhostNet, 性能超越谷歌MobileNetV3

AI研习图书馆,发现不一样的精彩世界

论文解读
华为诺亚方舟实验室提出的新型端侧神经网络架构GhostNet,在同样精度条件下,模型速度和计算量均少于此前SOTA算法,值得一看。GhostNet论文已经被CVPR 2020收录,模型与代码也已经在GitHub上开源。那么,华为诺亚方舟实验室是如何做到的?我们来一探究竟~~
  • 文章出处:华为诺亚方舟实验室,CVPR2020

  • 论文地址:https://arxiv.org/abs/1911.11907

  • 源码地址(TF):https://github.com/huawei-noah/ghostnet

  • 源码地址(PT):https://github.com/iamhankai/ghostnet.pytorch

一、Introduction

由于应用设备内存以及计算资源限制,将常规的CNN架构部署到移动设备是件非常困难的事。在将深度神经网络运用到移动设备的过程中,怎么保证性能不减,且计算量变得更少,成为研究的重点之一。常用的方法有剪枝、量化、蒸馏以及设计一些高效轻量的神经网络等。目前已经出现很多经典高效的轻量形卷积神经网络,例如MobileNet,ShuffleNet等。

近年来,虽然涌现了许多移动端网络架构设计,但是大部分都是从减少卷积计算量的思路出发,例如:谷歌出品的Mobilenet系列是提出了「Depthwise+Pointwise卷积」来减少计算量,旷视则是提出「通道混洗」,利用转置操作,均匀的shuffle各个通道进行卷积。Mixnet是在Mobilenet基础上,关注了卷积核的大小,通过「不同大小卷积核」所生成的卷积图在不增加计算量前提下进一步提高精度。

而华为的Ghostnet则是聚焦于「特征图冗余」,希望通过少量的计算(即文中的cheap operation)得到大量特征图。而Ghostnet在相同计算量下,精度超越了Mobilenetv3,达到了75.7%分类准确率( ImageNet ILSVRC-2012)。

二、Motivation
通常情况下,为了保证模型对输入数据有全面的理解,训练好的深度神经网络中,会包含丰富甚至大量冗余的特征图。

何为特征图冗余?

如上图所示,作者对训练好的Resnet-50模型进行了特征图可视化,在ResNet-50中,经过第一个残差块处理后的特征图,会出现很多相似的“特征图对”——它们用相同颜色的框注释。这样的操作,虽然能实现较好的性能,但需要更多的计算资源驱动大量的卷积层,来处理这些特征图。

在将深度神经网络应用到移动设备的浪潮中,怎么保证性能不减,且计算量变得更少,成为研究的重点之一。深度卷积神经网络通常是由大量的卷积块所组成的,导致大量的计算成本。尽管最近的工作,例如MobileNet和ShuffleNet引入了深度可分离卷积或混洗操作,以使用较小的卷积核(浮点运算)来构建有效的CNN,其余1x1卷积层仍将占用大量内存和FLOPs。

华为诺亚方舟实验室的团队没有沿着这条路继续前进,而是另辟蹊径:

“特征图对”中的一个特征图,可以通过廉价操作由另一特征图变换而获得,则可以认为其中一个特征图是另一个的“幻影”。

这是不是意味着,并非所有特征图都要用卷积操作来得到?“幻影”特征图,也可以用更廉价的操作来生成?

于是,就有了GhostNet的基础——Ghost模块,用更少的参数,生成与普通卷积层相同数量的特征图,其需要的算力资源,要比普通卷积层要低,集成到现有设计好的神经网络结构中,则能够降低计算成本。

核心理念:用更少的参数来生成更多特征图

因此,本文提出了一种更高效的轻量形卷积神经网络GhostNet,其核心思想是用更少的参数生成更多的特征图。

三、Method

1. Ghost 模块

给定一个输入数据

,其中

代表输入通道,

分别代表高度和宽度,当我们用一个具有

个滤波器,内核大小为

的卷积核

跟原始特征图

做卷积操作时,可以得到输出特征图

.其中

为偏置项。

为简化计算,这里忽略掉偏置项,并假设输入和输出特征图的尺寸大小相同。那么可以很方便的算出,原始卷积操作中的FLOPs数量为:

,当输入通道数和滤波器数量为512以上时,可想而知,为了得到这么多数量的特征图,计算代价得多大。

我们都知道,对于卷积神经网络而言,特征无疑是最重要的。在第一节通过特征可视化的结果,我们了解到部分原始特征图当中存在着非常多的冗余特征图。
从上面的分析可以得出,得到这部分特征图需要花费很大的计算代价。那么问题来了,我们是不是可以换种方式去得到这部分冗余的特征图,从而避免昂贵的计算代价?毕竟无中生有难,但是对已有的东西通过适当的方式改造得到新的东西却是比较简单且合理的。
作者认为没有必要耗费大量计算资源来生成冗余的特征图,一些特征图之间是一种相似的关系,所以想到在原始特征图基础上,经过简单线性变换再生成新的特征图。

如上图所示,先通过常规卷积,生成部分特征图。再在这特征图基础上得到新的特征图。最后两部分特征图在通道维度上连结,生成最终的output。

下面讲解一下作者是如何进行操作的。

同上,给定一个输入数据

,我们用一个具有

个滤波器,内核大小为

的卷积核

跟原始特征图

进行卷积运算,得到输出特征图

.

这里

. 为了进一步的获得剩余的

个"冗余"特征图,作者对输出的这

个特征图分别进行一系列廉价的线性运算,最终得到

个特征图。

这里

表示

中的第

个特征图,

表示对第

个特征图进行第

个线性运算,用于生成第

个幻影(ghost)特征图。于是原始输出特征图可以被表示为:

于是,可以算出Ghost-block跟原始卷积块之间的加速比

和参数压缩率

.

这里,

,其他符号含义同上所述。其中

减掉的“1”即为图2的indentity部分。可以发现,当

时,我们可以将上述公式进一步地简化为:

可以发现,使用Ghost模块所带来的的理论加速比和参数压缩率约等于

--进行线性运算的次数。作者这里主要是通过线性运算

来替代部分原始的卷积操作,从而将计算量和参数量降下来。

来到这里,你可能会有两个疑问:
(1)如何保证原始卷积操作减掉的那部分特征图都是冗余而非有用的特征?
(2)对特征图进行线性变化所得到的幻影特征图,如何确保这些特征图不是冗余的?

Ghost本质可以理解为depth wise convolution 和 point wise convolution的重新组合。Ghost module 中的primary conv是一个point wise convolution;;Ghost module的cheap opration 是一个depth wise convolution。

2. Ghost Bottleneck
构建新型端侧神经网络架构GhostNet
利用Ghost模块的优势,研究团队提出了一个专门为小型CNN设计的Ghost bottleneck(G-bneck)。其架构如下图所示,与ResNet中的基本残差块(Basic Residual Block)类似,集成了多个卷积层和shortcut。

Ghost bottleneck主要由两个堆叠的Ghost模块组成。第一个用作扩展层,增加了通道数。第二个用于减少通道数,以与shortcut路径匹配。然后,使用shortcut连接这两个Ghost模块的输入和输出。

研究团队表示,这里借鉴了MobileNetV2中的思路:第二个Ghost模块之后不使用ReLU,其他层在每层之后都应用了批量归一化(BN)和ReLU非线性激活。

这里说的Ghost bottleneck,适用于上图Stride= 1情况。对于Stride = 2的情况,shortcut路径由下采样层和Stride = 2的深度卷积来实现。此外,而且出于效率考虑,Ghost模块中的初始卷积是点卷积。

在Ghost bottleneck的基础上,研究团队提出了GhostNet——遵循MobileNetV3的基本体系结构的优势,用Ghost bottleneck替换MobileNetV3中的bottleneck。

网络第一层是具有16个卷积核的标准卷积层,然后是一系列Ghost bottleneck,通道逐渐增加。Ghost bottleneck根据输入特征图的大小分为不同的阶段,除了每个阶段的最后一个Ghost bottleneck是Stride = 2,其他所有Ghost bottleneck都以Stride = 1进行应用。通过两个ghost module与原始输入(shortcut)相加得到最终输出,若shortcut维度不一致,则需要用1x1卷积来调整通道数。并且引入了SElayer,增加了特征图注意力机制。

最后,会利用全局平均池和卷积层将特征图转换为1280维特征向量以进行最终分类。SE模块也用在了某些Ghost bottleneck中的残留层。与MobileNetV3相比,这里用ReLU换掉了Hard-swish激活函数。

研究团队表示,这里的架构只是一个基本的设计参考,进一步的超参数调整或基于自动架构搜索的Ghost模块将进一步提高性能。

四、Experiments

如此思路设计出来的神经网络架构,性能到底如何?研究团队从各个方面进行了验证。

1. 分类任务

GhostNet是为移动设备设计的,文中没有给出在GPU端的开销情况,在华为P30 Pro上进行了GhostNet的实际推理速度测试,并和其他模型进行了对比。和MobileNetV3相比,相同FLOPs的情况下,大约可以提升0.3%~0.5%不等的top-1准确率,相同Latency的情况下,大约可以提升0.5%的top1准确率。
在论文中,他们提供了Ghost模块生成的特征图。下图展示了Ghost-VGG-16的第二层特征,左上方的图像是输入,左红色框中的特征图来自初始卷积,而右绿色框中的特征图是经过廉价深度变换后的幻影特征图。

研究团队表示,尽管生成的特征图来自原始特征图,但它们之间确实存在显着差异,这意味着生成的特征足够灵活,可以满足特定任务的需求。

2. 检测任务

论文在一阶段检测器RetinaNet和二阶段检测器Faster R-CNN上都做了实验,在COCO数据集上达到相同的map精度时,Backbone FLOPs都低于MobibleNet V2 和 V3。

五、Conclusion

为了减少深度神经网络的计算成本,本文提出了一种用于构建有效神经体系结构的新型Ghost模块。基本的Ghost模块将原始的卷积层分为两个部分,并使用较少的过滤器来生成多个固有特征图。

然后,进一步应用一定数量的廉价变换操作以有效地生成重影特征图。在基准模型和数据集上进行的实验表明,该方法是一种即插即用模块,用于将原始模型转换为紧凑模型,同时保持可比的性能。此外,使用本文提出的新模块构建的GhostNet在效率和准确性方面均优于最新的轻量型神经体系结构。

GhostNet,即插即用,欢迎尝试~~

参考文献

  • [1]GhostNet: More Features from Cheap Operations. CVPR2020

  • [2]Searching for MobileNetV3

  • [3]MobileNetV2: Inverted Residuals and Linear Bottlenecks

  • [4]Squeeze-and-Excitation Networks

最后,祝大家炼丹愉快,学习顺利~~
(0)

相关推荐