论文笔记:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows

cvpr2021

0 abstract

  • Transformer 从NLP迁移到CV,会遇到两个挑战
    • 语义物体(人、车。。。)的尺寸有大有小
    • 如果是像素级别的Transformer,那么resolution太大
  • 为了解决上述的两个挑战,提出了swin transformer
    • 将self-attention约束在移动窗口内部的各个pixel
    • 同时也有cross-window connection
    • ——>swin transformer可以作为通用cv任务的backbone
  • 层级结构可以更好地在不同尺度下建模
  • 同时对于图像大小来说,计算复杂度是线性的

1 Introduction

从论文introduction中的两个图来进行介绍:

1.1 和ViT的对比

 机器学习笔记:ViT (论文 An Image Is Worth 16X16 Words: Transformers for Image Recognition at Scale)_UQI-LIUWJ的博客-CSDN博客

论文笔记:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows_第1张图片

  •  Vit 中,图片是分成16*16的patch组成的,然后将patch组成序列扔给Transformer。
    • 换言之,ViT是16倍下采样。每一层都是16倍下采样
    • 也就是说,自始至终ViT中patch代表的尺寸是一样的,都是16*16的像素
  • 而CNN(及其变体)之所以在很多cv任务中表现很好,是因为他们通过池化操作,可以获得不同的感受野,也即可以抓住物体不同尺寸的特征。
    • 在很多CV下游任务,尤其是像素密集型的任务(检测、分割等),多尺度信息是很重要的(比如U-Net)
    • ViT虽然使用了attention,但是它的尺寸一致是patch级别的attention,自注意力一直是全局注意力
      • ——>不会得到多尺寸的attention结果,这个会在一定程度上影响下游任务的表现
  • 于此同时,随着图像尺寸的增加,patch的数量是平方倍的增长
    • \frac{n*n}{4*4} \rightarrow \frac{(2n)*(2n)}{4*4}
    • ——>对于很大的图,或者像素点很密集的图,使用ViT不一定可行
  •  于是作者提出了swin transformer
    • 只在小窗口内进行自注意力(而不是在整张图中算自注意力)
      • ——>减少了序列的长度
    • 和图像尺寸成线性关系
      • ——>图片大小增大x倍,窗口的数量增加x倍,计算量也只增加x倍
      • ——>相比于ViT,能更好地作用在大图中
  • swin transformer 利用的性质是图像的locality
    • ——>即语义相近的物体大多在很近的区域内
    • ——>使用全局的attention是有点浪费的
  • swin transformer 中的patch mergeing 类似于CNN中池化操作
    • 后一层的一个大patch可以包含上一层几个小patch的内容
    • ——>有了多尺度的信息

 1.2 Swin Transformer中的window

论文笔记:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows_第2张图片

  •  红色的框是一个窗口(在swin transformer中是7*7个patch一个窗口,图中用4*4表示)
  • shift window的操作可以看作是窗口整体向右下角移动(图中是向右下角移动两个patch)
    • ——>这样窗口和窗口之间就有交互的(cross-window connection)
    • ——>如果不进行shift window的话,不管垒几层,每次只是在小窗口里面进行self-attention,那么一个patch永远看不到其他patch的信息
      • ——>这样就是孤立的自注意力,没有全局信息
    • ——>通过patch merging(swin transformer中的上采样),每一个patch的感受野已经很大了。再加上shift window的话,最后几层一个窗口内包含的信息接近于全局注意力了。

2 模型部分

2.1 整体模型

 (暂时将swin Transformer看成一个黑盒)

论文笔记:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows_第3张图片

注意3(b)的两个窗口加起来才是一个swin-Transformer的基本单元【顺序不能颠倒】

——>3(a)中的数量都是偶数也是因为需要1+1搭配起来使用

2.2 window transformer VS 传统 transformer

论文笔记:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows_第4张图片

        第一个式子是mulit-head self-attention的计算复杂度,第二个式子是window-multi-head self-attention的计算复杂度

MSA复杂度的推导:

论文笔记:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows_第5张图片

对W-MSA来说,此时MSA公式中的h和w都是M=\frac{h}{4}=\frac{\omega}{4}

代入,有:论文中的式子 

2.3 shift window transformer

  • 基于窗口(在窗口内的transformer)减少了计算量,但是此时窗口之间没有通信
    • —>这会限制模型的学习能力。我们需要某种方式,让窗口之间互相通信
    • —>所以我们需要移动窗口,Transformer先做窗口移动,再捕捉窗口

类似于1.2中所说的那样,向右下方平移

论文笔记:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows_第6张图片

但现在还有另外一个问题:此时我们不仅窗口数从4个变成了9个,而且每个窗口的大小也不一样。

一种方法是我们对每个不足4*4的窗口向外进行补0的padding。但是这样的话,虽然每个窗口的大小一样了,但是窗口数还是变多了。变相地增加了复杂度。

论文中使用的方法是,再做一次移位(图中的cyclic shift部分)

将窗口平移后,“不规则”的A,B,C部分,补到对应的位置,这样就还是4个窗口——>计算复杂度依旧固定

2.3.1 Masked MSA 

        但是这样操作又有了一个问题: 移动之后的元素是从很“远”的地方搬过来的,讲道理和原先的那一块“不规则”部分是没有多少联系的——>这两块之间是不应该有attention权重的【比如C和D,B和E】

        论文中使用了掩码mask的方式进行处理

  • 对不需要循环移位的部分,MASK如下图Windows0所示(不需要MASK)
  • BE情况——>window1(右上角)
  • CD情况——>window2(左下角)
  • AF情况——>window3(右下角)

计算好的attention加上这个MASK,在经过SOFTMAX。那么不应该有关联的两块之间的权重就会非常的小

我们举个例子,来推导一下window2是怎么得到的(其他几个类似)

论文笔记:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows_第7张图片

上图是经过循环移位后得到的图,图的大小为14*14,每个窗口的大小为7*7,其中数字0~8用来区分不同的区域。

Window2相当于是3和6组成的窗口对应的MASK

3号和6号区域所在的窗口内有49个patch,每个patch都是一个向量,如果现在把这个窗口拉直(一行接着一行),就变成了下图的矩阵。矩阵大小为49*1,一共有4*7=28个3号位元素,有3*7=21个6号位元素,每个向量的维度是C。

论文笔记:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows_第8张图片

这里的3不是数值,而是指的是来自3号位的数字 

self-attention就是和自己的转置(如下)进行矩阵相乘

 论文笔记:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows_第9张图片

  

self-attention的结果如下

论文笔记:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows_第10张图片

图中3&3,6&6的部分是应该有attention的,但是3&6的部分是不应该有attention的

所以mask也就如window2画的那样了 

 2.3.2 再移回去

        当然,做完mask之后,还是需要把移过来的部分再移回去的。(要不然图片就相当于一直在向右下角移动)

2.4 四种swin Transformer的配置

tiny/small/basic/large

论文笔记:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows_第11张图片

2.5 相关位置编码

        假设已经将特征图分成一个一个的window了,我们在计算attention之前,需要给每个window内部的位置进行位置编码

B 相关位置编码

每个轴的相关位置取值范围是[-M+1,M-1]

【左上角(0,0)和右下角(M-1,M-1)之间的相对位置编码为(M-1,M-1)和(-M+1,-M+1)】

所以我们先取\hat{B} \in R^{(2M-1) \times (2M-1)},再从中取B

3 实验结果

论文笔记:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows_第12张图片

你可能感兴趣的:(论文笔记)