单词

  1. interleaving: 交叉
  2. frontier 前沿
  3. integrating 集成
  4. incorporates 包含了
  5. recalibration 校准
  6. depicted 描述
  7. aggregation 聚合
  8. agnostic 不可知论的
  9. accumulated 积累
  10. regulating: 调节
  11. cardinality 基数
  12. Algorithmic 算法
  13. forgo 放弃
  14. tackle 解决
  15. viable 可行的
  16. utility 实用
  17. subsequent 后续的
  18. exploiting 利用
  19. mitigate 减轻
  20. sophisticated 复杂的
  21. criteria: 标准
  22. non mutually exclusive:非相互排斥
  23. ablation 消融
  24. robust 健壮的
  25. empirical 经验

论文

《Squeeze-and-Excitation Networks》

提升CNN能力:

  • 空间信息的表征能力;
  • channel之间关系的处理;

本文主要从第二点出发,希望增强有用特征,压缩无用特征。

论文思想

image.png
上图展示的是SE-Block,通过堆叠该Block可以构造SE network。(貌似有点像LRN)

  • 对于任意将输入SE-Net_2017 - 图3转为feature maps SE-Net_2017 - 图4的转换SE-Net_2017 - 图5SE-Net_2017 - 图6首先将会被进行压缩操作SE-Net_2017 - 图7
  • 压缩操作实现将每个channel的feature map(SE-Net_2017 - 图8)信息进行聚合,产生channel 描述符(显然就是一个数字);
  • 然后进行激发操作SE-Net_2017 - 图9,其采用简单的自选门机制,以嵌入信息(就是上一个操作的输出)作为输入,产生每个通道的调制权值;
  • 利用通道权值信息,重新调整SE-Net_2017 - 图10得到SE-Net_2017 - 图11

    转换函数SE-Net_2017 - 图12

    其实就是一个卷积操作。

    Squeeze压缩

    采用global average pooling:
    image.png
    其中:SE-Net_2017 - 图14表示的是输出特征SE-Net_2017 - 图15SE-Net_2017 - 图16个channel对应的feature map,SE-Net_2017 - 图17表示压缩后的channel descriptor。

    Excitation激发

    image.png
    其中:SE-Net_2017 - 图19表示Relu激活函数,SE-Net_2017 - 图20SE-Net_2017 - 图21实现方式:利用两个全连接层产生botttleneck(第一个FC会使维度降低r倍,第二个FC会使维度增加回来),从而降低模型复杂度,增强模型泛化能力。
    激发之后,将会将权重分配到SE-Net_2017 - 图22中,产生SE-Net_2017 - 图23
    image.png
    其中粗体表示向量,细体表示标量。SE-Net_2017 - 图25表示的是channel-wise的乘法操作。
    image.png image.png

    优点

  • 能够提升网络性能;

  • 增加的计算量很小;

    代码实现

    1. import torch.nn as nn
    2. class SE_Block(nn.Module):
    3. def __init__(self, ch_in, reduction=16):
    4. super(SE_Block, self).__init__()
    5. self.avg_pool = nn.AdaptiveAvgPool2d(1) # 全局自适应池化
    6. self.fc = nn.Sequential(
    7. nn.Linear(ch_in, ch_in // reduction, bias=False),
    8. nn.ReLU(inplace=True),
    9. nn.Linear(ch_in // reduction, ch_in, bias=False),
    10. nn.Sigmoid()
    11. )
    12. def forward(self, x):
    13. b, c, _, _ = x.size()
    14. y = self.avg_pool(x).view(b, c)
    15. y = self.fc(y).view(b, c, 1, 1)
    16. return x * y.expand_as(x)