GhostNet(CVPR2020)

参考:https://www.wanglichun.tech/2020/03/08/ghostnet/

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

作者解读:https://zhuanlan.zhihu.com/p/109325275

开源代码:pytorch :https://github.com/iamhankai/ghostnet.pytorch/blob/master/ghost_net.py


       本篇论文是发表于CVPR2020的一篇轻量级网络的论文,作者是华为诺亚方舟实验室,文章的总体思路比较清晰,为了减少网络计算量,作者将传统的卷积分成两步进行,首先利用较少的计算量通过传统的卷积生成channel较小的特征图,然后在此特征图的基础上,通过cheap operation(depthwise conv)再进一步利用较少的计算量,生成新的特征图,最后将两组特征图拼接到一起,得到最终的output,最终实验效果还不错,相同计算量的情况下比MobileNet- V3的效果还要更好一些。


虽然说mobileNet或者是shuffleNet提出了使用depthwise或者是shuffle等操作,但是引入的1x1卷积依然会产生一定的计算量

为什么1x1依然会产生较大的计算量?看卷积计算量的计算公式n∗h∗w∗c∗k∗k,可以发现,由于c和n都是比较大的,所以会导致这个计算量也是比较大的,但是作者在分析输出的特征图的时候发现,其实有些特征图是比较相似的,如下所示,作者认为可以通过简单的变换得到。

GhostNet(CVPR2020)_第1张图片

基于此,作者得到启发,是不是每张图都需要用这么大的计算量去得到?是否可以通过cheap transformation得到这些相似的特征图?

于是乎,就诞生了GhostNet。Ghost就是说相似的特征图,犹如另一个的幽灵,可以通过简单的线性变换得到。

1.Ghost模块

GhostNet(CVPR2020)_第2张图片

对于某个特征层,只用卷积操作生成部分真实的特征层(真实特征层),剩余的特征层(幻象特征层)通过对真实特征层进行线性操作获得,然后将真实特征层与幻象特征层拼接到一起组成完整的特征层。

2. 复杂度分析

假设我们输入特征图的尺寸是h*w*c,输出特征图的尺寸是h'*w'*n,卷积核大小为k*k

在cheap operation变换中,我们假设特征图的channel是m,变换的数量是s,最终得到的新的特征图的数量是n,那么我们可以得到等式:

n=m∗s

由于Ghost的变换过程中最后存在一个恒等变换(Identity),所以实际有效的变换数量是s-1,所以上式可以得到如下公式:

m∗(s−1)=n/s∗(s−1)

所以我们便可以计算得到如下结果:

GhostNet(CVPR2020)_第3张图片

 Ghost模块具有两个超参数

① s:用于生成 m=n/s 个内在特征图,

② 以及用于计算幻影特征图的线性运算的  d*d(即深度卷积核的大小)。

 实验得s=2;d=3GhostNet(CVPR2020)_第4张图片

 深度可分卷积vs幻象模块
深度可分卷积用深度卷积处理每个特征通道上的空间信息,然后用点卷积进行通道间的特征融合。而幻象模块用正常卷积生成部分真实特征层,然后由真实特征层线性变换得到幻象特征层,最终由真实特征层和幻象特征层组成完整特征层

3.GhostNet bottleneck

下图是Ghost bottleneck结构图,很类似resnet结构,不同的是channel是先升维再降维。

 GhostNet(CVPR2020)_第5张图片

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)。

Difference from existing methods

  • 在MobileNet等网络中,基本都会使用1x1的卷积,而在GhostNet中,可以使用任何尺寸的卷积。
  • 在MobileNet中,使用了pointwise+depthwise,但是在GhostNet中,可以使用正常的卷积。
  • Ghost使用了更多的线性变换。

4.GhostNet:

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所提供的架构提供了一个基本设计参考。

GhostNet(CVPR2020)_第6张图片

 

你可能感兴趣的:(经典神经网络结构,神经网络)