DANet双向注意力网络
CVPR2019
简介
之前的多尺度方法,主要是融合低层和高层的语义特征,但没有综合考虑各个位置的联系和相关性,每个通道的特征图相当于是每一类的响应,因此对于通道性的相关性也应该着重考虑
动机
作者不仅要考虑位置间的相关性,还要考虑通道间的相关性,因此作者提出了一种双向注意力网络,来自适应的整合局部特征及其全局依赖特征,分别在空间和通道维度上建模语义依赖性,
ps.局部全局联合建模是很好的切入点
位置注意力模块通过所有位置特征的加权和选择性的聚合每个位置的特征,相似的特征应该保持紧密的联系,而不管它们的距离如何
同时,通道注意力模块可以捕获任意两个通道图之间的通道依赖关系,并使用所有通道图的加权和来更新每一个特征图
综合目前所讲的通道注意力:
无论是通道注意力,还是它在空间层面上的迁移应用,又或者是空间和通道上的交互,都是通过池化操作来提取全局特征,进而对特定维度进行强调或者抑制
但是,这些方法并没有涉及到两两之间的特有的交互,只是像SENet那样,用个全连接层学习全局依赖性,或者是前面讲的ECANet那样,通过卷积层来学习局部的通道依赖性,和两两交互之间具有巨大的区别
DANet 的作者将注意力模块的输出相加,以进一步改进特征表示,从而有助于获得更精确的分割结果
作者的思路是:空间注意力和通道注意力并行计算,即双分支并行计算
框架图
输入首先通过ResNet来提取特征,然后呢分别通过位置注意力模块和通道注意力模块,最后相加来得到输出特征
位置注意力模块计算流程图
首先看位置注意力模块,左边是作者提供的模块图
右边可以方便理清输入以及shape的变化过程
直接看右图:
- 首先输入X是$C×H×W$的形状,分别通过三个卷积层来生成B,C,D三个表示,形状都是 $C×H×W$
- 将它们重塑一下,重塑为$HW×C$和$C×HW$ , HW代表的是图片像素的总数
可以用$N=HW$,用$N$来表示像素的总数的,为了看清楚shape是怎么变化的,这里用$HW$来表示
- 然后B和C进行矩阵乘法,相当于计算两两向量之间的相似度,乘积越大,相似度越高,就得到了shape为$HW×HW$的空间注意力矩阵,然后进一步通过softmax, 对每一行进行归一化处理,最后再与D进行矩阵乘法
- 这一步主要是使用归一化之后的权重,与对应的位置特征,进行加权求和,来获得每个位置更新后的特征表示,最后再通过reshape操作,恢复为与输入相同的 $C×H×W$
- 最后一步与输入X相加,类似于残差连接,但是作者在这里并没有直接进行相加,而是为这个输出特征乘以尺度 $\alpha$ , 然后再和输入特征进行相加
这样可以通过调整 $\alpha$ 来控制邻域位置特征在输出特征中所占的比例的关系了
通道注意力模块计算流程图
不同于位置注意力上来就通过三个卷积层,这里并没有通过三个卷积层,没有通过参数来学习,而是直接通过reshape操作,转化输入X的形状
目的是为了得到 $C×C$ 的通道注意力矩阵,并通过softmax进行归一化,归一化的矩阵就表示两两通道之间的相关性,然后再和输入进行矩阵乘法,得到输出$C×HW$
并通过reshape操作,恢复与输入相同的shape $C×H×W$ ,这里同样也为输出分配尺度 $\beta$ , 用于控制邻域通道特征在整个输出特征中所占的比例关系
两点注意
(1)与空间注意力不同,在计算通道注意力的时候,没有通过卷积操作来生成新的表示,因为作者认为卷积操作会破坏原有通道之间的相关性
这里可以着重了解卷积操作:
无论是1×1卷积,3×3卷积,5×5卷积实际都有通道融合的作用
而作者的设计想要建立两两通道之间的联系,就不能先融合多个通道表示,因为融合了多个通道表示,相似度就增大了,体现不出通道和通道之间的差异
(2)与SENet等工作,利用全局池化操作来探索通道关系不同,这篇文章利用所有通道对应位置的空间关系来建模通道相关性
也就是说通过在两两通道之间的一个交互来得到权重表示,这也是一种空间上的操作, 将每一个通道都区分开来,而不是通过池化操作进行提取全局特征