概述以及要解决的问题
什么是Bankbone:不论什么模型,用这个backbone提特征,效果大概率非常好
直接套用在各种下游任务中
要解决的问题:
一个block要完成的任务
整体网络架构
H*W*3卷积->还是H*w*3->对应H*w的特征图的,取4*4的小正方型resize为一维向量(长度为16),总16个(H/4)*(H/4)
之后考虑上channel=3,故一维向量长度应为16*3=48,故此时有的特征为(H/4)*(H/4)*48
下面为swin transformer blocks
获取各窗口输入特征
Patch Embedding
卷积输出的特征图的channel设置了96(自己小模型训练,也可以设置低一些)
window_partition
基于窗口的注意力机制解读
W-MSA(Window Multi-head Self Attention)
窗口偏移操作的实现、细节及其计算量的概述
window_reverse
下面猫中的偏移:
将c图黄色的部分往上3格,往左3格;而之前红色、蓝色以及灰色的小方块都放在整个图中的右下角,如d图中所示
SW-MSA(Shifted Window)
Tips:值得注意的地方
参考文章:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows - 知乎
值得注意的是,虽然只是得到蓝色窗口内的patch之间的联系,但别忘了,蓝色窗口左边四个patch(位于第一行左边的窗口)在上一个block中已经获得与红色窗口内其它patch之间的联系,于是红色窗口内其它patch与蓝色窗口右边四个patch(位于第一行右边的窗口)之间也可以获得联系(好比知道A和B的关联方式,B和C的关联方式,那就可以知道A和C的关联方式)。进一步,蓝色窗口右边四个patch与绿色窗口内其他patch已有联系,那么蓝色窗口左边四个patch和绿色窗口其他的patch也可以获得联系。再进一步,可以获得红色窗口内的patch与绿色窗口内的patch之间的联系。实际上当然了,这肯定没有计算完整窗口直接获得各个patch间的联系的方式好,不过移动窗口的方式至少能让模型感知到不同窗口间patch的联系(这种联系得通过传递来感知,没有全局计算好)。
整体网络结构整合
位移中的细节
SW-MSA做完偏移之后,继续做W-MSA(多了一个mask机制)
下采样操作实现方法
分层计算方法
参考文章
📎Swin Transformer.pdf
Swin Transformer: Hierarchical Vision Transformer using Shifted Windows