近期看了这个模型,对一些参考资料记录在此。
1,算法原理的详细解释可以下 “http://www.sohu.com/a/161793789_642762”中查看
2,原文地址:“https://arxiv.org/pdf/1709.01507.pdf”Squeeze-and-Excitation Networks
3,代码地址:“https://github.com/hujie-frank/SENet”
关键点:
从提特征的角度考虑,为了提取更有用的特征,对不同通道的特征取了权值,强调特征的重要程度。
一般性的特征融合方式为:
wj所在层通过一个卷积核得到Fj特征,wi所在层通过一个卷积核得到Fi特征.
SE-Net提出为同一层不同通道的特征取权重
一个c1*h*w的特征经过任意转换函数的转换,变成了一个c2*h*w的特征(c2为通道数),为了更好地进行特征重组,通过sq(压缩)函数得到1*1*c2的特征,再经过ex(激励)函数得到同样1*1*c2的特征,最好将这个特征用到c2*h*w的原始特征上面(也就是scale函数的作用),得到新的c2*h*w的特征图。
使用SE模块的方式有很多,可以简单地对SE模块进行堆叠,也可以在任何架构的任何深度的原始模块处作为一个插入式的替代,如下:将se模块嵌入Inception网络的时候,如下图,
Global pooling就是sq函数,sigmoid函数得到权重,最后作用于原始特征得到加权后的特征。
Resnet网络的嵌入也类似(虽然有skip-connections模块),如下图:
只是se模块要在加法操作之前,以免影响梯度传播。
参数和计算量稍微有一点点增加,但是效果提升不少。
注:
1,插入网络的前后层所带来的影响?
在较早的层插入,是为了更好地激发类别不可知行为下的信息特征,加强共享层的特征表示,后在较后层,,则是增强特异(专门)性,针对高度类别特异性的不同输入。