ghost论文笔记

在此之前成功的CNN模型有个重要的特点就是他们的特征图冗余。本文目的是用ghost module通过很少的计算生成更多的feature map。在和mobilenet v3相似的计算量下, 取得了更好的表现(75% top1accuracy)

介绍:

例如从下图中可以看出resnet50生成的特征图
在这里插入图片描述
从图中可以看出有很多相似的。这就是特征图的冗余,上图中的工具就是ghost,以很少的计算获得新的特征图。实验结果表明,提出的ghost模块能够减少计算成本,同时保证相似的识别能力。本文提出了ghost module 和ghostnet。

related work:

模型压缩:模型压缩能够减少计算,能量和存储计算。

紧凑的模型设计:mobilenetv1,v2,v3,shufflenet。尽管这些模型取得了很少的floating point operations(flops)浮点数计算次数,但是特征图之间的相关性和冗余性没有被很好的利用,而且保留的1x1卷积仍然会占用内存和flops。

3方法:

3.1ghost模块:

输入是X(cxhxw),c是channel数,输出是Y(h‘xw’xn)

设卷积核大小为kxk,传统的卷积方式的浮点数计算为nh’w’ckk。
在这里插入图片描述

ghost模块:

在这里插入图片描述
步骤,假设目标是生成通道数为n的output。

** 首先按传统卷积生成identity map,通道数为m,大小<n,**

** 再对这通道数为m的identity map做处理,对它的每一层分别采用3x3或者5x5的卷积,就又生成一套通道数为m的特征图。重复操作共生成(s-1)套新的特征图。加上原来的identity map,共生成s套特征图,通道数为sm=n。**

复杂性分析:(输入是X(cxhxw),c是channel数,输出是Y(h‘xw’xn))

把传统卷积换成ghost后,理论的加速率
在这里插入图片描述

 d是ghost中采用的卷积核size,k是普通卷积采用的卷积核size,s<<c。

模型压缩率
在这里插入图片描述

3.2ghost bottleneck

在这里插入图片描述

左图:第一个module增大channel,第二个module减小channel。channel最后和前面的shortpath匹配。shortpath中不变。

右图:shortpath中还需要进行下采样。

bottleneck和bottleneck之间的通道数变化通过ghost module中的第一个1x1的普通卷积实现。

3.3ghostnet

整体框架:

#exp为Ghost Bottleneck中第一个Ghost module的输出特征图数量
在这里插入图片描述
堆叠ghost bottleneck,在每个阶段的最后用stride=2的ghost bottleneck。

SE(squeeze and excite)module:

文中还使用了se模块,Sequeeze-and-Excitation(SE) block并不是一个完整的网络结构,而是一个结构快,可以嵌入到其他神经网络模型中。SEblock的核心思想在于通过网络根据loss去学习特征权重,使得有效的feature map权重大,无效或效果小的feature map权重小的方式训练模型达到更好的结果。
在这里插入图片描述
SEblock的工作就是将上图中左边的X特征图经过一系列运算得到上图中右边彩色的x̅,可将整个运算过程分为四步,接下来结合论文中的公式对这四个步骤做一个总结:
1.Ftr:Ftr这一步是转换操作,实际上它并不属于SEblock,在原网络中这一步仅仅是一个标准的卷积操作而已;且后面可以看到在定义SqueezeExcite函数时没有这一步操作。

2.Fsq:x经过 Ftr得到U。接下来是Squeeze操作,也就是简单的一个global average pooling:所以 Fsq 操作将H×W×C的输入转换成1×1×C 的输出,这一步相当于获取C个特征层的数值分布情况,或者叫全局信息。

3.Fex:这一步操作即是Excitation操作,计算过程将括号从里向外看。首先将第2步的结果Z乘以一个系数矩阵W1,这是一个简单的全连接层操作,W1的维度是C/r × C,这个r是一个缩放参数,目的是为了减少channel个数从而降低计算量z的维度是1×1×C,所以W1×z的结果就是1×1×C/r;然后再经过一个ReLU层,输出维度不变;

然后再与W2相乘,这也是一个全连接层操作。W2的维度是 C×C/r,因此输出的维度是1×1×C;最后再经过sigmoid函数得到结果s。这两个全连接层的作用就是融合各通道的feature map信息

4.Fscale:第三步得到的结果s的维度是1×1×C。这个s其实是SEblock的核心,用它来刻画特征层U中的C个feature map的权重,而且这个权重是通过前面这些全连接层和非线性层学习得到的,因此可以end-to-end训练。

在得到s之后,就可以对原来的特征层U进行操作,即channel-wise multiplication。把Uc矩阵中的每个值都乘以Sc故特征层U中的C个特征图都被S的每层对应的一个权重系数相乘。

经过以上四步后,将原始特征层X的每个通道分别乘以对应的权重系数,使得有效的特征图占比更大,无效或效果较小的特征图占比降低。整体来说仅仅是将特征图内的数值进行了调整,其大小及通道数均不发生改变。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值