Swin-Transformer详解

 

Swin-Transformer详解_第1张图片

 以上为Swin-Transformer的总体流程,下面本文将对网络中每一个结构做详尽介绍:

Swin-Transformer详解_第2张图片

 1.Patch Partition(图像块分割)+Linear Embeding(线性嵌入)

两个过程的实现为使用一个二维卷积(Conv2d),输入通道数:3,输出通道数:96(在这里不是48=3*4*4,因为在代码中Patch Partition和Linear Embeding通过一个二维卷积实现,根据网络大小不同还可以128、192),卷积核大小和步长都为4。然后进行了归一化(Layer Norm)

 2.Patch Merging(图像块合并)Swin-Transformer详解_第3张图片

 图来源

 上图为Patch Merging的一个样例,取一个通道的特征进行讲解,用一个2×2的窗口在特征图上步长为2滑动,每个窗口会被分成四个区域,根据区域不同把一张特征图分为四份,然后在通道深度方向进行拼接,拼接后在通道方向进行归一化(LayerNorm),然后使用全连接使深度变为2。与原图相比高和宽变为原来一半,深度变为原来的二倍。全连接如下:

nn.Linear(4 * dim, 2 * dim, bias=False)

 为了提高模型的表征能力,随着网络的加深,通过Patch Merging来减少token(Patch)的数量

3.W-MSA & SW-MSA

Swin-Transformer详解_第4张图片

Swin-Transformer详解_第5张图片

 

目的:减少计算量

缺点:窗口之间无法进行信息交流

每个window有M×M个Patch,window内的Patch之间进行self-attention计算。

为了解决上面窗口之间无法进行信息交流的缺点,通过cyclic shift 把窗口进行移动,这样就可以聚合不同窗口之间的信息。

Swin-Transformer详解_第6张图片

 在移动窗口之后,在特征图的边缘会存在一些多余的突出特征和一些空白的部分,我们把突出特征补充到空白处,可以生成可被窗口分割的特征图,但是补充而来的特征图会与其周围特征形成一个新的窗口,窗口之间的patch会进行self-attention计算,这是我们不想看到的,所有我们使用一个mask蒙版,防止拼接window不同区域之间的计算。

4. Window Attention

Swin-Transformer详解_第7张图片 

 Swin-Transformer详解_第8张图片

 

你可能感兴趣的:(transformer,深度学习,人工智能)