【论文笔记】Exploring Self-attention for Image Recognition

【论文笔记】Exploring Self-attention for Image Recognition

简述

  这篇文章发表在CVPR2020。作者提出一种将self-attention机制应用到图像识别领域的方法。作者认为,使用卷积网络进行图像识别任务实际上在实现两个函数:

  1. 特征聚集(feature aggregation): 即通过卷积核在特征图上进行卷积来融合特征的过程。
  2. 特征变换(feature transformation): 在卷积完成后进行的一系列线性和非线性变换(比如全连接和**函数。这一部分通过感知机就能很好地完成。

  在以上观点的基础上,作者提出使用self-attention机制来替代卷积作为特征聚集方法。为此,作者考虑两种self-attention形式:pairwise self-attention和patchwise self-attention。用这两种形式的self-attention机制作为网络的basic block提出SAN网络结构。与经典卷积网络ResNet进行对比,SAN网络具有更少参数和运算量,同时在ImageNet数据集上的分类精确度有较大提升。

Pairwise Self-attention

  pairwise self-attention计算公式如下:
yi=jR(i)α(xi,xj)β(xj)\mathbf y_i = \sum\limits_{j\in \mathcal{R}(i)}\alpha(\mathbf x_i,\mathbf x_j) \odot \beta(\mathbf x_j)
其中,\odot表示Hadamard product(矩阵的对应位置相乘),x\mathbf{x}是特征图上一点,y\mathbf{y}是经过self-attention模块运算后得到的特征图上的对应点。R(i)\mathcal{R}(i)是对应位置ii周围的局部区域(类似卷积过程中卷积核所在区域)。α(xi,xj)\alpha(\mathbf x_i,\mathbf x_j)是权重向量,β(xj)\beta(\mathbf x_j)是对xj\mathbf{x}_j进行embedding后的结果。
  从上述计算公式中可以看出,pairwise self-attention方式和卷积方式最大的区别在于权重的确定:卷积核的权重在学习完成后就是一个固定的标量,再用这个标量与特征图上一点的每个维度相乘。而在pairwise self-attention方法中,权重通过α(xi,xj)\alpha(\mathbf x_i,\mathbf x_j)计算得到,而且计算结果是一个向量,再用这个向量与β(xj)\beta(\mathbf x_j)对位相乘。显然这种方式考虑到了特征在不同通道上的权重大小。
  接下来,作者对α(xi,xj)\alpha(\mathbf x_i,\mathbf x_j)进行了分解:
α(xi,xj)=γ(δ(xi,xj))\alpha(\mathbf x_i,\mathbf x_j) = \gamma(\delta(\mathbf x_i,\mathbf x_j))
这样做的好处在于,在尝试不同δ\delta函数的选择是就不必考虑向量的维度问题,将维度匹配问题交给γ\gamma函数解决。γ={LinearReLULinear}\gamma=\{Linear \to ReLU \to Linear\},作者尝试了四种δ\delta函数的选择:
【论文笔记】Exploring Self-attention for Image Recognition
此外,作者还将位置ii和位置jj的坐标信息纳入γ(δ(xi,xj))\gamma(\delta(\mathbf x_i,\mathbf x_j))的计算过程之中。

Patchwise Self-attention

  patchwise self-attention计算公式如下:
yi=jR(i)α(xR(i))jβ(xj)\mathbf y_i = \sum\limits_{j\in \mathcal{R}(i)}\alpha(\mathbf{x}_{\mathcal{R}_{(i)}})_j \odot \beta(\mathbf x_j)
其中,xR(i)\mathbf x_{\mathcal{R}(i)}R(i)\mathcal{R}(i)所在区域的特征图,α(xR(i))\alpha(\mathbf{x}_{\mathcal{R}_{(i)}})权重张量。可以看到,patchwise self-attention与pairwise self-attention的区别就在于patchwise self-attention中没有对(xi,xj)(\mathbf x_i, \mathbf x_j)的配对计算,而是整个区域用来计算得到一个权重张量,再用下标$j
来索引这个张量与\beta (\mathbf{x}_j)KaTeX parse error: Expected 'EOF', got '&' at position 7: 对位相乘. &̲emsp; 同样地,…\alpha$函数进行分解:
α(xR(i))=γ(δ(xR(i)))\alpha(\mathbf{x}_{\mathcal{R}_{(i)}})=\gamma(\delta(\mathbf x_{\mathcal{R}(i)}))
尝试δ\delta函数三种不同选择:
【论文笔记】Exploring Self-attention for Image Recognition

Self-attention Block和SAN网络的设计

  这里就是实际过程中引入self-attention的basic block设计:
【论文笔记】Exploring Self-attention for Image Recognition
如图所示,最左边的分支实现α\alpha函数过程,中间分支实现β\beta函数过程,而最右边分支是一个残差连接过程。
  利用这样的block就替代了传统CNN中conv+bn/relu的过程便得到了SAN网络。具体网络堆建参数见论文。

实验部分

  首先是采用Self-attention Block的SAN与采用卷积方式的ResNet在ImageNet上的实验结果对比:
【论文笔记】Exploring Self-attention for Image Recognition
可以看到,与ResNet相比,SAN不仅运算量更低,top-1和top5精确度都有明显提高。而选择patchwise方式的self-attention效果更明显。
  接下来作者进行了一系列对照试验,包括:

  1. 关系函数δ\delta的不同选择结果对比;
  2. 映射函数γ\gamma的不同选择结果对比;
  3. 转换函数ϕ,ψ\phi, \psi的不同结果对比;
  4. R(i)\mathcal{R}(i)的大小选择;

结论

  从实验结果来看,作者提出的使用self-attention block作为网络的基础block替代卷积操作的方法十分有效。说明了深度学习的成功不一定非要局限于卷积网络,视觉任务中还能找到其他有效的特征学习方法。patchwise self-attention方法在ImageNet上的明显提升也说明了这种向量自注意力方法比常用的点积自注意力方法更有研究价值。
  遗憾的也是令我困惑的一点是,SAN的特征提取性能较ResNet有所提高,为什么作者没有将这个backbone应用到其他视觉任务如目标检测、实例分割和人体姿态估计的算法中,例如比较Faster R-CNN算法在使用SAN相比ResNet作为backbone时的mAP提升。