Swin Transformer 的Block中我们可以看到有两个MSA(多头注意力机制),一个是W-MSA(Window-MSA),一个是SW-MSA(Shifted Window-MSA)。这是Swin Transformer的关键。传统的Transformer都是基于全局来计算注意力的,因此计算复杂度十分高。而Swin Transformer则将注意力的计算限制在每个窗口内,进而减少了计算量。 W-MSA是...
Swin Transformer的基本构成块,细节与各步的输入输出尺寸如下图所示: Swin Transformer block结构示意图 细节说明如下: 该block的输入尺寸为B×L×C,输出尺寸也为B×L×C windowlize为窗口化操作,输入、输出尺寸分别为B×H×W×C、B⋅n×wH×wW×C windowAttention为以窗口为基本单位的注意力计算机制,输入输出...
在每个Stage里,由Patch Merging和多个Block组成。 其中Patch Merging模块主要在每个Stage一开始降低图片分辨率。 而Block具体结构如右图所示,主要是LayerNorm,MLP,Window Attention和Shifted Window Attention组成 (为了方便讲解,我会省略掉一些参数) class SwinTransformer(nn.Module): def __init__(...): super()._...
右边是Swin Transformer Block结构图,这是两个连续的Swin Transformer Block块,一个是W-MSA,一个是SW-MSA,也就是说根据Swin的Tiny版本,图中的Swin Transformer Block块为[2, 2, 6, 2],相对应的attention为:stage1 W-MSA-->SW-MSA – stage2 W-MSA-->SW-MSA – stage3 W-MSA-->SW-MSA-->W-MSA-...
7.分层计算(执行后续的Block) 8.输出层 Swim Transformer是特为视觉领域设计的一种分层Transformer结构。Swin Transformer的两大特性是滑动窗口和层级式结构。 1.滑动窗口使相邻的窗口之间进行交互,从而达到全局建模的能力。 2.层级式结构的好处在于不仅灵活的提供各种尺度的信息,同时还因为自注意力是在窗口内计算的,所...
源码地址:https://github.com/microsoft/Swin-Transformer Swin Transformer整体结构 Swin Transformer模型整体结构如下图所示:Swin Transformer 可以看到,Swin Transformer由四个类似的stage构成,每个stage里面都有若干个Swin Transformer block。假设输入图像维度为HxWx3,按照ViT的基本思路,先对其进行分块 (patch ...
Swin Transformer Block是Swin Transformer的核心部分,首先明确Swin Transformer Block的输入输出图片维度是不发生变化的。图中的x2表示,Swin Transformer Block有两个结构,在右侧小图中,这两个结构仅有W-MSA和SW-MSA的差别,这两个结构是成对使用的,即先经过左边的带有W-MSA的结构再经过右边带有SW-MSA的结构。
Swin Transformer整体架构 整个模型采取层次化的设计,一共包含4个Stage,每个stage都会缩小输入特征图的分辨率,像CNN一样逐层扩大感受野。 在输入开始的时候,做了一个Patch Embedding,将图片切成一个个图块,并嵌入到Embedding。 在每个Stage里,由Patch Merging和多个Block组成。
除了Patch Merging模块,接下来便是Swin Transformer Block模块了,这才是重头戏,其主要包含LayerNorm,Window Attention(W-MSA),Shifted Window Attention(SW-MSA)和MLP模块。为方便对整个架构的理解,我们先从外部梳理一遍其具体变换: Swin Transformer整体外部变换过程 ...