轻量级网络GhostNet--对卷积的新设计解决特征图冗余的问题

论文地址:华为诺亚方舟实验室 2020 CVPR

《GhostNet: More Features from Cheap Operations》

该论文提供了一个全新的Ghost模块,旨在通过廉价操作生成更多的特征图。基于一组原始的特征图,作者应用一系列线性变换,以很小的代价生成许多能从原始特征发掘所需信息的“Ghost”特征图(Ghost feature maps)。该Ghost模块即插即用,通过堆叠Ghost模块得出Ghost bottleneck,进而搭建轻量级神经网络——GhostNet。

亮点

为了减少网络计算量,作者将传统的卷积分成两步进行,首先通过传统的卷积生成channel较小的特征图以较少的计算量,然后在得到的特征图的基础上,通过cheap operation(depthwise conv,廉价操作)再进一步减少计算量,生成新的特征图,最后将两组特征图拼接到一起,得到最终的output。

卷积操作是卷积-批归一化BN-非线性激活全套组合,而所谓的线性变换或者廉价操作(cheap operation)均指普通卷积,不含批归一化和非线性激活。

观点提要

在效果较好的CNN模型中,特征图存在冗余是非常重要的,但是很少有人在模型结构设计上考虑特征图冗余问题;

从特征图冗余问题出发,提出一个仅通过少量计算(cheap operations)就能生成大量特征图的结构——Ghost Module;

Ghost Module通过一系列线性操作(a series of linear transformations)生成特征图,其中经过线性操作生成的特征图称为ghost feature maps,而被操作的特征图称为intrinsic feature maps;

Ghost Module的优点:

即插即用:Ghost Module是一个即插即用模块,可以无缝衔接现有的CNN中;

使用Ghost Module组成的Ghost bottlenecks,设计出GhostNet,在ILSVRC-2012上top-1超过Mobilenet-V3,并且参数更少。

特征图冗余

本文作者在观察ResNet50第一个残差块输出的特征图时,发现有许多输出特征很相似,图一中的红、绿、蓝框的特征图,作者认为很相似,基本只要进行简单的线性变换就能得到,而不需要进行复杂的非线性变换得到;作者该对其中的一个特征图可以通过廉价操作(图中用扳手表示)将另一特征图变换而获得,可以认为其中一个特征图是另一个的“Ghost”。因为,本文提出并非所有特征图都要用卷积操作来得到,“Ghost”特征图可以用更廉价的操作来生成。

Ghost Module

常规卷积:

常规卷积:卷积-批归一化BN-非线性激活,理论计算量=k*k*c*n*w'*h';

 Ghost Module:

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

由于主流CNN计算出的中间特征图中存在大量的冗余,作者提出减少所需的资源,即用于生成它们的卷积核。

步骤

  • 首先用常规卷积得到本征特征图(intrinsic feature maps)Y',这部分的运算量约等于(忽略偏置项);

  • 然后将Y'每一个通道的特征图  ,用\phi _{ij}操作来产生Ghost特征图Y_{ij}

  • 最后将第一步得到的本征特征图和第二步得到的Ghost特征图拼接(identity连接)得到最终结果OutPut。

Ghost Module分为两步操作来获得与普通卷积一样数量的特征图:

Step1:少量卷积(比如正常用128个卷积核,这里就用64个,从而减少一半的计算量);

Step2:cheap operations,用图中的Φ表示,Φ是诸如3*3、5*5的卷积,并且是逐个特征图的进行卷积(Depth-wise convolutional,深度卷积)。 

例子

假设输入特征图的shape为[28,28,6],首先对输入特征图使用1*1卷积下降通道数,shape变为[28,28,3];再使用3*3深度卷积对每个通道特征图提取特征,shape为[28,28,3],可以看作是经过前一层的一系列线性变换得到的;最后将两次卷积的输出特征图在通道维度上堆叠,shape 变为 [28,28,6];

计算量

假设输入数据tensor是c*h*w,分别为输入channel、特征图高和宽,经过一次卷积后输出数据的张量为n*h'*w',分别为输出channel、输出特征图的高和宽,常规卷积核大小为k,线性变换卷积核大小为d,经过s次变换,那么普通的卷积操作(bn和relu不纳入计算量对比这里)的计算量与Ghost 模块的计算量对比为:

在这里插入图片描述

n/s是第一次变换时的输出通道数目,s-1是因为恒等映射不需要进行计算,但它也算做第二变换中的一部分,因此Ghost 模块之所以能省计算量。

参数量

计算卷积核的参数量:

Ghost Bottlenecks

利用Ghost模块的优势,作者介绍了专门为小型CNN设计的Ghost bottleneck(G-bneck)。

如图所示,Ghost bottleneck似乎类似于ResNet中的基本残差块(Basic Residual Block),其中集成了多个卷积层和shortcut。

Ghost bottleneck主要由两个堆叠的Ghost模块组成:

第一个Ghost模块用作扩展层,增加了通道数,这里将输出通道数与输入通道数之比称为expansion ratio;

第二个Ghost模块减少通道数,以与shortcut路径匹配,然后,使用shortcut连接这两个Ghost模块的输入和输出。

这里借鉴了MobileNetV2,第二个Ghost模块之后不使用ReLU,因为深度卷积后再加ReLU效果会变差,可能是深度卷积输出太浅了, 应用 ReLU会带来信息丢失,其他层在每层之后都应用了批量归一化(BN)和ReLU非线性激活。

上述Ghost bottleneck适用于stride= 1,

对于stride = 2的情况,shortcut路径由下采样层和stride = 2的深度卷积(Depthwise Convolution)来实现。

出于效率考虑,Ghost模块中的初始卷积是逐点卷积(Pointwise Convolution)。

GhostNet 

基于Ghost bottleneck,作者提出GhostNet,如下表所示:

作者遵循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中的残留层;

与MobileNetV3相比,这里用ReLU换掉了Hard-swish激活函数。尽管进一步的超参数调整或基于自动架构搜索的Ghost模块将进一步提高性能,但下表所提供的架构提供了一个基本设计参考。

实验结果提炼

Ghost模块消融实验:当s=2、d=3的时候,Ghost模块的性能优于更小或更大的Ghost模块。这是因为大小为1的内核无法在特征图上引入空间信息,而较大的内核(例如d=5或d=7)会导致过拟合和更多计算。

特征图可视化:生成的特征足够灵活,可以满足特定任务的需求。

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

硬件推理速度:作者的模型总体上胜过其他最新模型,例如谷歌MobileNet系列,ProxylessNAS,FBNet和MnasNet。

COCO目标检测数据集:GhostNet可以在单阶段的RetinaNet和两阶段的Faster R-CNN框架上达到和MobileNetV2和MobileNetV3类似的mAP。

实现

tensorflow代码实现

pytorch代码实现 

参考

 华为-2020-CVPR-最新轻量级网络-GhostNet分析

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

 

仅为学习记录,侵删!

  • 4
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖虎记录学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值