0%

Swin Transformer

  • Liu Z, Lin Y, Cao Y, et al. Swin transformer: Hierarchical vision transformer using shifted windows[C]//Proceedings of the IEEE/CVF International Conference on Computer Vision. 2021: 10012-10022.
  • 微软

在视觉中做Transformer有两大问题,图片比起语言分辨率过高,以及图片中的目标尺度有大有小,变化很大。为了解决这两个问题,Swim Transformer一方面做了多分辨率的层级式结构,另一方面设计了 shift of the window partition between consecutive self-attention layers

多分辨率层级结构
shifted window:l+1层相对与l层,其子窗口划分进行了偏移。由于在新的一个子窗口内进行自注意力计算,会设计到上一级的多个窗口,因此提供了窗口的连接性。

Architecture

(a)整体结构 (b)两个级联的注意力模块,W-MSA为常规window的多头注意力。SW-MSA为shifted window的多头注意力。

整体管线思路很清晰:

  1. 将图像划分为多个不重合的partition,每个partition视为一个词元token。
  2. Stage1:对词元进行基础的变换,linear embedding和self-attention。
  3. Stage2~4:每一个层对patch进行特征融合以及新的注意力计算。

Shifted Window based Self-Attention

标准的Transformer和ViT都在构造全局的自注意力计算。然而这样的计算复杂度很高,导致很多高分辨率场景无法使用。

Self-attention in non-overlapped windows:为了节省效率,Swim Transformer希望在local window中计算自注意力。每一个window包含多个patch(即window不是patch)。

Shifted window partitioning in successive blocks:上述的window方法通过局部计算减少了计算量,但另一方面导致不同window之间缺乏联系,而不像全局自注意力那样计算的是全局联系。因此采用了上图所示的shifted window方法。

但是shifted window带来的一个问题是window数目会变多,且大小会不一致。一个朴素的解决办法即 填充法,将不同大小的window都pad到同样的大小,并且在计算自注意力时mask掉pad的区域。但是这样明显的增加了计算量(window数目增多)。

一种高效的方法是 割补法:如图所示,将不同大小的非邻接window组合成原大小的window,这样即保留了跨window的计算连接性,还保证了同样的计算量。

割补法:凑齐原大小的window

relative position bias

对于自注意力的每个head,引入了相对位置编码\(B \in \mathbb{R}^{M^2 \times M^2}\)

\[ \operatorname{Attention}(Q, K, V)=\operatorname{SoftMax}\left(Q K^{T} / \sqrt{d}+B\right) V \]

其中\(Q,K,V \in \mathbb{R}^{M^2 \times d}\), \(M^2\)为window的数目。由于在每个轴上 相对位置 的变化范围是\([-M+1,M-1]\),即最大位置差为2M-1。因此其又构造了一个更小一点的子矩阵\(\hat{B} \in \mathbb{R}^{(2M-1) \times (2M-1)}\),用于存储每个位置差对应的值。而真正的\(B\)中所有的取值,都可以从\(\hat{b}\)中拿到。

位置编码可以带来significant improvements

位置编码的消融学习