swin transformer详解

Swin Transformer在各种视觉任务上都取得了比较好的结果,是cvpr2021的最佳论文,论文链接https://arxiv.org/pdf/2103.14030.pdf

这张图它表达了Swin Transformer这篇文章想表达的两个意思。第一个意思Swin Transformer是一个层级结构,类似fpn,抽取不同层次的视觉特征,使其更适合分割检测等任务,对比VIT,有一个分辨率逐渐降低的过程,分别是4倍,8倍,16倍下采样,而VIT一直保持16倍下采样,因为transformer本身是一个长度序列不变的变换。第二个意思是transformer范围不同,上图两边红框代表在红框内进行transformer,右边VIT的红框是整张图,而左边Swin Transformer的红框是在小窗口上进行的,也就是swin这个词的意思,在小窗口进行transformer,而非整张图。

swin transformer的整体结构

上图是Swin Transformer的整体结构,非常像卷积的层级结构,分辨率每层变成一半,而通道数变成两倍。首先Patch Partition,就是VIT中等分成小块的操作;然后分成4个stage,每个stage中包括两个部分,分别是patch Merging(第一个块是线性层) 和Swin Transformer Block。patch Merging是一个类似于池化的操作,池化会损失信息,patch Merging不会。右图是Swin Transformer Block结构,和transformer block基本类似,不同的地方在多头自注意力MSA换成了窗口多头自注意力W-MSA和移动窗口多头自注意力SW-MSA,右图紫框。下面具体来说明这几块内容。

Patch Partition

Patch Partition,就是VIT上图中最下面部分等分小patch,然后再拉平的操作。VIT的操作是之后再送入transformer中,论文链接 https://arxiv.org/abs/2010.11929

patch Merging

Patch Merging的操作非常像池化,不同于池化,在小窗口取最大值或平均值,Patch Merging把每个小窗口中相同位置的值取出来,拼成新的patch,再把所有patch都concat起来。在Swin Transformer中,每个stage的降低分辨率的过程都是通过Patch Merging实现的。

W-MSA

W-MSA就是在一个小窗口内进行transformer的操作。为什么要用W-MSA而不直接用MSA。因为视觉任务本身有局部性,transformer能看到所有像素,很可能没必要,对图片中的一个车或者一个人来说,局部就足够了。另外一方面,省资源。看一下计算复杂度,对一个hxw个patch的图像,它的MSA计算复杂度为

Ω(���)=4ℎ��2+2(ℎ�)2�

上图是MSA的计算过程,大概是三个步骤。一是线性投射得到Q,K,V,输入向量维度(hw,C),经过线性投射层(hw,C)x(C,C),计算复杂度是 ℎ��2 ,所以这一步的计算复杂度是3ℎ��2。二是自注意力的点乘操作,Q和K做内积,Q,K,V经过上一步的线性投射得到3个为维度(hw,C)的向量,Q,K的内积运算(hw,C)x(C,hw),因此这一步计算复杂度是 (ℎ�)2� ,Q,K内积得到维度(ℎ�)2的向量,再经过mask和softmax之后和V做内积,(ℎ�)2x(ℎ�,�),那么这一步计算复杂度是(ℎ�)2�,自注意力的点乘操作这一步总的计算复杂度就是2(ℎ�)2�。第三步是最后的线性投射层,(hw,C)x(C,C),计算复杂度是ℎ��2。这样总的计算复杂度就是

Ω(���)=4ℎ��2+2(ℎ�)2�。

接下来看一下SW-MSA的计算复杂度,假设每个窗口含有MxM个patch,对每个窗口而言,它的复杂度直接代入上式就可以得到,每个窗口的计算复杂度为4�2�2+2�4�,总共有多少个窗口,(h/M)x(w/M)个,因此W-MSA的计算复杂度就是Ω(�−���)=(ℎ/�)(�/�)(4�2�2+2�4�)=4ℎ��2+2ℎ��2�。

SW-MSA

W-MSA能够获取窗口内部的信息,那么窗口之间的信息该如何获取,于是作者又提出了SW-MSA。SW-MSA这块分我们分为三部分进行讲解,分别为移动窗口,cyclic shift和mask三部分。

一、移动窗口

上图右图是左图红色窗口向右下方移动半个红色窗口得到,下图蓝框,这么做的原因当然是为了提取跨窗口的信息。

这样做又带来新的问题,之前是4个窗口,且每个窗口大小一致,但是现在是9个窗口,且每个窗口大小不一致,计算上不能批量计算。于是作者又提出了cyclic shift。

二、cyclic shift

下图第一步先把最上面一行的三个窗口移动到最下面,再把最左边三个窗口移动到最右边,得到下图cyclic shift,这样cyclic shift中就只有四个窗口了,且四个窗口大小相同,这样就可以进行批量处理了。但是把原本不相干的部分放在了一起,是我们不希望看到的。于是作者又进行了mask操作。

三、mask

以上图右上角序列为1和2的块组成的窗口为例进行说明,12代表索引,则窗口长为7,其中元素索引组成的序列为11112221111222 ...1111222,那么做自注意力点乘就如下图所示。其中蓝色和黄色部分是我们要留下的,灰色部分是不要的,需要mask掉,具体做法是加上一个维度一样的矩阵,其中蓝色和黄色部分设为0,灰色部分都设成-100,加完后蓝色和黄色不变,而灰色部分接近-100。这样灰色部分再进行softmax时候就几乎为0了。

这样就讲完了Swin Transformer的结构,最主要的就是它的层次性和局部性,论文的各种操作都是基于这两点提出的。在分类,检测,分割任务上都取得了SOTA的效果,这里只贴一下检测的结果。

实验结果

只看目标检测的结果,比之前各种结果都高了三四个点,结果还是很惊人的,别的任务的结果可以看论文。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值