最近在看swin transformer这篇论文,其中知乎高赞解析对这一块讲的还不是特别清楚(主要是cyclic shift那一块),在这里记录一下自己的一些见解。 直接进入正题,论文中所采用的是两个相邻的Swin Transformer Block交替使用W-MSA和SW-MSA(如上图),其中W-MSA和SW-MSA中采用的WIndows如下图所示: Layerl (左边)中灰色...
Swin-transformer---取代卷积神经网络 在很多视觉领域都取得了很好的成绩。 提出了一种shifted window移动窗口的方法,其解决了1.若以像素点为单位的VIT,其序列过长问题,2.并且可以通过窗口交互的方法来变相实现全局的transformer,3.减小了计算复杂度,其复杂度随图片大小而线性增长,而不是像传统的VIT为平方级增长。
具体地,就是先通过一种特征图移位 (cyclic shift) 的方式来对窗口进行移动,移动后window由多个不相邻的sub-window组成,这里,作者又提出了一种attention mask的机制来实现前述设计,这使得能够在保持window个数不变的情况下,最后的计算结果是等价的。efficient batch computation approach如下图所示:Cyclic Shift ...
# cyclic shiftifself.shift_size >0:#做不做窗口滑动,刚开始shift_size为0,不做偏移ifnotself.fused_window_process: shifted_x = torch.roll(x, shifts=(-self.shift_size, -self.shift_size), dims=(1,2))#进行偏移# partition windowsx_windows = window_partition(shifted_x, self.window_size)# ...
针对上述两个问题,我们提出了一种包含滑窗操作,具有层级设计的Swin Transformer。 其中滑窗操作包括不重叠的local window,和重叠的cross-window。将注意力计算限制在一个窗口中,一方面能引入CNN卷积操作的局部性,另一方面能节省计算量。 在各大图像任务上,Swin Transformer都具有很好的性能。
Swin transformer块 Swin transformer中使用的块用Window MSA (W-MSA)和shift Window MSA (SW-MSA)模块取代了ViT中使用的标准多头自注意力(MSA)模块。Swin Transformer模块如下图所示。Swin transformer块有两个子单元。第一个单元使用W-MSA,第二个单元使用SW-MSA。每个子单元由一个规一化层、一个注意力模块、...
1、将transformer从CV下游任务如分类(ViT)、检测(DETR)上升到了backbone。 2、多stage的shift window将CNN的层次结构、局部感受野引入transformer 3、局部attention解决transformer计算量太大的问题。 5.2 劣势 1、CNN的还有一个特性是参数共享,Swin transformer的各个窗口的参数还不是共享的。
为什么叫shift window而不是Window,就因为它移动的其实不是整个Window。如上图,它对于一个整体来说,往右下角移动了两个patch,那么就会得到一个新的划分,变成了右边的格式。这样的话,窗口与窗口之间就会有重叠,从而可以互相学习到特征。否则一个窗口里的特征永远学不到其他窗口的特征,这样就会让self-attention变得具有...
Swin Transformer 的核心设计是将 Self-Attention 层划分为 SHIFT,SHIFTED Window 接入上一层窗口,二者之间保持连接,由此显著增强建模能力。这种策略还有助于有效降低延迟:所有 Query Patches 窗口共享同一 KEY 集,由此节约硬件内存;以往的 Transformer 方法由于使用不同的 Query 像素,因此在实际硬件中往往具有较高延迟;...
Swin transformer中使用的块用Window MSA (W-MSA)和shift Window MSA (SW-MSA)模块取代了ViT中使用的标准多头自注意力(MSA)模块。Swin Transformer模块如下图所示。 Swin transformer块有两个子单元。第一个单元使用W-MSA,第二个单元使用SW-MSA。每个子单元由一个规一化层、一个注意力模块、另一个规范化层和...