这篇论文主要是把注意力机制应用在了图像分类上,其实作者的思路很简单,就是在原有的ResNet网络的基础上,添加了一些新的分支:Soft Mask Branch。
废话不多说,下面直接看看论文里作者的介绍。略过前面的一堆废话不提,直接看第3部分。
3. Residual Attention Network
首先,作者大概介绍了一下Residual Attention Network是怎么回事,然后介绍说自己用stacking Attention Modules方法的原因,因为和最简单的只使用一次soft weight mask方法相比,stacking 具有很多优势。
在有些图片中,由于背景复杂,环境复杂,这时候就需要对不同的地方给与不同的注意力。如果只使用一次soft weight mask分支,那么可能需要指数级的通道数来捕捉这些信息。而且只有一次机会,有些时候有可能会导致捕捉失败。
而在Residual Attention Network中,因为主网络的每个分支都有自己单独的mask分支,所以可以缓解上面说的这些情况。
3.1. Attention Residual Learning
作者在这一部分介绍了为什么要借鉴使用Residual 结构,然后给出了公式。主要有两个原因:原始的Attention Modules由于使用点乘的形式,会导致效果明显下降。首先,和mask分支进行点乘会导致在deep layers中提取到的特征的数值明显下降。第二,soft mask有可能会破坏主网络的有些好的性质,比如the identical mapping of Residual Unit。(ps:关于作者给的这两个原因不敢苟同,后面会具体说说我个人的想法)
3.2. Soft Mask Branch
作者借鉴了FCN的结构,在attention分支中对特征图进行卷积和反卷积的操作(其实,和RNN中many-to-many有异曲同工之妙,都是encoder-decoder结构)。另外,作者在这个分支中,又设计了单独的分支内部的residual unit。
另外,作者还提供了一个分支结构的示意图:
3.3. Spatial Attention and Channel Attention
我们知道,注意力模型输出的结果是0—1的数值,作者最终使用的是sigmoid函数,在这里,作者又讨论了另外的两种方法:一个是在每一张特征图上进行归一化,也就是这里说的Spatial Attention;另一种是在通道上进行归一化,也就是这里说的Channel Attention。不过,经过作者验证,还是使用sigmoid函数的效果最好。
(ps:作者在attention分支中没有使用BN层,在使用sigmoid激活函数之前,接一个BN层,会不会效果更好,可以验证一下。)
第4部分,作者主要就是进行了一些实验验证,和别的一些分类网络做了对比。然后对某些地方做了进一步的分析。具体来看两个地方:
Attention Residual Learning
Attention Module的设计一方面可以消除图片中噪声的影响(也即是,无效区域),另一方面,可以保留有用信息(也即是,我们需要关注的目标区域)。而实现的方法就是:attention分支和主网络上面的feature进行点乘。但是,如果是在深层网络中使用stacking方法,反复的点乘会导致数值衰减的很快。而我们设计的attention residual结构,由于使用identical mapping,可以有效缓解这种情况。这也就是作者在3.1中说的第一个原因。
另外,作者给出了一张图来对比论文的网络和naive attention learning的输出结果。
乍一看这张图,哇,确实是哦,NAL到后期基本上衰减到0了,但其实,仔细想一下,这里面的问题很大。这就是我说对作者的观点不敢苟同的原因。
首先,来看ARL和ResNet-164这两条线,这两个肯定没什么问题,而且ARL比ResNet-164来的要低,也说明了attention branch起了一定的作用,如果没起作用的话,大不了两条线重合就是了。
那么问题出在哪里呢,当然是NAL,主要有两个地方:一个是计算方法的问题,这里计算的是平均值,如果我们使用NAL的话,那么对于图片中不需要的信息,当然就都被变为0了,而且对于大部分的图片来说,这种区域是占了很大比重的的。这个时候,计算平均值的时候,如果平均值不衰减的很快就怪了,那才说明出问题了,说明你的attention分支压根就没什么作用(当然,目标区域的数值肯定也会有一定程度的减小,这个不可避免。)从这个Figure 4上面来看,NAL很小,这说明很好啊,NAL很好的完成了任务。而且,这个结果在作者给的Figure 1中也得到了证明。
可以看出,经过naive attention learning,图像中的大部分的区域都被过滤掉了,只有目标区域被保留了下来,这个时候如果对整张图片进行平均的话,得出的数值很小这是必然的。
另外一个问题,就是坐标系的问题,把NAL和ResNet-164放在一份坐标系里进行比较,他们之间的数值相差很大,这个时候体现在Figure 4里面,当然从视觉上来看NAL就接近0了,如果把NAL单独拿出来,可能就会好看很多。
Comparison of different mask structures
作者在attention分支中比较了两种不同的方法:全部采用conv的方式,而且步长设为1;还有一个就是现在使用的方法:先使用down sampling,然后使用up sampling。得出的结论当然是后一种方法比较好。
(ps:分析一下原因,在进行down sampling的时候,实际上是对图片进行了模糊处理,这在无形中就起到了过滤的作用。)
对了,还有一个地方,作者在3.1中提到的第二个原因,我觉得这个有点扯,作者纯粹就是拿来凑数的。因为attention分支是和Residual Unit平行的结构,怎么可能会造成影响。另外,attention机制做的本来就是破坏的工作,怎么破坏的呢,直接过滤掉无效区域,只保留想要关注的部分。(实际上,就是特征提取,哈哈。。。)
好了,最后作一下总结:去掉那些复杂的专业名词和花里胡哨的说法,到底什么是注意力模型,其实应该叫注意力机制更好一点,在具体一点,就是特征提取,只不过这里要分两个步骤:首先生成一张取值为0—1之家的mask,然后和原来的特征相乘,这样就让不关注的区域变为0,关注的区域数值不变,而具体的位置,网络可以自己学习。
那么,具体到这篇论文,实际上就是一个ResNet网络就的改进,只不过这里改进的方向不是在深度上,而是在宽度上,增加了一些attention分支。