文章整理自其他网文,仅作学习,若有侵权请联系,感谢
SENet
Motivation
目前的卷积是在 2D 空间中做卷积,其本质上来说只建模了图像的空间信息,并没有建模通道之间的信息。于是,作者就尝试对 Channel 之间的信息进行显式建模。
网络结构
左边为 C'×H'×W' 的特征图,经过一系列卷积,pooling操作 Ftr 之后,得到 C×H×W 大小的特征图。接下来进行一个 Sequeeze and Excitation block。
Sequeeze:对C×H×W 进行 global average pooling,得到1×1×C 大小的特征图,这个特征图可以理解为具有全局感受野。
Excitation :使用一个全连接神经网络,对Sequeeze 之后的结果做一个非线性变换。
特征重标定:使用 Excitation 得到的结果作为权重,乘到输入特征上。
总结
总体来说思路很清晰,Motivation 也有一定的道理。此外,这个结构可以作为任意网络的子模块添加进去以提升精度,而且引入的计算量非常小。
但是有一个问题在于,卷积过程本身在 Channel 之间也会有一个乘数,这个乘数是不是可以理解为建模了Channel 之间的信息呢?
如果作者对前面的卷积使用 C 路的 Group Convolution,然后与加入Sequeeze and Excitation block 前后的精度进行对比,或许文章会更有说服力一些。
最终结果很不错,计算量几乎没变化,但是精度上升了,取得了 ImageNet 2017 的冠军。
SKNet
Motivation
SKNet 使用了两个思路来提高精度:
1. 很多网络使用了各种 Trick 来降低计算量,比如 ResNeXt,计算量大大减少,精度却略有提升。那么如果不牺牲那么多计算量,能否精度提高一些呢?比如使用大一点的Kernel,如 5×5 的卷积提升精度;
2. 结合现在普遍使用的 Attention 操作。
加了上面两个操作之后,显然计算量会上去,于是作者再加了一个Group Convolution 来做 trade off。
网络结构
上述结构可以分为三个步骤:
Split:输入为 c×h×w 的特征图,和均表示 Group Convolution。这里使用 Group Convolution 以减少计算量。注意,这里两路 Group Convolution 使用的卷积核大小不一致,原因在于 Motivation 中说的第一点,提升精度。
Fuse:通过 Split 操作分成两路之后,再把两路结果进行融合,然后就是一个 Sequeeze and
Excitation block。
Select:Select 模块把 Sequeeze and Excitation block 模块的结果通过两个 softmax 以回归出 Channel 之间的权重信息。然后把这个权重信息乘到和中。这个过程可以看做是一个 soft attention。最好把两路的特征图进行相加得到输出特征图V。
总结
整体感觉融合了较多的trick,Select 部分使用 soft attention 和 Sequeeze and Excitation block 中对特征图加权蛮像的,区别在于 Sequeeze and
Excitation block 考虑的是 Channel 之间的权重,而 Select 部分的 attention 不仅考虑了 Channel 之间的权重,还考虑了两路卷积的权重。
同样的,SKNet可以很容易地嵌入到其他网络结构中。下图是基于ResNeXt-50 的 SENet 和 SKNet 计算量,以及精度对比。可以看到,计算量(GFLOPs)只是略有上升,精度方面相比于 ResNeXt-50 涨了 1.4% 左右:
网友评论