- 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。
Architecture
整体管线思路很清晰:
- 将图像划分为多个不重合的partition,每个partition视为一个词元token。
- Stage1:对词元进行基础的变换,linear embedding和self-attention。
- 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的计算连接性,还保证了同样的计算量。
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