CVPR2020论文解读—华为高效轻量级网络GhostNet, 性能超越谷歌MobileNetV3
AI研习图书馆,发现不一样的精彩世界
文章出处:华为诺亚方舟实验室,CVPR2020
论文地址:https://arxiv.org/abs/1911.11907
源码地址(TF):https://github.com/huawei-noah/ghostnet
源码地址(PT):https://github.com/iamhankai/ghostnet.pytorch
由于应用设备内存以及计算资源限制,将常规的CNN架构部署到移动设备是件非常困难的事。在将深度神经网络运用到移动设备的过程中,怎么保证性能不减,且计算量变得更少,成为研究的重点之一。常用的方法有剪枝、量化、蒸馏以及设计一些高效轻量的神经网络等。目前已经出现很多经典高效的轻量形卷积神经网络,例如MobileNet,ShuffleNet等。
近年来,虽然涌现了许多移动端网络架构设计,但是大部分都是从减少卷积计算量的思路出发,例如:谷歌出品的Mobilenet系列是提出了「Depthwise+Pointwise卷积」来减少计算量,旷视则是提出「通道混洗」,利用转置操作,均匀的shuffle各个通道进行卷积。Mixnet是在Mobilenet基础上,关注了卷积核的大小,通过「不同大小卷积核」所生成的卷积图在不增加计算量前提下进一步提高精度。
而华为的Ghostnet则是聚焦于「特征图冗余」,希望通过少量的计算(即文中的cheap operation)得到大量特征图。而Ghostnet在相同计算量下,精度超越了Mobilenetv3,达到了75.7%分类准确率( ImageNet ILSVRC-2012)。
何为特征图冗余?
在将深度神经网络应用到移动设备的浪潮中,怎么保证性能不减,且计算量变得更少,成为研究的重点之一。深度卷积神经网络通常是由大量的卷积块所组成的,导致大量的计算成本。尽管最近的工作,例如MobileNet和ShuffleNet引入了深度可分离卷积或混洗操作,以使用较小的卷积核(浮点运算)来构建有效的CNN,其余1x1卷积层仍将占用大量内存和FLOPs。
华为诺亚方舟实验室的团队没有沿着这条路继续前进,而是另辟蹊径:
“特征图对”中的一个特征图,可以通过廉价操作由另一特征图变换而获得,则可以认为其中一个特征图是另一个的“幻影”。
这是不是意味着,并非所有特征图都要用卷积操作来得到?“幻影”特征图,也可以用更廉价的操作来生成?
于是,就有了GhostNet的基础——Ghost模块,用更少的参数,生成与普通卷积层相同数量的特征图,其需要的算力资源,要比普通卷积层要低,集成到现有设计好的神经网络结构中,则能够降低计算成本。
因此,本文提出了一种更高效的轻量形卷积神经网络GhostNet,其核心思想是用更少的参数生成更多的特征图。
1. Ghost 模块
,其中
代表输入通道,
和
分别代表高度和宽度,当我们用一个具有
个滤波器,内核大小为
的卷积核
跟原始特征图
做卷积操作时,可以得到输出特征图
.其中
为偏置项。
,当输入通道数和滤波器数量为512以上时,可想而知,为了得到这么多数量的特征图,计算代价得多大。
如上图所示,先通过常规卷积,生成部分特征图。再在这特征图基础上得到新的特征图。最后两部分特征图在通道维度上连结,生成最终的output。
下面讲解一下作者是如何进行操作的。
,我们用一个具有
个滤波器,内核大小为
的卷积核
跟原始特征图
进行卷积运算,得到输出特征图
.
. 为了进一步的获得剩余的
个"冗余"特征图,作者对输出的这
个特征图分别进行一系列廉价的线性运算,最终得到
个特征图。
表示
中的第
个特征图,
表示对第
个特征图进行第
个线性运算,用于生成第
个幻影(ghost)特征图。于是原始输出特征图可以被表示为:
和参数压缩率
.
这里,
,其他符号含义同上所述。其中
减掉的“1”即为图2的indentity部分。可以发现,当
且
时,我们可以将上述公式进一步地简化为:
--进行线性运算的次数。作者这里主要是通过线性运算
来替代部分原始的卷积操作,从而将计算量和参数量降下来。
Ghost本质可以理解为depth wise convolution 和 point wise convolution的重新组合。Ghost module 中的primary conv是一个point wise convolution;;Ghost module的cheap opration 是一个depth wise convolution。
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模块将进一步提高性能。
如此思路设计出来的神经网络架构,性能到底如何?研究团队从各个方面进行了验证。
1. 分类任务
研究团队表示,尽管生成的特征图来自原始特征图,但它们之间确实存在显着差异,这意味着生成的特征足够灵活,可以满足特定任务的需求。
2. 检测任务
论文在一阶段检测器RetinaNet和二阶段检测器Faster R-CNN上都做了实验,在COCO数据集上达到相同的map精度时,Backbone FLOPs都低于MobibleNet V2 和 V3。
为了减少深度神经网络的计算成本,本文提出了一种用于构建有效神经体系结构的新型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