摘要
ViT的缺点:
- Transformer在语言处理中的基本元素是word token,其特点是语义信息比较密集。而ViT中token的尺度(scale)是固定的,且视觉token携带的语义信息比语言文字序列差,故认为不适合视觉应用
- 图像分辨率高,像素点多,如果采用ViT模型,自注意力的计算量会与像素的平方成正比,计算复杂度过高是导致ViT速度慢的主要原因
故本文做出改进:
- 基于滑动窗口机制,具有层级设计(下采样层)的Swin Transformer。滑窗操作包括对token不重叠的local window,和对token重叠的cross-windos
- 将注意力计算限制在一个小窗口中,一方面能引入CNN卷积操作的局部性,另一方面能大幅度节省计算量,它只和窗口数量成线性关系
- 通过下采样的层级设计,能够逐渐增大感受野,从而使得注意力机制也能够注意到全局的特征
框架
给定图像 x x x,首先通过Patch拆分(Patch Partition)模块将输入的 H × W × 3 H\times W \times3 H×W×3的RGB图像拆分为非重叠等尺寸的 N × ( P 2 × 3 ) N\times(P^2\times3) N×(P2×3)的patch。每个 P 2 × 3 P^2\times3 P2×3的patch都被视为一个patch token,共拆分出 N N N个(即Transformer的有效输入序列长度)。
具体地,令 P 2 = 4 × 4 P^2=4 \times 4 P2=4×4且通道数 C = 3 C=3 C=3,则各patch展平后的特征维度为 P × P × C = 4 × 4 × 3 = 48 P \times P \times C = 4 \times 4 \times 3 = 48 P×P×C=4×4×3=48,共有 N = H 4 × W 4 = H W 16 N = \frac H 4 \times \frac W 4 = \frac {HW} {16} N=4H×4W=16HW个patch tokens。换言之,每张 H × W × 3 H\times W \times3 H×W×3的图片被处理为了 H 4 × W 4 \frac H 4 \times \frac W 4 4H×4W个图片patches,每个patch被展平为48维的token向量(类似ViT的Flattened Patches),整体上是一个展平(flatten)的 N × ( P 2 × 3 ) = ( H 4 × W 4 ) × 48 N \times (P^2 \times 3) = (\frac H 4 \times \frac W 4) \times 48 N×(P2×3)=(4H×4W)×48的patch序列。
线性嵌入层(Linear Embedding)(即全连接层)会将此时维度为 ( H 4 × W 4 ) × 48 (\frac H 4 \times \frac W 4) \times 48 (4H×4W)×48的张量投影到任意维度 C C C,得到维度为 ( H 4 × W 4 ) × C (\frac H 4 \times \frac W 4) \times C (4H×4W)×C的Linear Embedding。
随后,这些经过Linear Embedding的patch tokens被馈入若干具有改进自注意力的Swin Transformer blocks。首个Swin Transformer block保持输入输出tokens数恒为 H 4 × W 4 × C \frac H 4 \times \frac W 4 \times C 4H×4W×C不变,且与线性嵌入层共同被指定为Stage 1(如图3的第一个虚线框所示)。
整个模型采取层次化的设计,一共包含4个Stage,每个stage都会缩小输入特征图的分辨率,逐层扩大感受野。随着网络的加深,tokens数逐渐通过Patch合并层(Patch Meraging)被减少。首个Patch合并层拼接了每组 2 × 2 2 \times 2 2×2相邻patch,则patch token数变为原来的 1 4 \frac 1 4 41,即 H 8 × W 8 \frac H 8 \times \frac W 8