SENet是ImageNet 2017(ImageNet收官赛)的冠军模型,和ResNet的出现类似,都在很大程度上减小了之前模型的错误率(具体见附录),并且复杂度低,新增参数和计算量小。下面就来具体介绍一些SENet的神奇之处。
SENet的全称是Squeeze-and-ExcitationNetworks,中文可以翻译为压缩和激励网络。主要由两部分组成:
1. Squeeze部分。即为压缩部分,原始feature map的维度为H*W*C,其中H是高度(Height),W是宽度(width),C是通道数(channel)。Squeeze做的事情是把H*W*C压缩为1*1*C,相当于把H*W压缩成一维了,实际中一般是用global average pooling实现的。H*W压缩成一维后,相当于这一维参数获得了之前H*W全局的视野,感受区域更广。
2. Excitation部分。得到Squeeze的1*1*C的表示后,加入一个FC全连接层(Fully Connected),对每个通道的重要性进行预测,得到不同channel的重要性大小后再作用(激励)到之前的feature map的对应channel上,再进行后续操作。
可以看出,SENet和ResNet很相似,但比ResNet做得更多。ResNet只是增加了一个skip connection,而SENet在相邻两层之间加入了处理,使得channel之间的信息交互成为可能,进一步提高了网络的准确率。
SENet可以随意插入到任何网络中,提升效果也是比较显著的,论文中给的结果是有0.4%~1.8%范围的error减小。
训练的曲线也很漂亮,最下面橙色的即为SENet的结果:
附录:
ImageNet分类Top5错误率:
2014 GoogLeNet 6.67%
2015 ResNet 3.57%
2016 ~~~ 2.99%
2017 SENet 2.25%
SENet官方Caffe实现:https://github.com/hujie-frank/SENet
民间TensorFlow实现:https://github.com/taki0112/SENet-Tensorflow
民间PyTorch实现:https://github.com/moskomule/senet.pytorch
如果还有其他问题,欢迎讨论。