https://blog.csdn.net/u013738531/article/details/81293271
Attention使得运算聚焦于特定区域,也可以使得该部分区域的特征得到增强。
‘very deep’的网络结构结合残差连接(Residual Network)在图像分类等任务中表现出了极好的性能。
因此结合attention和residual,突出残差注意力网络。
https://www.jianshu.com/p/490f7d5a56ba
网络是在原有的ResNet网络的基础上,添加了一些新的分支:Soft Mask Branch,形成了残差注意力网络
ResNet网络:
- 为什么用Residual Attention
首先,作者大概介绍了一下Residual Attention Network是怎么回事,然后介绍说自己用stacking Attention Modules方法的原因,因为和最简单的只使用一次soft weight mask方法相比,stacking 具有很多优势。在有些图片中,由于背景复杂,环境复杂,这时候就需要对不同的地方给与不同的注意力。如果只使用一次soft weight mask分支,那么可能需要指数级的通道数来捕捉这些信息。而且只有一次机会,有些时候有可能会导致捕捉失败。而在Residual Attention Network中,因为主网络的每个分支都有自己单独的mask分支,所以可以缓解上面说的这些情况。 - 为什么用Residual
主要有两个原因:原始的Attention Modules由于使用点乘的形式,会导致效果明显下降。首先,和mask分支进行点乘会导致在deep layers中提取到的特征的数值明显下降。第二,soft mask有可能会破坏主网络的有些好的性质,比如the identical mapping of Residual Unit。 - Soft Mask Branch
作者借鉴了FCN的结构,在attention分支中对特征图进行卷积和反卷积的操作(其实,和RNN中many-to-many有异曲同工之妙,都是encoder-decoder结构)。另外,作者在这个分支中,又设计了单独的分支内部的residual unit。
上图基本上可以囊括本文的绝大部分内容,对于某一层的输出featuremap,也就是下一层的输入,对于一个普通的网络,只有右半部分,也就是TrunkBranch,作者在这个基础上增加了左半部分:Soft Mask Branch——一个Bottom-up Top-down的结构。
Bottom-up Top-down的结构首先通过一系列的卷基和pooling,逐渐提取高层特征并增大模型的感受野,之前说过高层特征中所激活的Pixel能够反映Attention所在的区域,于是再通过相同数量的up sample将feature map的尺寸放大到与原始输入一样大(这里的upsample通过deconvolution来实现,可以利用bilinear interpolation 也可以利用deconvolution自己来学习参数,可参考FCN中的deconvolution使用方式),这样就将Attention的区域对应到输入的每一个pixel上,我们称之为Attention map。Bottom-up Top-down这种encoder-decoder的结构在图像分割中用的比较多,如FCN,也正好是利用了这种结构相当于一个weakly-supervised的定位任务的学习。
接下来就要把Soft Mask Branch与Trunk Branch的输出结合起来,SoftMask Branch输出的Attention map中的每一个pixel值相当于对原始feature map上每一个pixel值的权重,它会增强有意义的特征,而抑制无意义的信息,因此,将SoftMask Branch与Trunk Branch输出的feature map进行element-wised的乘法,就得到了一个weighted Attention map。但是无法直接将这个weightedAttention map输入到下一层中,因为Soft Mask Branch的激活函数是Sigmoid,输出值在(0,1)之间(之所以这么做,我认为是不希望给前后两层的feature map带来太大的差异和扰动,其次能够进一步的抑制不重要的信息),因此通过一系列这样的乘法,将会导致feature map的值越来越小,并且也可能打破原始网络的特性,当层次极深时,给训练带来了很大的困难。因此作者在得到了weighted Attention map之后又与原来TrunkBranch的feature map进行了一个element-wised的操作,这就和ResNet有异曲同工之妙,该层的输出由下面这个式子组成:
其中M(x)为Soft Mask Branch的输出,F(x)为Trunk Branch的输出,那么当M(x)=0时,该层的输入就等于F(x),因此该层的效果不可能比原始的F(x)差,这一点也借鉴了ResNet中恒等映射的思想,同时这样的加法,也使得Trunk Branch输出的feature map中显著的特征更加显著,增加了特征的判别性。这样,优化的问题解决了,性能的问题也解决了,因此通过将这种残差结构进行堆叠,就能够很容易的将模型的深度达到很深的层次,具有非常好的性能。
实际上就是一个ResNet网络就的改进,只不过这里改进的方向不是在深度上,而是在宽度上,增加了一些attention分支。