【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和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值,减少硬件的内存。


  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 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的计算公式可以通过下式表示:

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

将前一层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的计算效率。

3.实验

 

swin-B: base model 

swin-T:tiny model

swin-L:large model

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

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

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zy_destiny

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值