SENet系列之SKNet


一顿火锅,足以忘却暂时的不愉快。

闲谈

现在感觉每天都有新的东西需要学习,今天学习这个,明天学习那个。我觉得这样非常不好,学习什么都是在表面游走,不会有一个好的成果。具体怎么解决这个问题,我还不是很清楚,有建议的小伙伴欢迎留言交流啊🤔。

前言

SENet:
Paper: https://arxiv.org/abs/1709.01507
Code: https://github.com/hujie-frank/SENet

SKNet:
Paper: https://arxiv.org/abs/1903.06586?context=cs
Code: https://github.com/implus/SKNet

SENet系列文章

  • SENet
  • cSENet(本质相同,升降维度的超参数 r 取值为2或16),sSENet(空间角度引入注意力机制),csSENet(通道和空间两个角度同时引入注意力机制)
  • SKNet

sSENet空间角度引入注意力机制,这个SSE模块在今年十月份的论文"Non-deep Networks"用到,用12层的网络在ImageNet上到达了80%(提出一个非深度网络设计的SSE模块构建了一种新型的模块RepVGG-SSE),在CIFAR10到达了96%,CIFAR100到达了81%。

SENet

SENet(Squeeze-and-Excitation Networks)是2017ImageNet分类比赛冠军模型。


SENet的思想就是使用全局信息来增强有用的信息,同时抑制无用的信息,也就是对不同的通道进行不同的加权方法,这样有用的特征被放大,没用的就会被抑制。下面这个图就是Squeeze and Excitation Modual的主要框架。上一层输出的feature map X,它的维度是H’,W’,C’分别代表了长,宽和通道数,然后经过一个传统的卷积,会得到U,它的维度是H,W,C。下面就要进行一个SE结构。在正常的过程中加入一个旁路分枝,然后进行Squeeze操作,对U进行全局池化,压缩成一个标量。然后再进行Excitation操作,这个输出和最开始的U进行乘法,最后就得到了一个被重新加权后的feature map。

SENet与Inception和ResNet进行整合


SE block与其他架构进行整合,第一张是与Inception整合,第二张是与ResNet整合。一个是正常的Inception Modual,另一个是加入了SE block。第二个有了H✖️W✖️C的feature map,然后进行Squeeze,全局平均池化(论文里有实验),把H✖️W✖️C变为1✖️1✖️C,然后通过FC(全连接)降维,用r分之1来降低计算量,通过实验r=16效果最好。再经过ReLU,再经过FC升维,最后通过sigmoid,每个通道得到一个0到1的一个概率,就可以和原来的feature map进行一个乘法,最后输出加权后的feature map。这个ResNet与SE block 整合。和Inception整合的没有太大的区别,就是多了残差连接,SE的操作用在残差上。

SKNet

Selective Kernel Network”简称SKNet,它和SENet都是一个团队提出来的。

SKNet的思想就是利用非线性的方法整合信息,以实现动态调整感受野的大小,就是根据实际内容,找出一个最适合的感受野去适应图片。它的核心方法是Split-Fuse-Select这三个步骤。

Split-Fuse-Select

  • Split: 分出多个支流,每个支流都有不同大小的filter/kernel,以此来实现不同大小的感受野;
  • Fuse: 整合支流的信息,然后获得selection weights;
  • Select: 通过selection weights来聚合feature map



这是论文给出的架构,非常直接明了。

首先是X分出来两个支流,分别是U1,U2,然后对U1,U2进行整合得到U,然后对U进行全局平均池化得到S,在对S进行FC运算得到Z,然后在分出来两个小的分支a和b,然后再对这两个小的分支之间进行softmax,然后计算一下,就是上面的计算,得到一黄一绿的矩阵,然后再用一个加法运算的合并。

如何通过图片大小去调节感受野的大小呢?
首先是Split的这个过程,分出来的两个支流,它们的感受野是不同的,如果图片比较大的话,就会选择感受野较大的支流,小的话,就会选择感受野小的支流,还有就是Select操作的整合,一部分来自上面,一部分来自下面,他们的比例是动态选择的。


这里是SKNet的完整架构。M代表的是分支数,G为group数量。这是三个网络结构图。可以看到SENet是在(1×1卷积+3×3卷积+1×1卷积)完整卷积操作后直接加入全连接层。而SKNet则是替代了ResNext中3*3卷积部分。从参数量来看,由于模块嵌入位置不同,SKNet的参数量与SENet大致相同。计算量也略有所上升。


上表是与其他网络的横向对比,可以看出SKNet与其他常见模型,包括SENet。可以看到SKNet取得了最好的结果。


分析了D和G对模型的影响,可以看出最好的情况时3乘3,D=2,G=32和5乘5,D=1,G=64这两种情况。


然后是不同组合对模型的影响,论文得出提升分支数(M),错误率总体减少,使用SK比不使用SK更好,在使用SK后,提升分支数对于模型精度的提升变得微小。

然后还分析了attention weights,就是从Z分出来的两个小支流,论文得出当物体的大小增加时,attention weights在5✖️5路径总体也增加,也就意味着感受野增加。


上图是attention weights平均值的差值。

论文得出在早期的layer里,物体变大,更大的attention 增加。在后期的layer里,这个规律就不存在了,也就意味着后期的layer的SK可以替换成其他的单元。

总结

  • SENet提出了Sequeeze and Excitation block,而SKNet提出了Selective Kernel Convolution.
  • SENet和SKNet都是可直接嵌入网络的轻量级模块,比如ResNet、Inception、ShuffleNet,实现精度的提升。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

进阶媛小吴

规则简单易懂,粗暴却完美!

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

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

打赏作者

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

抵扣说明:

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

余额充值