前言
论文地址:arxiv
代码地址:github
接收单位:ICCV 2021 best
系列文章
Transformer主干网络——ViT保姆级解析
Transformer主干网络——DeiT保姆级解析
Transformer主干网络——T2T-ViT保姆级解析
Transformer主干网络——TNT保姆级解析
Transformer主干网络——PVT_V1保姆级解析
Transformer主干网络——PVT_V2保姆级解析
Transformer主干网络——Swin保姆级解析
Transformer主干网络——PatchConvNet保姆级解析
持续更新…
注意
本文参考大神的讲解,仅将重要部分记录,想看更详细的解读,跳转->传送门
动机
作者出发点也是ViT的Patch embed的不足(每个窗口没有信息交互),以及ViT没有各种尺度分辨率的特征图。
- 基于上述作者设计了SW-MSA和整个Swin transformer的结构。
网络分析
首先看下完整的结构示意图,源自作者论文:
Patch partition部分:
举例其中一个4*4的窗口如何进行Patch partition:
实现的代码,第一个Patch partition就是用Unfold实现的,Linear Embedding是用FC层实现的。
Patch merging
举例44的特征图将其分割成22的窗口,然后取相同位置的像素拼接,再concat-norm以及FC最后实现宽高减半,通道数翻倍。
W-MSA
节省的计算量:
SW-MSA
左边通过shift window得到右边。
shift window:
引入新问题:
新问题:计算9块的复杂度更高且大小不一样不可并行计算
解决:滑块操作
通过减去较大值来避免不连续区域计算attention:
相对位置偏置