Swin-Transformer

前言

《Swin Transformer: Hierarchical Vision Transformer using Shifted Windows
论文地址:https://arxiv.org/pdf/2103.14030.pdf
Swin Transformer是2021年微软研究院发表在ICCV上的一篇best paper。该论文已在多项视觉任务中霸榜(分类、检测、分割)。再阅读本文前,先要了解一下用于图像分类的ViT:Vision Transformer(ViT)

在这里插入图片描述
Swin Transformer相比于ViT最大的区别就是这里划分成Windows,并在Windows内部做self-Attention(local的特征,披着Transformer的卷积神经网络 😃),而ViT是在对整个特征图做self-Attention,节省计算量;此外Swin Transformer这里的Windows还是有很多种层级的大小。

网络结构

在这里插入图片描述
对于分类网络,Swin Transformer最后面还会接上一个Layer Norm层、全局池化层以及全连接层得到最终输出。ViT是用[CLS] Token来分类的。
对于检测和分割,每个stage输出的多尺度特征就可以送给FPN、UNet进行检测和分割了。

细节

1.Patch Merging

在这里插入图片描述
因为之前做attention的时候,是被flatten,需要先view成2维的。还需要pad一下,保证是整数倍。

x0=x[:,0::2,0::2,:]
x1=x[:,1::2,0::2,:]
x2=x[:,0::2,1::2,:]
x3=x[:,1::2,1::2,:]
x = torch.cat([x0,x1,x2,x3],-1)

Merge的好处是可以增大感受野

2.Windows Multi-head Self-Attention(W-MSA)

引入Windows Multi-head Self-Attention(W-MSA)模块是为了减少计算量。ViT中的MSA是所有像素之间进行Self-Attention计算,而W-MSA只有再同一个(7*7大小)窗口内的像素之间计算Self-Attention。
在这里插入图片描述
M代表每个窗口(Windows)的大小

3.Shifted Windows Multi-Head Self-Attention(SW-MSA)

采用W-MSA模块时,只会在每个窗口内进行自注意力计算,所以窗口与窗口之间是无法进行信息传递的。为了解决这个问题,作者引入了SW-MSA模块。

  • 假如窗口大小为M,那么就会将窗口在特征图上偏移[M//2,M//2],//表示取整运算。以M=2为例,见下图:
    在这里插入图片描述
    通过将窗口进行偏移后,由原来的4个窗口变成9个窗口,而且有些窗口还变小了。窗口大小不一样,最先想到的是补零,然后再计算,但是作者觉得这样无疑是增大了计算量。于是出现了小孩子喜欢玩的”拼图“的方法,就是把不足M的方块,拼成M大小的方块。
    在这里插入图片描述

这样就可以继续计算M大小窗口内的Self-Attention,又不引入多余的计算量。但是又有一个新的问题,就是拼出来的M大小窗口实际上在空间上并不是连续的。所以在计算的时候引入MASK,将拼出来的窗口中空间不连续的像素割开。

在这里插入图片描述
具体来说就是:先和W-MSA一样计算Q,K,V;但进行Self-Attention在softmax之前,需要将不在空间连续的其他像素(或称token,patch)减去100(其实softmax后基本就是0了),这样就能保证只有空间连续的像素进行了Self-Attention。

在这里插入图片描述

在计算完后还要把拼图后的数据给挪回到原来拼图前的位置上。
下面给出一个mask过程的图例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

下图是实际运行速度对比:
在这里插入图片描述

4.Relative Position Bias

到此,你可能会发现还没介绍位置编码,而且Attention的公式里面还多了一项B:
在这里插入图片描述
这个B就是相对位置偏执,是一个可学习的参数。所谓的相对偏移就是,像素qj与其他像素ki相乘,如果像素ki在像素qj相对位置相同(i=0,1… ; j=0,1…),那么他们的位置编码是同一个参数b。以M=2为例,相对位置可以是上、下、左、右、右上、右下、左下、左上以及自己本身;总计(2M-1)*(2M-1)个相对位置。
在这里插入图片描述

此外:如果之后窗口的大小发生变化后,这个位置编码B还是可以通过bi-cubic插值得到,从而进行迁移学习。

消融实验

为了验证窗口偏移和相对位置编码的作用,进行了如下实验:
在这里插入图片描述
窗口偏移带来稳定提升,相对位置编码对图像分类带来的提升不大,但是对目标检测和分割却又较大的帮助。可能是位置信息对后面两个任务更重要,而分类最后只需要用到高层的语义信息,基本已经损失掉了位置信息。

SOTA结果

原论文中给出的关于不同Swin Transformer的配置,T(Tiny),S(Small),B(Base),L(Large),其中:

  • win. sz. 7x7表示使用的窗口(Windows)的大小
  • dim表示feature map的channel深度(或者说token的向量长度)
  • head表示多头注意力模块中head的个数
    在这里插入图片描述
    图像分类:看起来优势并不大
    在这里插入图片描述

目标检测:涨点明显

在这里插入图片描述

分割:涨点明显
在这里插入图片描述

上一篇:Vision Transformer(ViT)

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值