Swin Transformer代码讲解

Swin Transformer代码讲解

下采样是4倍,所以patch_size=4
Swin Transformer代码讲解_第1张图片

Swin Transformer代码讲解_第2张图片
2.
Swin Transformer代码讲解_第3张图片
3.
emded_dim=96就是下面图片中的C,经过第一个Linear Embedding处理之后的通道数
Swin Transformer代码讲解_第4张图片
Swin Transformer代码讲解_第5张图片
4.
Swin Transformer代码讲解_第6张图片

经过第一个全连接层把通道数翻为几倍
Swin Transformer代码讲解_第7张图片
Swin Transformer代码讲解_第8张图片
6.
在Muhlti-Head Attention中是否使用qkv——bias,这里默认是使用
Swin Transformer代码讲解_第9张图片
7.

第一个drop_rate接在PatchEmbed后面
Swin Transformer代码讲解_第10张图片
Swin Transformer代码讲解_第11张图片
Swin Transformer代码讲解_第12张图片

第二个drop_rate在Multi-Head Attention过程中使用的
Swin Transformer代码讲解_第13张图片
9.
第三个drop_rate是指在每一个Swin Transformer Blocks中使用的,它是从0慢慢增长到0.1的
Swin Transformer代码讲解_第14张图片

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

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

在该stage层中需要堆叠的Swin Transformer Blocks的次数
Swin Transformer代码讲解_第31张图片
23.
drop_rate:直接接在patchEmbed后面
attn_drop:该stage所使用的
dpr:该stage中不同Swin Traansformer Blocks所使用的
Swin Transformer代码讲解_第32张图片
24.
构建前3个stage是有PatchMerging,但是最后一个stage是没有PatchMerging
在这里self.num_layers=4
Swin Transformer代码讲解_第33张图片
25.
Swin Transformer代码讲解_第34张图片

Swin Transformer代码讲解_第35张图片
26.
Swin Transformer代码讲解_第36张图片

Swin Transformer代码讲解_第37张图片

在下面的Patch Merging中传入的特征矩阵的shape是x: B , H*W , C这样的
在这里插入图片描述
Swin Transformer代码讲解_第38张图片

Swin Transformer代码讲解_第39张图片
28.
当x的h和w不是2的整数倍时,就需要padding,需要在右边padding一列0,在下面padding一行0。
Swin Transformer代码讲解_第40张图片
Swin Transformer代码讲解_第41张图片
29.
Swin Transformer代码讲解_第42张图片
30.
Swin Transformer代码讲解_第43张图片
31.
对于分类模型就需要加上下面这部分代码
Swin Transformer代码讲解_第44张图片
32.

对整个模型进行权重初始化
Swin Transformer代码讲解_第45张图片
33.
进行4倍下采样
Swin Transformer代码讲解_第46张图片
34.
L:H*W
Swin Transformer代码讲解_第47张图片
35.
按照一定的比例进行丢失
Swin Transformer代码讲解_第48张图片
36.
遍历各个stage
Swin Transformer代码讲解_第49张图片

下面的代码是在搭建Swin-T模型
Swin Transformer代码讲解_第50张图片

Swin Transformer代码讲解_第51张图片

Swin_T在imagenet-1k上的预训练权重
Swin Transformer代码讲解_第52张图片
39.

Swin_B(window7_224)
Swin Transformer代码讲解_第53张图片
在这里插入图片描述

Swin_B(window7_384)

Swin Transformer代码讲解_第54张图片

Swin Transformer代码讲解_第55张图片
41.
原始的特征矩阵需要进行向右和向下进行移动,但是具体的向右和向下移动的距离等于:窗口的大小除以2,再向下取整
Swin Transformer代码讲解_第56张图片
Swin Transformer代码讲解_第57张图片
self.shift_size就是向右和向下移动的距离
Swin Transformer代码讲解_第58张图片
42.
一个stage中的Swin Trasformer Blocks的个数
Swin Transformer代码讲解_第59张图片

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

Swin Transformer代码讲解_第71张图片
Swin Transformer代码讲解_第72张图片
54.
Swin Transformer代码讲解_第73张图片
在这里插入图片描述
55.
Swin Transformer代码讲解_第74张图片
56.
Swin Transformer代码讲解_第75张图片
Swin Transformer代码讲解_第76张图片

Swin Transformer代码讲解_第77张图片
58.
Swin Transformer代码讲解_第78张图片
59.
下面这两个x的shape是一样的
Swin Transformer代码讲解_第79张图片

Swin Transformer代码讲解_第80张图片
60.

Swin Transformer代码讲解_第81张图片

Swin Transformer代码讲解_第82张图片
61.
WMSA和SWMSA所使用的窗口的大小
Swin Transformer代码讲解_第83张图片

第一个全连接层将channel翻多少倍
Swin Transformer代码讲解_第84张图片
63.

Swin Transformer代码讲解_第85张图片
64.

Swin Transformer代码讲解_第86张图片
65.
每一个swin-transformer阶段中使用的,但它是从0慢慢增长到下面设置的数值
Swin Transformer代码讲解_第87张图片
Swin Transformer代码讲解_第88张图片
66.
Swin Transformer代码讲解_第89张图片

Swin Transformer代码讲解_第90张图片
68.

Swin Transformer代码讲解_第91张图片
69.

Swin Transformer代码讲解_第92张图片
70.

Swin Transformer代码讲解_第93张图片

官方pad函数
Swin Transformer代码讲解_第94张图片
72.
Swin Transformer代码讲解_第95张图片

Swin Transformer代码讲解_第96张图片
74.
Swin Transformer代码讲解_第97张图片
75.
Swin Transformer代码讲解_第98张图片
76.
Swin Transformer代码讲解_第99张图片
77.
Swin Transformer代码讲解_第100张图片
78.
Swin Transformer代码讲解_第101张图片
79.
Swin Transformer代码讲解_第102张图片
80.
在这里插入图片描述
81.
Swin Transformer代码讲解_第103张图片
82.
Swin Transformer代码讲解_第104张图片
83.
Swin Transformer代码讲解_第105张图片
84.
Swin Transformer代码讲解_第106张图片
Swin Transformer代码讲解_第107张图片

Swin Transformer代码讲解_第108张图片
移动的大小=窗口大小除以2,然后向下取整
Swin Transformer代码讲解_第109张图片
Swin Transformer代码讲解_第110张图片

Swin Transformer代码讲解_第111张图片
87.
Swin Transformer代码讲解_第112张图片
88.

Swin Transformer代码讲解_第113张图片
89.
Swin Transformer代码讲解_第114张图片
90.

无论是wmsa和swmsa,单独的它们都不会改变特征矩阵的尺寸
Swin Transformer代码讲解_第115张图片

mask放在这个位置解决了多尺度训练的问题

Swin Transformer代码讲解_第116张图片
92.

Swin Transformer代码讲解_第117张图片
93.
运行完一个stage中的所有wmsa和swmsa
在这里插入图片描述
94.
Swin Transformer代码讲解_第118张图片
95.
Swin Transformer代码讲解_第119张图片

下面代码运行的最终结果如下所示
Swin Transformer代码讲解_第120张图片

Swin Transformer代码讲解_第121张图片
97.

Swin Transformer代码讲解_第122张图片
98.
Swin Transformer代码讲解_第123张图片

Swin Transformer代码讲解_第124张图片
99.

Swin Transformer代码讲解_第125张图片
100.

Swin Transformer代码讲解_第126张图片
101.

Swin Transformer代码讲解_第127张图片

Swin Transformer代码讲解_第128张图片

下面两个函数属于互为逆过程
Swin Transformer代码讲解_第129张图片

Swin Transformer代码讲解_第130张图片
104.

在这里插入图片描述
105.
Swin Transformer代码讲解_第131张图片

Swin Transformer代码讲解_第132张图片

Swin Transformer代码讲解_第133张图片
108.
Swin Transformer代码讲解_第134张图片
109.
Swin Transformer代码讲解_第135张图片
110.
Swin Transformer代码讲解_第136张图片
111.

Swin Transformer代码讲解_第137张图片
112.
Swin Transformer代码讲解_第138张图片

Swin Transformer代码讲解_第139张图片

Swin Transformer代码讲解_第140张图片
115.
互为逆过程
Swin Transformer代码讲解_第141张图片
Swin Transformer代码讲解_第142张图片
116.

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