计算机视觉中的注意力机制
z

简单的来说,注意力机制的目标就是学习到一个权重

权重施加在原来的特征上,使得施加权重后的模型效果更好。

这里学习到的权重没有一个固定的模式,可以是作用在原图上,可以作用在空间尺度上,也可以作用在channel尺度上。

对于注意力的分类,大家有分为以下几种:

  • Soft attention,对所有的分量均做加权
  • Hard attention,通过采样,只对部分分量做加权

下面通过论文的方式对不同的方法进行说明。


img

主要是在一些细粒度的图像分类中,类别之间的区别主要体现在一些局部的区域中的细微差别,如果直接用全尺寸的图像特征的话,这些细微的区别表达地不够。论文提出了RA-CNN(Recurrent Attention Convolutional Neural Network)

image-20190701194326569

这里一共利用了三个相同网络结构,不同输入尺寸的CNN,利用coarse to fine的思想,希望网络能够聚焦到能够体现出细微差别的区域中。

对每一个网络,前面两个子网络论文将其称为APN(Attention Proposal Network)。每个子网络都用来做两个事情:

  1. 对图像进行分类
    $$
    \begin{equation}
    \mathbf{p}(\mathbf{X})=f\left(\mathbf{W}_{c} * \mathbf{X}\right)
    \end{equation}
    $$

  2. 预测attention region
    $$
    \begin{equation}
    \left[t_{x}, t_{y}, t_{l}\right]=g\left(\mathbf{W}_{c} * \mathbf{X}\right)
    \end{equation}
    $$
    其中:

    $t_x, t_y$ 指 attention region 的中心坐标

    $t_l$ 指预测出的squre边长的一半

  3. Crop
    $$
    \begin{equation}
    \begin{aligned} t_{x(t l)} &=t_{x}-t_{l}, \quad t_{y(t l)}=t_{y}-t_{l} \ t_{x(b r)} &=t_{x}+t_{l}, \quad t_{y(b r)}=t_{y}+t_{l} \end{aligned}
    \end{equation}
    $$
    通过上一步,可以得到预测的attention region的四个点的坐标如上。crop操作只需要通过一个点乘来完成:
    $$
    \begin{equation}
    \mathbf{X}^{a t t}=\mathbf{X} \odot \mathbf{M}\left(t_{x}, t_{y}, t_{l}\right)
    \end{equation}
    $$
    这里M的是对原图运用$h(x)=1 /(1+\exp ^{-k x})$ 得到的,当k足够大时,类似于一个阶跃函数。下图是k=50时的情况。

image-20190701200319806

  1. 在获得attention region之后,利用双线性插值的方法,获得一个增强的图像:
    $$
    \begin{equation}
    \mathbf{X}{(i, j)}^{a m p}=\sum{\alpha, \beta=0}^{1}|1-\alpha-{i / \lambda} | 1-\beta-{j / \lambda}| \mathbf{X}_{(m, n)}^{a t t}
    \end{equation}
    $$
    $\lambda$ 是上采样因子、$[]$用来取整,${}$用来取小数部分。

  2. Loss

    包含两部分LOSS,分类和RANK:
    $$
    \begin{equation}
    L(\mathbf{X})=\sum_{s=1}^{3}\left{L_{c l s}\left(\mathbf{Y}^{(\mathbf{s})}, \mathbf{Y}^{*}\right)\right}+\sum_{s=1}^{2}\left{L_{r a n k}\left(p_{t}^{(s)}, p_{t}^{(s+1)}\right)\right}
    \end{equation}
    $$

    $$
    \begin{equation}
    L_{r a n k}\left(p_{t}^{(s)}, p_{t}^{(s+1)}\right)=\max \left{0, p_{t}^{(s)}-p_{t}^{(s+1)}+\operatorname{margin}\right}
    \end{equation}
    $$

    直观的理解就是随着attention region的细化,它对应的分类损失也应该提高。

  3. 在训练好之后,对每一个子APN得到的feature进行归一化,之后融合起来就能得到一个fused feature。


image-20190701234652298

主要的贡献是提出了这样一个Residual Attention Module,结构如下图所示:

image-20190701234614151

右边的分支为普通的卷积分支,左边的分支对原图进行下采样和上采样,得到attention mask。左边分支的激活函数是Sigmoid,输出值在(0,1)之间。如果直接用mask和原图相乘,在网络越来越深的时候,由于mask小于1,会导致输出的太小,给网络的训练带来困难。于是作者使用的是$H_{i, c}(x)=\left(1+M_{i, c}(x)\right) * F_{i, c}(x)$.

那么当M(x)=0时,该层的输入就等于F(x),因此该层的效果不可能比原始的F(x)差,这一点也借鉴了ResNet中恒等映射的思想,同时这样的加法,也使得Trunk Branch输出的feature map中显著的特征更加显著,增加了特征的判别性。这样,优化的问题解决了,性能的问题也解决了,因此通过将这种残差结构进行堆叠,就能够很容易的将模型的深度达到很深的层次,具有非常好的性能。