SKNet——《Selective Kernel Networks》
论文地址:https://arxiv.org/abs/1903.06586
代码地址:https://github.com/implus/SKNet
9012年了,图像分类这一基础问题也越来越难做了,本次论文主要是看的CVPR2019的一篇图像分类领域的论文,主要是看文章的思想,毕竟图像这几个领域的各种block可以到处拿着用,总会有管用的当,(不管用看起来也很花里胡哨了,手动狗头),当然在论文中SKNet显示出良好的效果,下面就分析一下究竟是怎么个操作吧。
首先文章在Introduction部分讨论了一下Receptive Fileds感受野,主要是不同大小RF对于不同尺度的目标有不同的效果,然后文章目的是使得网络可以自动地利用对分类有效的RF了解到的信息。所以如何做到这一点呢,因为网络训练好了之后参数就固定了,大多数的设计都是多尺度的信息就直接全部应用了,在segmentation领域尤为明显,这篇文章的巧妙之处就是对于不同尺度的信息有所取舍吧。
首先SENet【1】大家应该有所涉猎,SE Block算是Channel Attention比较典型的网络,大致介绍下,很好理解的。
如上图所示从c2-c2之间的操作,通过GAP(全局平均池化)作为每个channel权重的初始值,然后使用全连接层训练出新的权重然后再附加到原始的Feature Map上,是不是很简单=。=这就算的上是CNN中基础的channel attention。
SKNet这篇文章中的attention机制借鉴的SENet中的机制,然后了解了这个知识点,就可以看懂SKNet究竟是怎么灵活地进行选择了,见下图:
对于原始输入C,使用两个不同size的卷积核来使用不同的感受野,这里3x3使用的是3x3的卷积核,5x5论文中说可以使用3x3的空洞卷积来节省计算量,空洞卷积在Segmentation中也已经被广泛的使用了。
然后得到了两个特征图,特征图进行element-wise summation(其实就是add啦),然后得到了新的特征图U,U使用GAP得到了S
z则是由s加一个全连接获得
这里的z相当于一个squeeze操作,即z的维度比c要小,这里z的维度设为d,d的取值为
其中r,L是人为设定的,r——将维度进行压缩的ratio,比如原始的channel数目为512,r设置为4,则z这一层的全连接的神经元数目为128,就是这么一个简单的道理=。=
至此都比较好理解,后面就是比较巧妙的部分了,即有几个尺度的特征图(图中的例子是两个),则将squeeze出来的特征再通过几个全连接将特征数目回复到c,(假设我们用了三种RF,我们squeeze之后的特征要接三个全连接,每个全连接的神经元的数目都是c)这个图上应该在空线上加上FC会比较好理解吧,然后将这N个全连接后的结果拼起来(可以想象成一个cxN的矩阵),然后纵向的(每一列)进行softmax,如图中的蓝色方框所示——即不同尺度的同一个channel就有了不同的权重。
上面就是主要的SK的思想了,但是这样的话感觉只是进行了不同尺度同一channel之间的比重关系,能否将SE中的同一尺度的不同channel的权重也考虑进去呢?假设所有的a,b,c..全部先进行一个softmax然后再纵向进行softmax,或者直接全部进行softmax然后再进行scale?这个可以稍微考虑一下=。=
【1】《Squeeze-and-Excitation Networks》