本文主要是介绍Swim-Transformer学习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
看了这个博主(73条消息) Swin-Transformer网络结构详解_swin transformer_太阳花的小绿豆的博客-CSDN博客
的视频和文章整理的笔记。
1 网络整体框架
和Vision Transformer 不同,它是原始图像尺寸对图像下采样4倍,8倍以及16倍递增,这样的backbone有助于在此基础上构建目标检测,实例分割等任务。
并且使用了Windows Multi-Head Self-Attention(W-MSA)的概念,比如在下图的4倍下采样和8倍下采样中,将特征图划分为多个不相交的区域(Window),并且Multi-Head Self-Attention只在每个窗口(Window)内运行。相对于Vision Transformer中直接对整个(Global)特征图进行Multi-Head Self-Attention,这样能减少计算量,尤其是浅层特征图很大的时候。这样做虽然减少了计算量但也会隔绝不同窗口之间的信息传递,所以在论文中作者又提出了Shifted Windows Multi-Head Self-Attention(SW-MSA)的概念,通过此方法能够让信息在相邻的窗口进行传递,但计算量是和W-MSA保持一样。
SW-MSA
首先窗口向右侧和下方各偏移了M/2个像素,M是Patch Merging层的patch大小,本文是2x2,所以M是2。此时便由4个窗口变成9个。为减少计算量,论文中作者提出Efficient batch computation for shifted configuration解决。即通过移动移动最上一行,再移动最左边一列,使得图片窗口重新拼成4x4形状,这时候便可以想W-MSA一样使用2x2计算,实现特征交融,还减少了计算量。
但此时的4x4,有些部位是不连接的图像内容,因此直接对此2x2计算,信息会乱串,就没有意义。作者提出在实际计算中使用的是masked MSA
即带蒙板mask的MSA,这样就能够通过设置蒙板来隔绝不同区域的信息了。大概就是比如里面有区域5和区域3,正常算一遍,然后对区域3部分数据减100,使得这部分数据趋近0,即可当成只计算区域5,其他同理。
这篇关于Swim-Transformer学习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!