《Swin Transformer: Hierarchical Vision Transformer using Shifted Windows》阅读笔记

发布时间 2023-11-11 21:54:00作者: AncilunKiang

论文标题

《Swin Transformer: Hierarchical Vision Transformer using Shifted Windows》

  • Swin 这个词貌似来自后面的 Shifted Windows
  • Shifted Windows:移动窗口
  • Hierarchical:分层

作者

微软亚洲研究院出品

初读

摘要

  • 提出 Swin Transformer

    可以作为 CV 的通用主干

  • Tansformer 用于图像的挑战:

    • 视觉实体尺度变化很大,比如不同图片中的同一种物体大小不一
    • 图片的像素比文本中的单词要大的多
  • 解决:分层结构+移动窗口

    • 将自注意力计算限制在不重叠的窗口上
    • 同时还允许跨窗口连接
  • 优点:

    • 具有在各种尺度上建模的灵活性
    • 计算复杂性相对于图像大小是线性的(为后续的 Swin V2 做了铺垫)
    • 与广泛的视觉任务兼容
  • 效果:

    • ImageNet-1K上的 87.3 top-1 精度
    • COCO testdev 上的 58.7 box AP 和 51.1 mask AP (盒子AP为 +2.7,掩模 AP为 +2.6)
    • ADE20K val 上的 53.5mIoU(ADE20K 上的 IOU 为 +3.2)
    • 分层设计和移动窗口方法也被证明对所有 MLP 架构都是有益的。

结论

  • Swin Transformer 优势特点:

    • 产生了一种层次特征表示
    • 相对于输入图像大小具有线性计算复杂性。
  • 效果:

    Swin Transformer 在 COCO 对象检测和 ADE20K 语义分割方面实现了最先进的性能,大大超过了以前的最佳方法。

  • 展望:

    • 我们希望 Swin Transformer 在各种视觉问题上的强大性能将鼓励对视觉和语言信号进行统一建模。
    • 作为Swin-Transformer的一个关键元素,基于移动窗口的自注意被证明在视觉问题上是有效的,我们也期待着研究它在自然语言处理中的应用。

再读

Section 1 Introduction

  • 第一段:CV现状

    长期以来,计算机视觉建模一直由 CNN 主导。

  • 第二段:NLP 现状

    另一方面,NLP 中网络架构的演变走上了一条不同的道路,今天流行的架构是 Transformer。

  • 第三段:本文对现存问题的解决

    • 本文愿景:

      试图扩大 Transformer 的适用性,使其可以作为计算机视觉的通用主干。

    • 将 Transformer 在语言领域的高性能转移到视觉领域的重大挑战可以用两种模式之间的差异来解释:

      • 其中一个差异涉及规模,视觉元素的规模可能会有很大变化,尤其是在对象检测等任务中。在现有的基于 Transformer 的模型中,tokens 都是固定规模的,这一特性不适合这些视觉应用。
      • 另一个区别是,图像中的像素分辨率比文本段落中的单词数高得多。如语义分割等视觉任务需要在像素级别进行密集预测,但因为其自注意力的计算复杂度是图像大小的二次方,所以 Transformer 在高分辨率图像上难以运算。
    • 解决方案:提出通用的 Transformer 主干——Swin Transformer

      image

      • 构造层次特征图

        Swin-Transformer 通过从小尺寸补丁(灰色轮廓)开始,逐渐合并更深 Transformer 层中的相邻补丁(patch),构建了一个层次表示。有了这些分层特征图,Swin-Transforme 模型可以方便地利用高级技术进行密集预测,如特征金字塔网络(FPN)或 U-Net。

      • 对图像大小具有线性计算复杂性。

        线性计算复杂性是通过在划分图像(红色轮廓)的非重叠窗口内局部计算自注意来实现的。每个窗口中的补丁数量是固定的,因此复杂性与图像大小成线性关系。这些优点使 Swin Transformer适合作为各种视觉任务的通用主干,与之前基于 Transformer 的架构形成鲜明对比,后者产生单一分辨率的特征图,并具有二次复杂性。

  • 第四段:在连续的自注意层之间移动窗口分区(如图就是往右往下各移动两个 patch)

    image

    • 高建模能力:

      偏移的窗口桥接了前一层的窗口,提供了它们之间的连接,显著增强了建模能力。

    • 低延迟:

      一个窗口内的所有查询补丁共享相同的密钥集,这有助于硬件中的内存访问。相比之下,早期的基于滑动窗口的自关注方法在通用硬件上由于不同查询像素的不同密钥集而延迟较低。

    • 设计通用性:

      实验表明,所提出的移位窗口方法比滑动窗口方法具有低得多的延迟,但在建模能力方面相似。移位窗口方法也被证明对所有 MLP 架构都是有益的。

  • 第五段:表现出色

    • 在图像分类、对象检测和语义分割等任务上的延迟相似,显著优于 ViT/DeiT 和 ResNe(X)t 模型。
    • 在 COCO 测试开发集上的 58.7 box AP 和 51.1 mask AP 超过了之前最先进的结果,分别为 +2.7 box AP (无外部数据的复制粘贴)和 +2.6 mask AP (DetectoRS)。
    • 在 ADE20K 语义分割上,它在 val 集上获得 53.5 mIoU,比以前的最先进技术(SETR)提高了 +3.2 mIoU。
    • 它在 ImageNet-1K 图像分类上也达到了 87.3% 的 top-1 准确率。
  • 第六段:多模态通一展望

    我们相信,跨计算机视觉和自然语言处理的统一架构可以使这两个领域受益,因为它将促进视觉和文本信号的联合建模,并且可以更深入地共享这两个域的建模知识。我们希望 Swin Transformer 在各种视觉问题上的出色表现能够在社区中更深入地推动这种信念,并鼓励对视觉和语言信号进行统一建模。

  • CNN 及其变体

    CNN 是整个计算机视觉的标准网络模型。

    • CNN 开始发展并成为主流: AlexNet。
    • 更深入、更有效的卷积神经架构:VGG、GoogleNet、ResNet、DenseNet,HRNet 和 EfficientNet。
    • 改进单个卷积层:深度卷积和可变形卷积。
    • 展望:虽然 CNN 及其变体仍然是计算机视觉应用的主要骨干架构,但我们强调了类似 Transformer 的架构在视觉和语言之间统一建模的强大潜力。我们的工作在几个基本的视觉识别任务上取得了很好的表现,我们希望它将有助于建模的转变。
  • 基于自注意力机制的骨干架构

    一些作品使用自注意层来取代流行的ResNet 中的部分或全部空间卷积层。

    • 现状与优势:

      在这些工作中,为了加快优化,自注意力是在每个像素的局部窗口内计算的,并且它们实现了比对应的 ResNet 架构略好的准确性/FLOP权衡。

    • 缺点:

      它们昂贵的内存访问导致它们的实际延迟显著大于卷积网络。

    • 本文工作:

      我们建议在连续层之间移动窗口,而不是使用滑动窗口,这允许在通用硬件中更有效地实现。

  • 以自注意力机制或 Transformer 补充 CNN

    另一项工作是用自注意力层或 Transformer 来增强标准的 CNN 架构

    • 自注意层可以通过提供编码远距离依赖性或异构交互的能力来补充主干或头部网络。
    • Transformer 中的编码器-解码器设计已应用于对象检测和实例分割任务。
    • 我们的作品探索了 Transformer 的改造,以提取基本的视觉特征,并与这些作品相辅相成。
  • 基于 Transformer 的视觉骨干

    最相关工作是 ViT 及其后续工作。

    • ViT 的开创性:

      ViT 的开创性工作直接将 Transformer 架构应用于不重叠的中等大小图像块,用于图像分类。与卷积网络相比,它在图像分类方面实现了令人印象深刻的速度-精度折衷。

    • ViT 的数据集依赖:

      虽然 ViT 需要大规模的训练数据集(即JFT-300M)才能表现良好,但 DeiT 引入了几种训练策略,使ViT 也能使用较小的 ImageNet-1K 数据集发挥作用。

    • ViT 的计算复杂:

      ViT 在图像分类方面的结果令人鼓舞,但由于其低分辨率特征图和复杂度随图像大小的二次方增加,其架构不适合用作密集视觉任务或输入图像分辨率高时的通用骨干网络。

    • 当前对 ViT 的改进:

      有一些工作通过直接上采样或去卷积将 ViT 模型应用于对象检测和语义分割的密集视觉任务,但性能相对较低。还有一些修改了 ViT 架构以获得更好的图像分类。

    • 本文工作:

      根据经验,我们发现我们的 Swin-Transformer 架构在图像分类的这些方法中实现了最佳的速度精度权衡,尽管我们的工作侧重于通用性能,而不是专门针对分类。另一项并行工作探索了在 Transformer 上构建多分辨率特征图的类似思路。它的复杂性仍然是图像大小的二次方,而我们的复杂性是线性的,并且也在局部操作,这已被证明有利于对视觉信号中的高相关性进行建模。我们的方法既高效又有效,在COCO 对象检测和 ADE20K 语义分割方面都达到了最先进的精度。

Section 3 METHOD

3.1. Overall Architecture

总体架构

image

  • 阶段一 [TODO]

    • Patch Partition:

      首先通过和 ViT 类似的 patch 分割模块将输入 RGB 图像分割成不重叠的 patch。每个 patch 都被视为一个“标记(token)”,其特征被设置为原始像素 RGB 值的串联。在本文的实现中,我们使用 \(4\times4\) 的 patch 大小,因此每个补丁的特征维度为 \(4\times4\times3=48\)

    • Linear Embedding:

      用线性嵌入层应将补丁投影到任意维度(表示为 \(C\))。这一顿操作之后每张图片就变成了 \(\frac{H}{4}\times\frac{W}{4}\times C\) 的尺寸。

    在这些补丁 token 上应用了几个具有修改的自注意计算的 Transformer 块(Swin-Transformer 块)。Transformer 块保持令牌的数量( \(\frac{H}{4}\times\frac{W}{4}\) ),并且与线性嵌入一起被称为“阶段1”。

  • 阶段二:

    • Patch Merging:有点像 Pixel Shuffle 上采样 [TODO] 的逆转版本。

      为了生成分层表示,随着网络的深入,通过 patch 合并层来减少令牌的数量。

      • 第一个 patch 合并层将每组 \(2\times2\) 个相邻 patch 的特征连接起来。实际操作是把每个 patch 再分成一系列 \(2\times2\) 的特征块,把然后把所有特征块的四个小块按序号拼一起(比如四个左上角的拼一起,四个右上角的拼一起,以此类推)。也就是说 每个 patch 变成了 4 个 \(2\times2\) 的特征块。
      • 再把上面 4 个 \(2\times2\) 的特征块串联在一起,也就把原来 \(4\times4\times C\) 变成 \(2\times2\times4C\) 的 patch。
      • 再然后在 \(4C\) 维连接的特征上应用线性层(可以用等效的 \(2C\)\(1\times1\) 卷积核减半通道数 )进行下采样。将上面 \(2\times2\times4C\) 的 patch 变成 \(2\times2\times2C\) 的 patch。这一顿操作之后,图片就变成了 \(\frac{H}{8}\times\frac{W}{8}\times2C\) 的尺寸(很像卷积了,特征图缩小同时成 2 倍的增加通道数)。
      • 然后应用 Swin-Transformer 块进行特征变换。patch 合并和特征转换的第一块被表示为“阶段2”。
  • 阶段三和阶段四:

    重复阶段二两次即分别为阶段三和阶段四,输出分辨率进一步降为 \(\frac{H}{16}\times\frac{W}{16}\times4C\)\(\frac{H}{32}\times\frac{W}{32}\times8C\)。太像卷积了,这些阶段共同产生分层表示,具有与典型卷积网络(例如 VGG 和 ResNet)相同的特征图分辨率。因此,所提出的体系结构可以方便地取代现有方法中用于各种视觉任务的骨干网络。

  • Swin Transformer 块:

    Swin Transformer 是通过将 Transformer 块中的标准多头自注意(MSA)模块替换为基于移位窗口的模块而构建的,其他层保持不变。Swin Transformer 块由一个基于移位窗口的 MSA 模块组成,然后是一个中间具有 GELU非线性的两层 MLP。在每个 MSA 模块和每个 MLP 之前应用 LayerNorm(LN)层,并且在每个模块之后应用残差连接。

3.2. Shifted Window based Self-Attention

基于移位窗口的自我注意

  • 问题阐述:

    标准 Transformer 架构及其对图像分类的自适应都进行全局自注意,其中计算 token 和所有其他 token 之间的关系。全局计算导致了 token 数量的二次复杂性,使其不适合于许多需要大量 token 集进行密集预测或表示高分辨率图像的视觉问题。

  • 非重叠窗口中的自我注意:

    为了有效建模,我们在局部窗口内进行自注意操作。窗口被排列为以非重叠的方式均匀地划分图像。假设每个窗口包含 \(M\times M\) 个 patch,全局 MSA 模块和基于 \(h\times w\) 个 patch 图像的窗口的计算复杂度为 [TODO]

    \[\begin{align} \Omega(\mathrm{MSA})=4hwC^2+2(hw)^2C\\ \Omega(\mathrm{W-MSA})=4hwC^2+2M^2hwC \end{align} \]

    其中前者是 patch 数 \(hw\) 的二次方,而后者在 \(M\) 固定时是线性的(默认设置为 7)。全局自注意计算对于大型 \(hw\) 来说通常是负担不起的,而基于窗口的自注意是可扩展的。

  • 连续块中的移动窗口分区

    基于窗口的自注意力模块缺乏跨窗口的连接,这限制了其建模能力。为了引入跨窗口连接,同时保持非重叠窗口的有效计算,我们提出了一种移动窗口分区方法,该方法在连续 Swin-Transformer 块中的两种分区配置之间交替。

    第一个模块使用从左上角像素开始的规则窗口划分策略,将 \(8\times8\) 的特征图均匀地划分为大小为 \(4\times4\)(M=4)的 \(2\times2\) 个窗口。然后,下一个模块通过将窗口从规则划分的窗口移位(\(\left\lfloor\frac{M}{2}\right\rfloor\)\(\left\lfloor\frac{M}{2}\right\rfloor\))个像素,采用与前一层的窗口配置不同的窗口配置。使用移动窗口分区方法,连续的 Swin-Transformer 块计算如下:

    \[\begin{align} &\hat{\boldsymbol{\mathrm{z}}}^l=\mathrm{W-MSA}(\mathrm{LN}(\boldsymbol{\mathrm{z}}^{l-1}))+\boldsymbol{\mathrm{z}}^{l-1},\\ &\boldsymbol{\mathrm{z}}^l=\mathrm{MLP}(\mathrm{LN}(\hat{\boldsymbol{\mathrm{z}}}^{l-1}))+\hat{\boldsymbol{\mathrm{z}}}^{l-1},\\ &\hat{\boldsymbol{\mathrm{z}}}^{l+1}=\mathrm{SW-MSA}(\mathrm{LN}(\boldsymbol{\mathrm{z}}^l))+\boldsymbol{\mathrm{z}}^l,\\ &\boldsymbol{\mathrm{z}}^{l+1}=\mathrm{MLP}(\mathrm{LN}(\hat{\boldsymbol{\mathrm{z}}}^{l+1}))+\hat{\boldsymbol{\mathrm{z}}}^{l+1}, \end{align} \]

    其中,\(\hat{\boldsymbol{\mathrm{z}}}^l\)\(\boldsymbol{\mathrm{z}}^l\) 分别表示块 \(l\) 的 (S)W-MSA 模块和 MLP 模块的输出特征;W-MSA 和 SW-MSA 分别表示使用规则和移动窗口划分配置的基于窗口的多头自注意。

    移动窗口分割方法引入了前一层中相邻非重叠窗口之间的连接,并被发现在图像分类、对象检测和语义分割方面是有效的。

  • 针对移位配置的高效批量计算

    移动窗口分区的一个问题是,在移位配置中,它将导致更多的窗口,从 \(\left\lceil\frac{h}{M}\right\rceil\times\left\lceil\frac{w}{M}\right\rceil\)\((\left\lceil\frac{h}{M}\right\rceil+1)\times(\left\lceil\frac{w}{M}\right\rceil+1)\) ,并且一些窗口将小于 \(M\times M\)。一个简单的解决方案是将较小的窗口填充到 \(M\times M\) 的大小,并在计算注意力时屏蔽填充的值。当规则分区中的窗口数量很小时,例如 \(2\times 2\),使用这种朴素解增加的计算量是相当大的(\(2\times2\to3\times3\),是 2.25 倍)。在这里,我们提出了一种更有效的批量计算方法,通过向左上角方向循环移位。

    image

    在该偏移之后,分批窗口可以由在特征图中不相邻的几个子窗口组成,因此采用掩蔽机制 [TODO] 来将自注意计算限制在每个子窗口内。通过循环移位,批处理窗口的数量与常规窗口分区的数量保持相同,因此也是有效的。

  • 相对位置偏差

    在计算自注意时,我们通过在计算相似性时包括每个头部的相对位置偏差 \(B\in\R^{M^2\times M^2}\)

    \[\mathrm{Attention}(Q,K,V)=\mathrm{SoftMax}(QK^T/\sqrt{d}+B)V \]

    • 参数字典:
      • 其中 \(Q,K,V\in\R^{M^2\times d}\) 是查询矩阵、键矩阵和值矩阵;
      • \(d\) 是查询/键维度,
      • \(M^2\) 是窗口中的补丁数量。

    由于沿每个轴的相对位置位于 \([-M+1,M−1]\) 的范围内,因此我们参数化较小的偏置矩阵 \(\hat{B}\in\R^{(2M-1)\times(2M-1)}\),并且 \(B\) 中的值取自 \(\hat{B}\)

    观察到与没有该偏差项或使用绝对位置嵌入的对应项相比有显著改进。进一步向输入添加绝对位置嵌入会略微降低性能,因此在我们的实现中没有采用它。

    预训练中学习到的相对位置偏差也可以用于初始化模型,以便通过双三次插值以不同的窗口大小进行微调。

3.3. Architecture Variants

架构变体

  • Swin-B :基本模型

模型大小和计算复杂度与 ViTB/DIT-B 相似

  • Swin-T:

    模型大小和计算复杂度是 ViTB/DIT-B 的 0.25 倍,与 ResNet-50(DeiT-S)复杂度相似

  • Swin-S:

    模型大小和计算复杂度与 ViTB/DIT-B 的 0.5 倍,与 ResNet-101 的复杂性相似

  • Swin-L:

    模型大小和计算复杂度与 ViTB/DIT-B 的 2 倍

  • 模型变体的体系结构超参数为:

    \[\begin{align} \mathrm{Swin-T}&:C=96,\mathrm{layer\ numbers}=\{2,2,6,2\}\\ \mathrm{Swin-S}&:C=96,\mathrm{layer\ numbers}=\{2,2,18,2\}\\ \mathrm{Swin-B}&:C=128,\mathrm{layer\ numbers}=\{2,2,18,2\}\\ \mathrm{Swin-L}&:C=192,\mathrm{layer\ numbers}=\{2,2,18,2\} \end{align} \]

    • 参数列表:
      • 其中 \(C\) 是第一阶段中隐藏层的通道编号。
      • 默认情况下,窗口大小设置为 M=7。
      • 对于所有实验,每个头的查询维度为 d=32
      • 每个 MLP 的扩展层为 α=4。

Section 4 EXPERIMENTS

4.1. Image Classification on ImageNet-1K

ImageNet-1K上的图像分类

  • 设定:

    • 数据集:

      • ImageNet-1K:

        包含 128 万个训练图像和来自 1000 个类别的 50 万个验证图像。报告了单作物的 top-1 精度。

      • ImageNet-22K:

        在这个较大的数据集上进行预训练,包含 1420 万张图像和 22K 个类。

    • 两种训练环境:

      • 定期 ImageNet-1K 训练。

        • 使用 AdamW 优化器,用于 300 个 epochs

        • 使用余弦衰减学习率调度器和 20 个 epochs 的线性预热

        • 使用 1024 的批量大小、0.001 的初始学习率和 0.05 的权重衰减。

        • 在训练中包括了大多数扩充和正则化策略,除了重复扩充和 EMA,它们不会提高性能。注意,这与相反,在中,重复增强对稳定ViT的训练至关重要。

      • ImageNet-22K 预训练和 ImageNet-1K 上的微调

        • 对 90 个 epochs 使用 AdamW 优化器
        • 使用具有 5 个 epochs 线性预热的线性衰减学习率调度器。
        • 使用 4096 的批量大小、0.001 的初始学习率和 0.01 的权重衰减。
        • 在 ImageNet-1K 微调中,训练了 30 个 epochs 的模型,批量大小为 1024,恒定学习率为 \(10^{−5}\),权重衰减为 \(10^{−8}\)
  • 常规 ImageNet-1K 训练的结果:

    image

    • 与 DeiT (之前最先进的基于 Transformer 的架构)相比:

      Swin Transformers 显著超过了具有类似复杂性的对应 DeiT 架构:Swin-T(81.3%)使用 2242 输入时比 DeiT-S(79.8%)高 +1.5%,Swin-B(83.3%/84.5%)使用 2242/3842 输入时比 DeiT-B(81.8%/83.1%)高 +1.5%。

    • 与 RegNet 和 EfficientNet (最先进的 ConvNets)相比:

      Swin Transformer 实现了略好的速度-精度权衡。注意到,虽然 RegNet 和 EfficientNet 是通过彻底的架构搜索获得的,但所提出的 Swin Transformer 是根据标准 Transformer 改编的,具有很强的进一步改进潜力。

  • ImageNet-22K 预训练结果

    image

    我们还在 ImageNet-22K 上预训练较大容量的 Swin-B 和 Swin-L。

    • Swin-B,ImageNet-22K 预训练比 ImageNet-1K 从头开始的训练带来 1.8%~1.9% 的收益。与之前 ImageNet-22K 预训练的最佳结果相比,我们的模型实现了显著更好的速度-精度权衡:Swin-B 获得了86.4%的前1精度,比具有相似推理吞吐量(84.7 vs.85.9图像/秒)和略低 FLOP(47.0G vs.55.4G)的 ViT 高 2.4%。
    • 较大的 Swin-L 模型实现了 87.3% 的前1准确性,比 Swin-B 模型提高 +0.9%。

4.2. Object Detection on COCO

COCO上的目标检测

  • 设定

    • 数据集:COCO 2017

      在此数据集上进行对象检测和实例分割实验,其中包含 118K 训练、5K 验证和 20K测试开发图像。使用验证集进行消融研究,并在测试中报告系统级比较。

    • 消融研究:

      • 四种典型的对象检测框架:

        • 毫米检测中的级联掩码 R-CNN、
        • ATSS、
        • RepPoints v2
        • 稀疏 RCNN 。
      • 参数设置:对这四个框架使用相同的设置:

        • 多尺度训练(调整输入大小,使短边在 480 和 800 之间,而长边最多为 1333)
        • AdamW 优化器(初始学习率为 0.0001,权重衰减为 0.05,批量大小为 16)和 3x 时间表(36个 epochs)。
        • 为了进行系统级比较,我们采用了一种改进的 HTC(表示为 HTC++),其具有 instabout、更强的多尺度训练、6x 调度(72个 epochs )、软 NMS 和 ImageNet-22K 预训练模型作为初始化。
    • 比较对象与方式:

      • 将Swin Transformer 与标准 ConvNets(即 ResNe(X)t)以及以前的 Transformer 网络(例如DeiT)进行比较。
      • 比较是通过在其他设置不变的情况下仅更改主干来进行的。
      • 虽然 Swin Transformer 和 ResNe(X)t 由于其层次特征图而直接适用于上述所有框架,但 DeiT 只产生单一分辨率的特征图,不能直接应用。为了进行公平的比较,我们按照使用反褶积层为 DeiT 构建分层特征图。
  • 与 ResNe(X)t 的比较

    • 下表列出了 Swin-T 和 ResNet-50 在四个对象检测框架上的结果。与 ResNet-50 相比,我们的 Swin-T 架构带来了稳定的 +3.4~4.2 盒 AP 增益,具有略大的型号大小、FLOP 和延迟。

      image

    • 下表比较了使用级联掩码 RCNN 在不同模型容量下的 Swin Transformer 和 ResNe(X)t。

      image

      • Swin Transformer 实现了 51.9 盒 AP 和 45.0 掩模 AP 的高检测精度,这是 +3.6 盒 AP 和 +3.3 掩模 AP 相对于具有相似模型大小、FLOP 和延迟的 ResNeXt101 64x4d 的显著增益。
      • 在使用改进的 HTC 框架的 52.3 盒 AP 和 46.0 掩模 AP 的较高基线上,Swin Transformer 的增益也很高,分别为 +4.1 盒 AP 和 +3.1 掩模 AP。
      • 关于推理速度,虽然 ResNe(X)t 是由高度优化的 Cudnn 函数构建的,但我们的架构是用内置的 PyTorch 函数实现的,这些函数并不是都经过了很好的优化。彻底的内核优化超出了本文的范围。
  • 与 Dei 的比较

    • 在相似的模型大小(86M 对 80M)和显著更高的推理速度(15.3 FPS 对 10.4 FPS)下,Swin-T 比 DeiT-S 高 +2.5 盒 AP 和 +2.3 掩码 AP。
    • DeiT 较低的推理速度主要是由于其对输入图像大小的二次复杂度。
  • 与以前最先进技术的比较

    image

    • 我们的最佳模型在 COCO 测试开发中实现了 58.7 盒 AP 和 51.1 掩码 AP,超过了之前的最佳结果 +2.7 盒 AP(无外部数据的复制粘贴)和 +2.6 掩码 AP(DetectoRS)。

4.3. Semantic Segmentation on ADE20K

ADE20K 上的语义分割

  • 设定:

    ADE20K 是一个广泛使用的语义分割数据集,涵盖了 150 个语义类别。它总共有 25K 张图像,其中 20K 用于训练,2K 用于验证,另外 3K 用于测试。我们利用 mmseg 中的 UperNet 作为其高效性的基础框架。

  • 结果:

    image

    • 在类似的计算成本下,Swin-S 比 DeiT-S 高 +5.3 mIoU(49.3 对 44.0)
    • 它也比 ResNet-101 高 +4.4 mIoU,比 ResNeSt-101 高 +2.4 mIoU。
    • 带有 ImageNet-22K 预训练的 Swin-L 模型在 val 集上实现了 53.5 mIoU,超过了之前的最佳模型 +3.2 mIoU(SETR 的 50.3 mIoU 具有更大的模型大小)。

4.4. Ablation Study

消融实验

  • 实验方案:

    使用 ImageNet-1K 图像分类、用于 COCO 对象检测的级联掩码 R-CNN 和用于 ADE20K 语义分割的 UperNet,来去除所提出的 Swin Transformer 中的重要设计元素。

  • 移动窗口

    image

    • 具有移动窗口分区的 Swin-T 与基于单个窗口分区构建的 Swin-T 相比
      • 在 ImageNet-1K 上,高出 +1.1% top-1 精度
      • 在COCO上高出 +2.8 box AP/+2.2 mask AP
      • 在 ADE20K 上高出 2.8 mIoU。
    • 结果表明,使用移动窗口在前面的层中的窗口之间建立连接是有效的。移位窗口的延迟开销也很小。
  • 相对位置偏差

    • 与没有位置编码和具有绝对位置嵌入的Swin-T相比,具有相对位置偏置的Swin-T
      • 在 ImageNet-1K 上分别产生 +1.2%/+0.8% top-1 准确度
      • 在 COCO 上产生 +1.3/+1.3 框 AP 和 +1.1/+1.3 掩模 AP
      • 在 ADE20K 上产生 +2.3/+2.9 mIoU
    • 这表明相对位置偏置是有效的。还要注意的是,虽然包含绝对位置嵌入提高了图像分类精度(+0.4%),但它损害了对象检测和语义分割(在 COCO 上为-0.2 box/mask AP,在 ADE20K 上为-0.6 mIoU)。
    • 尽管最近的 ViT/DeiT 模型在图像分类中放弃了长期以来一直被证明对视觉建模至关重要的平移不变性,但我们发现,鼓励某些平移不变性的归纳偏置对于通用视觉建模仍然是优选的,特别是对于对象检测和语义分割的密集预测任务。
  • 不同的自注意力方法

    image

    • 上表比较了不同的自注意计算方法和实现的实际速度。

      • 循环实现比简单的填充更具硬件效率,特别是对于更深的阶段
      • 总体而言,它分别使 Swin-T、Swin-S 和 Swin-B 的速度提高了 13%、18% 和 18%。
    • 在四个网络阶段上,基于所提出的移位窗口方法构建的自注意模块的效率分别比滑动窗口的效率高40.8×/2.5×、20.2×/22.5×、9.3×/2.1× 和 7.6×/1.8×。

    • 总体而言,基于移位窗口构建的 Swin-Transformer 架构分别比基于滑动窗口构建的变体 Swin-T、Swin-S 和 Swin-B 快 4.1/1.5、4.0/1.5 和 3.6/1.5 倍。下表比较了它们在三项任务中的准确性,表明它们在视觉建模中同样准确。

      image

    • 与最快的 Transformer 架构之一 Performer 相比,所提出的基于移位窗口的自注意计算和整体 Swin-Transformer 架构略快 ,同时与使用 Swin-T 的 ImageNet-1K 上的 Performer 相比,实现了 +2.3% 的 top-1 精度。

三读

TODO List

Pixel Shuffle 上采样和 Patch Merging

image

大约就是把 \([H,W,C]\) 的图卷积成 \([H,W,C\times r^2]\) 的大小,再通过 Shuffle 操作变成 \([H\times r,W\times r,C]\) 的大小,从而实现上采样的效果。

Patch Merging 则像是把它反过来,把前文所述化成示意图:

image

模型中的从头到尾的 size 变化

以图片分辨率为 \(224\times 224\) 为例

  • 第一阶段:

    • Patch Partition 模块把 \(224\times224\) 的图片打成 \(4\times4\) 的图片块,所以图片维度由 \(224\times224\times3\) 变成了 \((224\div4)\times(224\div4)\times(4\times4\times3)=56\times56\times48\)

    • Linear Embedding 层 Swin-T 的投影维度 \(C=96\),所以尺寸会变成 \(56\times56\times96\) (代码里实际上是用 \(4\times4\)、步幅为4 、输出通道为 96 的卷积层实现的)、

    • 在 Swin Transformer 块里会先展平为 \(序列长度\times每个token的维度=3136\times96\) ,3136 这个长度对于注意力机制来说太长了,所以 Swin Transformer 块内进行的是基于窗口的自注意力。Swin Transformer 块也是不改变输入维度的,所以最终输出依然是 \(56\times56\times96\)

  • 第二阶段:

    • Patch Merging 操作不在赘述,总之是把图片尺寸变成了 \(28\times18\times192\)
    • 后面的 Swin Transformer 块依旧是输出不改变形状,依然是 \(28\times28\times192\)
  • 第三阶段和第四阶段:

    这两个阶段是复制的前面,所以仅仅是把尺寸变成了 \(14\times14\times384\)\(7\times7\times768\)

MSA 和 W-MSA 计算复杂度推导

  • 对于 MSA 来说

    image

    • 首先需要让 \(hw\times C\) 的 patch 分别成三个 \(C\times C\) 的矩阵变成 q、k 和 v,所以此处的计算复杂度为 \(3hwC^2\)
    • 然后 q 和 v 需要做运算用以得出注意力矩阵,实际上是 \(hw\times C\) 的 q 矩阵和 \(C\times hw\) 的 k 矩阵的转置得出 \(hw\times hw\) 的注意力矩阵,所以此处的计算复杂度是 \((hw)^2C\)
    • 最后需要给 v 加上注意力权重,实际上是 \(hw\times hw\) 的注意力矩阵和 \(hw\times C\) 的 v 矩阵做乘法,所以此处的计算复杂度是 \((hw)^2\times C\)
    • 最后的最后由于多个注意力头需要投射层,实际上还是 \(hw\times C\) 的矩阵和 \(C\times C\) 的矩阵相乘,所以此处的计算复杂度是 \(hwC^2\)
    • 上面一堆最终加起来就是上面式子里的 \(4hwC^2+2(hw)^2C\)
  • 对于 W-MSA 来说

    • W-MSA 实际上就是在每个窗口中做 MSA 中的操作,也就说只要把 \(hw\) 替换成 \(M\times M\)即可。
    • 也就是说一个窗口里的复杂度是 \(4M^2C^2+2M^4C\)
    • 窗口数为 \(\frac{h}{M}\times\frac{w}{M}\) 个,所以总复杂度是 \((\frac{h}{M}\times\frac{w}{M})\times(4M^2C^2+2M^4C)=4hwC^2+2M^2hwC\)

掩蔽机制具体实现

  • 白话简述:

    • 移位之后得到的是 9 个大小不一的块,如果把 9 个块填充成一样大小再进行运算则会大幅增加运算量

    • 因此采用如图 4 那样拼接的方法,把这九个切切补补攒出四个一样大小的块,这样就不会大幅增加计算量了。

      image

    • 但是如此处理会带来新的问题,小块中的拼接部分是没有关联的,理应不进行注意力计算。此处的解决方案是:仍正常进行注意力计算,在最终的矩阵中把不应该有的部分变成极小的负数(图中用 -100 表示),这样在做 softmax 时无关的部分就变成 0 了。

      image

      原作者在 GitHub 代码库的 issue 38 里做了可视化,也很一目了然:

      image

个人感想

相较于 ViT 的尽量不用归纳偏置,完全使用 Transformer 原架构。Swin Transformer 更像是专门为图像而设计,像是把卷积核替换成了 Transformer 核。为此又设计了诸多繁琐的细节。这样在图像领域效果更好了,但是在不同模态的通用性降低了,应用在多模态领域可能需要一些额外的设计。