论文解读:SwinTransformer-减少Q、K、V的运算规模

2023-12-21 13:38:56

概述以及要解决的问题

什么是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

文章来源:https://blog.csdn.net/weixin_50917576/article/details/135127877
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。