当前位置:   article > 正文

Swin Transformer: Hierarchical Vision Transformer using Shifted Windows 论文阅读笔记

swin transformer: hierarchical vision transformer using shifted windows
  • 这是微软亚洲研究院的一篇文章,原文作者:
    在这里插入图片描述

  • 文章目的在于探索将transformer用在vision问题上的可能性,从而充分利用transformer建模长依赖的能力
  • 把NLP模型用到cv上要解决的一个问题在于,NLP的注意单元大小是固定的,就是一个token,然而cv的注意单元大小不固定,可能是10x10个像素组成的区域,也可能是100x100个像素,也就是element scale variation。
  • 此外还有一个问题在于,一张图片张像素的数量比NLP一个passage中的token数量要大得多,也就是resolution的问题,如果直接用在图片上,计算复杂度是 O ( n 2 ) O(n^2) O(n2)

  • 为此首先提出了一个hierarchical的transformer结构,在图片上具有 O ( n ) O(n) O(n)的计算复杂度:
  • 从图片输入开始,方法依次做的是:
  1. 把图片切成许多patch,每个patch为4x4
  2. 把每个patch的所有像素值(4x4x3)展平,经过一个linear层,进行embedding,作为一个C维的token,也就是说每个patch是一个token
  3. 把这些token送进几个修改了自注意力机制的transformer blocks,在这个过程中feature map的大小保持不变,为 H 4 × W 4 \frac{H}{4}\times\frac{W}{4} 4H×4W
  4. 然后进行特征图的下采样,是通过patch merging layers实现的,这个层把每2x2个patch的一共4个C维的向量concatenate为一个4C维的token,继续用transformer blocks,生成2C维的token,然后继续进行几个不变scale的transformer,这几层中保持 H 8 × W 8 \frac{H}{8}\times\frac{W}{8} 8H×8W个token
  5. 重复4过程两次,因此token数量变为 H 32 × W 32 \frac{H}{32}\times\frac{W}{32} 32H×32W
  • 因此,这一下采样过程提供了几个不同尺度的featuremap,换句话说可以参考cv的技巧,实现FPN或unet的结构,网络结构如下:
    在这里插入图片描述
    在这里插入图片描述

  • 网络中使用的transformer不是普通的transformer,修改了transformer的multi-head self attention (MSA)层为一个基于shifted windows的方法,因此称为swin transformer。该module的思想是:现有的transformer无论是在NLP还是在CV中都是提供了一个全局的注意力,也就是每个patch都对所有其它的patch都计算注意力,因此 h × w h\times w h×w个patch就要计算 ( h × w ) 2 (h\times w)^2 (h×w)2个注意力。然而图片的像素数量太大,全局注意力 O ( n 2 ) O(n^2) O(n2)的计算复杂度,是无法接受的。
  • 因此swin transformer只对由M x M个patch组成的windows内部计算attention,这样以来计算复杂度变为了 O ( h × w ) O(h\times w) O(h×w)

在这里插入图片描述

  • 然而window之间缺乏联系,为了解决这个问题,采用了如上图所示的shift window的方法,也就是说上一层transformer的window的位置,在下一层中做了平移,使得上下层被归为同一个window的token不同了,这样一来就能使得在第一层中处于不同window因此无法计算相互之间注意力的两个不同的patch,在下一层或下几层中,发生了联系。
    在这里插入图片描述
  • 然后还有个问题,虽然基于transformer的特性,并不需要对window内的token要求数量必须相同,可以通过zero padding加mask来实现,但是如上图最左边的这个分割,如果按刚刚说的zero padding加mask,就增加了window的数量,增加了计算量,为此论文把左上的部分切下来拼到右下,然后还是用masked multi-head self-attention的方式进行计算,再切出来拼回去,这样虽然效果上是等效的,计算量却减少了。
  • 此外,transformer的position embedding本文也进行了尝试,发现有相对位置编码(从-M+1到M-1)比绝对值位置编码(1到M-1)和没有位置编码效果都要好,因此采取了相对位置编码。
  • 最后是一些参数和不同结构:
    在这里插入图片描述
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/909702
推荐阅读
相关标签
  

闽ICP备14008679号