论文阅读【Swin Transformer: Hierarchical Vision Transformer using ShiftedWindows】

Swin Transformer: Hierarchical Vision Transformer using ShiftedWindows

  • 发表:2021 ICCV
  • idea:主要是想改进transformer在视觉方向的速度。transformer从nlp到cv的挑战:这两个领域之间的差异,比如视觉实体的规模差异很大,图像中的像素与文本中的单词相比分辨率较高。之前的方法在分块中有重叠,导致性能不高,所以作者提出了一种层次变换器,其表示是用移位窗口计算的。移位窗口方案将自我注意计算限制在非重叠的局部窗口上,同时允许跨窗口连接,计算复杂度是线性的,提高了效率,并且能够在很多视觉任务上表现很好。
    即之前的VIT是滑动窗口,计算self-attention有重叠,复杂度是二次的;而本篇文章使用的是shift window,每个窗口无重叠,计算是线性的,效率更高。
  • 创新点:
    (1)在窗口内作attention,大大降低计算复杂度
    (2)使用金字塔结构增大感受野
    区别于VIT:Swin Transformer是将window输入transformer中,window中的像素点作为token,window作为一个序列,在像素点之间作attention。而VIT是将patch作为token,图像作为一个序列,在patch之间做attention。
  • 代码:Swin-Transformer

详细设计

(1)总体框架

论文阅读【Swin Transformer: Hierarchical Vision Transformer using ShiftedWindows】_第1张图片
Patch Partition:首先将raw image输入patch splitting module进行分割,每个patch被视为一个token,token的特征是rgb像素值的concatenation。
Linear Embedding:输入到一个embedding layer,将token feature映射到C维
Swin Transformer Block:特征提取,不改变token的数量和纬度。Swin Transformer是通过将Transformer块中的标准多头自关注(MSA)模块替换为基于移动窗口的模块构建的,其他层保持不变。
论文阅读【Swin Transformer: Hierarchical Vision Transformer using ShiftedWindows】_第2张图片
Patch Merging:主要是为了生成层次的特征。concate每组 2 ∗ 2 2*2 22个相邻patch的特征,并在4C维连接特征上应用线性层。这将token的数量减少了 2 ∗ 2 = 4 2*2=4 22=4的倍数(分辨率为2下采样),并且输出维度设置为2C

ps:这些Stage共同产生了一种hierarchical representation(层次的表征)。这些stages具有与典型卷积网络相同的特征图分辨率,例如VGG和ResNet。因此,所提出的体系结构可以方便地取代现有方法中用于各种视觉任务的主干网络

(2)Shifted Window based Self-Attention

  • 与前VIT比较
    之前的将transformer应用到视觉任务中的架构通常都是考虑全局attention,这导致了二次的计算复杂度以及在高分辨率图像上的不合适。复杂度比较如下:
    在这里插入图片描述
    image size: h ∗ w ∗ C h*w*C hwC

  • 单层限制
    单层的基于窗口的自我注意模块缺乏跨窗口的连接,这限制了其建模能力。为了在保持非重叠窗口高效计算的同时引入跨窗口连接,我们提出了一种移位窗口划分方法,该方法在连续的swn变换块中交替使用两种划分配置。

  • shifted window partition
    为了在保持非重叠窗口高效计算的同时引入跨窗口连接,作者提出了一种移位窗口划分方法,该方法在连续的swn变换块中交替使用两种划分配置。第一个module:window size为M*M,从左上开始划分;第二个module:windows沿着h和w移动(M/2,M/2)
    论文阅读【Swin Transformer: Hierarchical Vision Transformer using ShiftedWindows】_第3张图片
    计算方式如下:
    论文阅读【Swin Transformer: Hierarchical Vision Transformer using ShiftedWindows】_第4张图片

  • shifted window的高效批计算
    论文阅读【Swin Transformer: Hierarchical Vision Transformer using ShiftedWindows】_第5张图片
    shift window带来一个问题:windows数量会增多(图像边缘一些不完整的windows)。如果仅仅对边缘的windows进行padding会增加计算量。我们提出了一种更有效的批量计算方法,循环向左上方向移动,并在sub-window中使用掩码机制并进行循环shift,这样就保证了windows数量在shitf之后不变。
    具体实现:
    (1)移动:使用torch.roll函数
    论文阅读【Swin Transformer: Hierarchical Vision Transformer using ShiftedWindows】_第6张图片
    (2)mask:对于右侧和下方不相邻的元素在做attention需要mask部分元素。具体实现是对每个像素都赋予一个编号,令相邻的元素编号相同。拉平之后元素相减,为零表示相邻,非零表示不相邻,在mask矩阵中将非零元素设置为负无穷。

(3)Relative position bias

  • 计算
    在计算self-attention时,对每一个head计算相似度时引入相对位置偏差 B ∈ R M 2 × M 2 B∈R^{M^2×M^2} BRM2×M2
    在这里插入图片描述
    一些纬度的解释
    论文阅读【Swin Transformer: Hierarchical Vision Transformer using ShiftedWindows】_第7张图片

  • 解释
    Q和K相乘之后是 n ∗ n n*n nn的,这里的 n = M ∗ M n=M*M n=MM,表示每个token之间的相似性。所以B矩阵也应该是 n ∗ n n*n nn才能够与 Q K T / d QK^T/\sqrt{d} QKT/d 相加。首先考虑相对位置是二维的,以四个token为例(原有的尺寸为 2 ∗ 2 2*2 22,展平)第二行的位置分别为: ( 0 , − 1 ) , ( 0 , 0 ) , ( 1 , − 1 ) , ( 1 , 0 ) (0,-1),(0,0), (1,-1), (1,0) (0,1)(0,0),(1,1),(1,0)。如果直接相加结果作为索引会存在两个问题:(1)索引有负数;(2) ( 0 , − 1 ) , ( − 1 , 0 ) (0,-1), (-1,0) (0,1),(1,0)表示的索引相同。解决方法:(1)横纵坐标的索引都加上M-1;(2)第一维索引 ∗ ( 2 M − 1 ) *(2M-1) (2M1)

  • 与trm和vit区别
    trm中的位置编码是正余弦函数,是固定的,不可学习的;vit中的是可学习的embedding,索引使用的是绝对位置;Swin Transformer中是位置编码是放在attention矩阵中,且使用的是相对位置信息而不是绝对位置信息。

相对位置在[-M+1,M-1]的详细解释Swin Transformer网络结构详解

(4)Swin Transformer Variants

论文阅读【Swin Transformer: Hierarchical Vision Transformer using ShiftedWindows】_第8张图片
C表示first stage中hidden layers的channel number

你可能感兴趣的:(论文阅读,transformer,深度学习,人工智能)