当前位置:网站首页>Swin Transformer代码讲解

Swin Transformer代码讲解

2022-06-12 16:34:00 QT-Smile

Swin Transformer代码讲解

下采样是4倍,所以patch_size=4
在这里插入图片描述

在这里插入图片描述
2.
在这里插入图片描述
3.
emded_dim=96就是下面图片中的C,经过第一个Linear Embedding处理之后的通道数
在这里插入图片描述
在这里插入图片描述
4.
在这里插入图片描述

经过第一个全连接层把通道数翻为几倍
在这里插入图片描述
在这里插入图片描述
6.
在Muhlti-Head Attention中是否使用qkv——bias,这里默认是使用
在这里插入图片描述
7.

第一个drop_rate接在PatchEmbed后面
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第二个drop_rate在Multi-Head Attention过程中使用的
在这里插入图片描述
9.
第三个drop_rate是指在每一个Swin Transformer Blocks中使用的,它是从0慢慢增长到0.1的
在这里插入图片描述

在这里插入图片描述
10.
patch_norm默认接在PatchEmbed后面的
在这里插入图片描述
11.
默认不使用,使用的话,只是会节省内存
在这里插入图片描述
12.
对应于每一个stage中Swin Transformer Blocks的个数
在这里插入图片描述
13.
对应stage4的输出的通道的个数
在这里插入图片描述

在这里插入图片描述
14.
PatchEmbed就是把图片划分成没有重叠的patches
在这里插入图片描述
15.
PatchEmbed对应结构图中高的 Patch Partition 和Linearing Embedding
在这里插入图片描述
在这里插入图片描述
16.
Patch Partition 确实是通过一个卷积实现的
在这里插入图片描述
17.
在宽度方向右侧pad和在高度方向的底部pad
在这里插入图片描述
18.
从维度2开始展平的
在这里插入图片描述
19.
这儿是上文提到的第一个drop_rate直接接在patchEmbed后面
在这里插入图片描述
20.
针对所使用的Swin Transformer Blocks设置一个drop_path_rate。从0开始一直到drop_path_rate
在这里插入图片描述
21.
遍历生成每一个stage,而代码中的stage和论文中的stage有一点差异
在这里插入图片描述
在这里插入图片描述
对于stage4,它没有Patch Merging,只有Swin Transformer Blocks
在这里插入图片描述

在该stage层中需要堆叠的Swin Transformer Blocks的次数
在这里插入图片描述
23.
drop_rate:直接接在patchEmbed后面
attn_drop:该stage所使用的
dpr:该stage中不同Swin Traansformer Blocks所使用的
在这里插入图片描述
24.
构建前3个stage是有PatchMerging,但是最后一个stage是没有PatchMerging
在这里self.num_layers=4
在这里插入图片描述
25.
在这里插入图片描述

在这里插入图片描述
26.
在这里插入图片描述

在这里插入图片描述

在下面的Patch Merging中传入的特征矩阵的shape是x: B , H*W , C这样的
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
28.
当x的h和w不是2的整数倍时,就需要padding,需要在右边padding一列0,在下面padding一行0。
在这里插入图片描述
在这里插入图片描述
29.
在这里插入图片描述
30.
在这里插入图片描述
31.
对于分类模型就需要加上下面这部分代码
在这里插入图片描述
32.

对整个模型进行权重初始化
在这里插入图片描述
33.
进行4倍下采样
在这里插入图片描述
34.
L:H*W
在这里插入图片描述
35.
按照一定的比例进行丢失
在这里插入图片描述
36.
遍历各个stage
在这里插入图片描述

下面的代码是在搭建Swin-T模型
在这里插入图片描述

在这里插入图片描述

Swin_T在imagenet-1k上的预训练权重
在这里插入图片描述
39.

Swin_B(window7_224)
在这里插入图片描述
在这里插入图片描述

Swin_B(window7_384)

在这里插入图片描述

在这里插入图片描述
41.
原始的特征矩阵需要进行向右和向下进行移动,但是具体的向右和向下移动的距离等于:窗口的大小除以2,再向下取整
在这里插入图片描述
在这里插入图片描述
self.shift_size就是向右和向下移动的距离
在这里插入图片描述
42.
一个stage中的Swin Trasformer Blocks的个数
在这里插入图片描述

当shift_size=0:使用W-MSA
当shift_size不等于0:使用SW-MSA,shift_size = self.shift_size
在这里插入图片描述
44.
Swin Transformer Blocks有可能是W-MSA也有可能是SW-MSA。在使用的时候并不是把W-MSA和SW-MSA当成一个Swin Transformer Blocks
在这里插入图片描述
45.
depth表示下图中圈出来的数字
在这里插入图片描述
在这里插入图片描述
46.
此处的下采样是使用Patch Merging实现的
在这里插入图片描述
47.
这个实在SW-MSA时使用的
在这里插入图片描述
48.
Swin Transformer Blocks是不会改变特征矩阵的高和宽的,所以每一个SW-MSA都是一样的,所以attn_mask的大小是不会发生改变的,所以attn_mask只需要创建一次
在这里插入图片描述
49.
在这里插入图片描述
50.
这便是创建完了一个stage中的全部Swin Transformer Blocks
在这里插入图片描述
51.
这便是下采样Patch Merging,下采样高度和宽度会减小两倍
在这里插入图片描述
52.
这里的+1,是防止传入的H和W是奇数,那么就需要padding
在这里插入图片描述在这里插入图片描述
53.

在这里插入图片描述
在这里插入图片描述
54.
在这里插入图片描述
在这里插入图片描述
55.
在这里插入图片描述
56.
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
58.
在这里插入图片描述
59.
下面这两个x的shape是一样的
在这里插入图片描述

在这里插入图片描述
60.

原网站

版权声明
本文为[QT-Smile]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_34848334/article/details/125237761