【Swin Transformer】Swin Transformer: Hierarchical Vision Transformer using Shifted Windows

文章:https://arxiv.org/abs/2103.14030

代码:GitHub - microsoft/Swin-Transformer: This is an official implementation for "Swin Transformer: Hierarchical Vision Transformer using Shifted Windows".


目录

1.Swin Transformer VS ViT

 2.Swin Transformer结构

3.实验


1.Swin Transformer VS ViT

 【Swin Transformer】Swin Transformer: Hierarchical Vision Transformer using Shifted Windows_第1张图片

 这个图表达了swin transformer和ViT的区别,不知道ViT的可以去我之前的博客里去了解,这里就不多赘述,swin transformer的主要区别就是对构建了由切片的图像拼接组成的分层特征图,且对输入图像大小具有线性计算复杂度,在每个局部框内(红色区域)计算自注意指数。

【ViT】链接:https://blog.csdn.net/qq_38308388/article/details/121495709https://blog.csdn.net/qq_38308388/article/details/121495709icon-default.png?t=LA92https://blog.csdn.net/qq_38308388/article/details/121495709

 swin transformer结构设计的主要创新点就是它的连续的自注意层之间的窗口划分。这种设计在真实任务中比较高效,因为在所有的窗口中的query都共享相同的key值,减少硬件的内存。

【Swin Transformer】Swin Transformer: Hierarchical Vision Transformer using Shifted Windows_第2张图片


  2.Swin Transformer结构

 通过这个网络结构设计图来看,整个Swin Transformer和resnet有点相似,也是分为4个stage,其中,每个stage的操作比较相似,尤其是后3个stage。其中,在第一个stage之前,首先是将原始图像切块,每个块(patch)尺寸大小为4×4,因此每个块的特征维度就是4×4×3=48,切块数量就是(h/4)×(w/4)。第一个stage中,先通过一个linear embedding将分块后的每个patch的特征维度变成C,然后送入Swin Transformer Block;第2-4个stage中,先通过一个块拼接,将输入按照2x2的相邻块进行合并,这样子patch的尺寸就变成了H/8 x W/8,特征维度就变成了4C,最后如何将4C压缩成2C,这里作者没有详细说明,感兴趣的可以看下代码。以此类推,第3个stage,将H/8 x W/8变成H/16 x W/16,特征维度从2C就变成了4C,第4个stage,将H/16 x W/16变成H/32 x W/32,特征维度从4C就变成了8C。

【Swin Transformer】Swin Transformer: Hierarchical Vision Transformer using Shifted Windows_第3张图片

 这是两个连续的Swin Transformer block,一个Swin Transformer Block是由window based MSA和MLP串联组成,另一个Swin Transformer Block是由shifted window based MSA和MLP串联组成。每个MSA模块和每个MLP之前使用LayerNorm(LN)层,并在每个MSA和MLP之后使用残差连接方式。Swin Transformer block的计算公式可以通过下式表示:

【Swin Transformer】Swin Transformer: Hierarchical Vision Transformer using Shifted Windows_第4张图片

作者引入shifted window 机制,在两个连续的Swin Transformer Block中交替使用W-MSA和SW-MSA,有效解决了不同窗口的信息交流问题。如下图所示:

【Swin Transformer】Swin Transformer: Hierarchical Vision Transformer using Shifted Windows_第5张图片

将前一层Swin Transformer Block的8x8尺寸feature map划分成2x2个patch,每个patch尺寸为4x4,然后将下一层Swin Transformer Block的window位置进行移动,得到3x3个不重合的patch。移动window的划分方式使上一层相邻的不重合window之间引入连接,大大的增加了感受野。

但是shifted window划分方式还引入了另外一个问题,就是会产生更多的windows,并且其中一部分window小于普通的window,比如2x2的patch小于 3x3的patch,作者提出了通过沿着左上方向cyclic shift的方式来解决这个问题,移动后,一个batched window由几个特征不相邻的sub-windows组成,因此使用masking mechanism来限制self-attention在sub-window内进行计算。cyclic shift之后,batched window和regular window数量保持一致,极大提高了Swin Transformer的计算效率。
【Swin Transformer】Swin Transformer: Hierarchical Vision Transformer using Shifted Windows_第6张图片

3.实验

 【Swin Transformer】Swin Transformer: Hierarchical Vision Transformer using Shifted Windows_第7张图片

swin-B: base model 

swin-T:tiny model

swin-L:large model

在COCO目标检测数据集上,Swin Transformer的表现大放异彩,直接看表吧!

【Swin Transformer】Swin Transformer: Hierarchical Vision Transformer using Shifted Windows_第8张图片

在ADE20K语义分割数据集上,Swin Transformer的表现也是惊为天人,直接看表:

【Swin Transformer】Swin Transformer: Hierarchical Vision Transformer using Shifted Windows_第9张图片

 至此,swin  transformer 的介绍就讲完了。有问题请留言,看到尽快回复。

整理不易,欢迎一键三连!!!

你可能感兴趣的:(Transformer,transformer,windows,人工智能,swintransformer)