【论文笔记】:Swin transformer(转载)

【论文笔记】:Swin transformer(转载)

&Summary

作者单位:微软亚洲研究院
代码:https://github.com/microsoft/Swin-Transformer
论文:https://arxiv.org/abs/2103.1403

  • 目标检测刷到58.7 AP(目前第一)!
  • 实例分割刷到51.1 Mask AP(目前第一)!
  • 语义分割在ADE20K上刷到53.5 mIoU(目前第一)!
  • 性能优于DeiT、ViT和EfficientNet等主干网络

本文介绍了一种称为Swin Transformer的新型视觉Transformer,它可以用作计算机视觉的通用backbone。在两个领域之间的差异,例如视觉实体尺度的巨大差异以及与文字中的单词相比,图像中像素的高分辨率,带来了使Transformer从语言适应视觉方面的挑战。

为了解决这些差异,我们提出了一个分层的Transformer,其表示是通过移动窗口来计算的。通过将自注意力计算限制为不重叠的局部窗口,同时允许跨窗口连接,移位的窗口方案(通过将self-attention计算限制在非重叠的局部窗口上,同时允许跨窗口连接,从而提高了效率)带来了更高的效率。这种分层体系结构具有在各种尺度上建模的灵活性,并且相对于图像大小具有线性计算复杂性。

Transformer是为序列建模和转换任务而设计的,因为它关注数据中的长期依赖性建模。它在语言领域的巨大成功促使研究人员研究它对计算机视觉的适应性,最近它在某些任务上显示了不错的结果,特别是图像分类和联合视觉语言建模。

显示了基于Transformer的模型作为视觉支柱的潜力。

存在许多视觉任务,如语义分割,需要在像素级进行dense的预测,这对于高分辨率图像上的Transformer来说是很困难的,因为它self-attention的计算复杂度是图像大小的二次方。提出的Swin-Transformer,它构造了层次化的特征映射,并且计算复杂度与图像大小成线性关系。

&Methods

【论文笔记】:Swin transformer(转载)

如上图所示,Swin-Transformer通过从小尺寸的面片(用灰色表示)开始,逐渐合并更深层次的Transformer层中的相邻面片来构造层次表示。有了这些分层特征映射,Swin-Transformer模型可以方便地利用高级技术进行dense预测,如特征金字塔网络(FPN)或U-Net。线性计算复杂度是通过在分割图像的非重叠窗口(红色轮廓)内局部计算自我注意来实现的。每个窗口中的面片数是固定的,因此复杂度与图像大小成线性关系。

这些优点使得Swin-Transformer适合作为各种视觉任务的通用主干,与以前基于Transformer的体系结构形成对比,后者产生单一分辨率的特征图,并且具有二次复杂性。

Swin Transformer的一个关键设计元素是它在连续的self-attention之间的窗口分区的移动,如下图所示:
【论文笔记】:Swin transformer(转载)
移动的窗口桥接了前一层的窗口,提供了它们之间的连接,显著增强了建模能力。这种策略对于真实世界的延迟也是有效的:一个窗口中的所有query patches都共享相同的key set,这有助于硬件中的内存访问。

相比之下,早期的基于滑动窗口的self-attention方法由于不同query像素的key集合不同,在一般硬件上的延迟较低。实验结果表明,所提出的shifted window方法比传统方法具有更低的延迟。

所提出的Swin Transformer在图像分类、目标检测和语义分割等识别任务上取得了很好的效果。在这三个任务上,它的延迟时间与ViT/DeiT和ResNe(X)t模型相似,显著优于ViT/DeiT和ResNe(X)t模型。

整体架构

【论文笔记】:Swin transformer(转载)

Stage1

首先通过像ViT一样的分片模块将输入的RGB图像分片成不重叠的patch。每个patch被视为一个“token”,其特征被设置为原始像素RGB值的串联。

在我们的实现中,我们使用了4×4的面片大小,因此每个面片的特征维数为4×4×3=48。在这个原始值特征上应用一个线性嵌入层,将其投影到任意维(表示为C)。变化过的self-attention(Swin Transformer blocks)被应用到这些patch token上。Transformer block保留了token的个数()并且使用了线性的Embedding。

Stage2

为了生成一个层次化的表示,当网络变得更深,token的数量会通过patches合并层而减少。第一块拼接层连接了每组2×2相邻的patch的特征,并在维级联特征上应用线性层。这将token的数量减少了2×2=4的倍数(分辨率的2×降采样),并且输出维度设置为2C。之后应用Swin Transformer block进行特征变换,分辨率保持在。

Stage3&4

将该过程重复两次,输出分辨率分别为和。这些阶段共同产生一个层次表示,具有与典型卷积网络相同的特征图分辨率,例如VGG和ResNet。因此,所提出的架构可以方便地取代现有方法中的主干网来执行各种视觉任务。

Swin transformer block

Swin Transformer是将Transformer模块中的标准multi-head self-attention(MSA)模块替换为基于移动窗口,其它层保持不变。Swin Transformer由一个基于移位窗口的MSA模块组成,然后是一个介于GELU非线性之间的2层MLP。在每个MSA模块和每个MLP之前应用LayerNorm(LN)层,在每个模块之后应用剩余连接。

基于shifted window 的self-attention

标准Transformer体系结构及其对图像分类的自适应都进行global self-attention,其中计算了一个token和所有其他token之间的关系。全局计算导致token数量的二次复杂度,这使得它不适用于许多需要大量令牌进行密集预测或表示高分辨率图像的视觉问题。

  1. Self-attention in non-overlapped windows
    【论文笔记】:Swin transformer(转载)
  2. Shifted window partitioning in successive blocks
    基于窗口的自self-attention模块缺乏跨窗口的连接,这限制了它的建模能力。为了在保持非重叠窗口计算效率的同时引入跨窗口连接,我们提出了一种移位窗口划分方法,该方法在连续的Swin Transformer块中交替使用两种划分配置。如上图所示,第一个模块使用了一个从左上角像素开始的规则窗口划分策略,第一个模块采用将8×8 特征map平均划分为2×2个4×4(M=4)的窗口。然后,下一模块采用从上一层的窗口配置偏移的窗口配置,通过将窗口从规则分区的窗口置换像素。利用移位窗口划分方法,连续的swin transformer块被计算为:【论文笔记】:Swin transformer(转载)
    • W-MSA:使用regular窗口分区配置的基于window的multi-head self-attention
    • SW-MSA:使用移动的窗口分区配置的基于window的multi-head self-attention
      移位窗口分割方法引入了前一层相邻非重叠窗口之间的连接,被发现在图像分类、目标检测和语义分割上是非常有效的。
architecture variants

我们建立了与ViTB/DeiT-B相似计算复杂度的模型Swin-B,并介绍了Swin-T、Swin-S和Swin-L,它们分别是模型大小和计算复杂度的0.25倍、0.5倍和2倍。【论文笔记】:Swin transformer(转载)

上一篇:Transformer以及attention机制介绍


下一篇:一文带你了解两种Transformer文字识别方法