作者提出为了增强网络的表达能力,现有的工作显示了加强空间编码的作用。在这篇论文里面,作者重点关注channel上的信息,提出了“Squeeze-and-Excitation"(SE)block,实际上就是显式的让网络关注channel之间的信息 (adaptively recalibrates channel-wise feature responsesby explicitly modelling interdependencies between channels.)。SEnets取得了ILSVRC2017的第一名, top-5 error 2.251%
之前的一些架构设计关注空间依赖
Inception architectures: embedding multi-scale processes in its modules
Resnet, stack hourglass
spatial attention: Spatial transformer networks
作者的设计思路:
we investigate a different
aspect of architectural design - the channel relationship
Our goal is to improve the representational power of a network by explicitly
modelling the interdependencies between the channels of its
convolutional features. To achieve this, we propose a mechanism that allows the network to perform feature recalibration, through which it can learn to use global information
to selectively emphasise informative features and suppress
less useful ones. 作者希望能够对卷积特征进行recalibration,根据后文我的理解就是对channel进行加权了。
相关工作
网络结构:
VGGNets, Inception models, BN, Resnet, Densenet, Dual path network
其他方式:Grouped convolution, Multi-branch convolution, Cross-channel correlations
This approach reflects an assumption that channel relationships can
be formulated as a composition of instance-agnostic functions with local receptive fields.
Attention, gating mechanisms
SE block
\({F_{tr}}:X \in R{^{W‘ \times H‘ \times C‘}},{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} U \in {\kern 1pt} {\kern 1pt} {R^{W \times H \times C}}\)
设\(V = [v_1, v_2, ..., v_C]\)表示学习到的filter kernel, \(v_c\)表示第c个filter的参数,那么\(F_{tr}\)的输出\(U = [u_1,u_2,...,u_C]\):
\[{u_c} = {\rm{ }}{{\rm{v}}_c} * X = \sum\limits_{s = 1}^{C‘} {v_c^s} * {x^s}\]
\(v_c^s\)是一个channel的kernel,一个新产生的channel是原有所有channel与相应的filter kernel卷积的和。channel间的关系隐式的包含在\(v_c\)中,但是这些信息和空间相关性纠缠在一起了,作者的目标就是让网络更加关注有用的信息。分成了Squeeze和Excitation两步来完成目的。
Squeeze
现有网络的问题:由于卷积实在local receptive field做的,因此每个卷积单元只能关注这个field内的空间信息。
为了减轻这个问题,提出了Squeeze操作将全局的空间信息编码到channel descriptor中,具体而言是通过global average pooling操作完成的。
\[{z_c} = {F_{sq}}({u_c}) = {1 \over {W \times H}}\sum\limits_{i = 1}^W {\sum\limits_{j = 1}^H {{u_c}(i,j)} }\]
就是求每个channel的均值,作为全局的描述。
Excitation: Adaptive Recalibration
为了利用Squeeze得到的信息,提出了第二个op,这个op需要满足2个要求:一个是足够灵活,需要能够学习channel间的非线性关系,另一个就是能够学习non-mutually-exclusive关系,这个词我的理解是非独占性,可能是说多个channnel之间会有各种各样的关系吧。
\[s = {F_{ex}}(z,W) = \sigma (g(z,W)) = \sigma ({W_2}\delta ({W_1}z))\]
$\delta \(是ReLu,\){W_1} \in {R^{{C \over r} \times C}}\(,\){W_2} \in {R^{C \times {C \over r}}}\(,\)W_1\(是bottleneck,降低channel数,\)W_2\(是增加channel数,\)\gamma\(设置为16。最终再将\)U\(用\)s$来scale,其实也就是加权了。这样就得到了一个block的输出。
\[{x_c} = {F_{scale}}({u_c},{s_c}) = {s_c} \cdot {u_c}\]
\(F_{scale}\)表示feature map \(u_c \in R^{W \times H}\)和\(s_c\)的channel-wise乘法
The activations act as channel weights
adapted to the input-specific descriptor z. In this regard,
SE blocks intrinsically introduce dynamics conditioned on
the input, helping to boost feature discriminability
- Example
SE block可以很方便的加到其他网络结构上。
- Mxnet code
squeeze = mx.sym.Pooling(data=bn3, global_pool=True, kernel=(7, 7), pool_type=‘avg‘, name=name + ‘_squeeze‘) squeeze = mx.symbol.Flatten(data=squeeze, name=name + ‘_flatten‘) excitation = mx.symbol.FullyConnected(data=squeeze, num_hidden=int(num_filter*ratio), name=name + ‘_excitation1‘)#bottleneck excitation = mx.sym.Activation(data=excitation, act_type=‘relu‘, name=name + ‘_excitation1_relu‘) excitation = mx.symbol.FullyConnected(data=excitation, num_hidden=num_filter, name=name + ‘_excitation2‘) excitation = mx.sym.Activation(data=excitation, act_type=‘sigmoid‘, name=name + ‘_excitation2_sigmoid‘) bn3 = mx.symbol.broadcast_mul(bn3, mx.symbol.reshape(data=excitation, shape=(-1, num_filter, 1, 1)))
- 网络结构
- Experiments
参考文献:
[1] Hu, Jie, Li Shen, and Gang Sun. "Squeeze-and-excitation networks." arXiv preprint arXiv:1709.01507 (2017).
欢迎关注公众号:vision_home 共同学习,不定期分享论文和资源
原文地址:https://www.cnblogs.com/haoliuhust/p/8196572.html