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

论文标题

《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

      在这里插入图片描述

      • 构造层次特征图

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

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

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

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

    在这里插入图片描述

    • 高建模能力:

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

    • 低延迟:

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

    • 设计通用性:

      实验表明,所提出的移位窗口方法比滑动窗口方法具有低得多的延迟,但在建模能力方面相似。移位窗口方法也被证明对所有 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 在各种视觉问题上的出色表现能够在社区中更深入地推动这种信念,并鼓励对视觉和语言信号进行统一建模。

Section 2 Related works

  • 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

总体架构

在这里插入图片描述

  • 阶段一 [TODO]

    • Patch Partition:

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

    • Linear Embedding:

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

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

  • 阶段二:

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

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

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

    重复阶段二两次即分别为阶段三和阶段四,输出分辨率进一步降为 H 16 × W 16 × 4 C \frac{H}{16}\times\frac{W}{16}\times4C 16H×16W×4C H 32 × W 32 × 8 C \frac{H}{32}\times\frac{W}{32}\times8C 32H×32W×8C。太像卷积了,这些阶段共同产生分层表示,具有与典型卷积网络(例如 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 × M M\times M M×M 个 patch,全局 MSA 模块和基于 h × w h\times w h×w 个 patch 图像的窗口的计算复杂度为 [TODO]
    Ω ( M S A ) = 4 h w C 2 + 2 ( h w ) 2 C Ω ( W − M S A ) = 4 h w C 2 + 2 M 2 h w C \begin{align} \Omega(\mathrm{MSA})=4hwC^2+2(hw)^2C\\ \Omega(\mathrm{W-MSA})=4hwC^2+2M^2hwC \end{align} Ω(MSA)4hwC2+2(hw)2CΩ(WMSA)4hwC2+2M2hwC
    其中前者是 patch 数 h w hw hw 的二次方,而后者在 M M M 固定时是线性的(默认设置为 7)。全局自注意计算对于大型 h w hw hw 来说通常是负担不起的,而基于窗口的自注意是可扩展的。

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

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

    第一个模块使用从左上角像素开始的规则窗口划分策略,将 8 × 8 8\times8 8×8 的特征图均匀地划分为大小为 4 × 4 4\times4 4×4(M=4)的 2 × 2 2\times2 2×2 个窗口。然后,下一个模块通过将窗口从规则划分的窗口移位( ⌊ M 2 ⌋ \left\lfloor\frac{M}{2}\right\rfloor 2M ⌊ M 2 ⌋ \left\lfloor\frac{M}{2}\right\rfloor 2M)个像素,采用与前一层的窗口配置不同的窗口配置。使用移动窗口分区方法,连续的 Swin-Transformer 块计算如下:
    z ^ l = W − M S A ( L N ( z l − 1 ) ) + z l − 1 , z l = M L P ( L N ( z ^ l − 1 ) ) + z ^ l − 1 , z ^ l + 1 = S W − M S A ( L N ( z l ) ) + z l , z l + 1 = M L P ( L N ( z ^ l + 1 ) ) + z ^ l + 1 , \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} z^l=WMSA(LN(zl1))+zl1,zl=MLP(LN(z^l1))+z^l1,z^l+1=SWMSA(LN(zl))+zl,zl+1=MLP(LN(z^l+1))+z^l+1,
    其中, z ^ l \hat{\boldsymbol{\mathrm{z}}}^l z^l z l \boldsymbol{\mathrm{z}}^l zl 分别表示块 l l l 的 (S)W-MSA 模块和 MLP 模块的输出特征;W-MSA 和 SW-MSA 分别表示使用规则和移动窗口划分配置的基于窗口的多头自注意。

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

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

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

    在这里插入图片描述

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

  • 相对位置偏差

    在计算自注意时,我们通过在计算相似性时包括每个头部的相对位置偏差 B ∈ R M 2 × M 2 B\in\R^{M^2\times M^2} BRM2×M2
    A t t e n t i o n ( Q , K , V ) = S o f t M a x ( Q K T / d + B ) V \mathrm{Attention}(Q,K,V)=\mathrm{SoftMax}(QK^T/\sqrt{d}+B)V Attention(Q,K,V)=SoftMax(QKT/d +B)V

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

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

  • 模型变体的体系结构超参数为:
    S w i n − T : C = 96 , l a y e r   n u m b e r s = { 2 , 2 , 6 , 2 } S w i n − S : C = 96 , l a y e r   n u m b e r s = { 2 , 2 , 18 , 2 } S w i n − B : C = 128 , l a y e r   n u m b e r s = { 2 , 2 , 18 , 2 } S w i n − L : C = 192 , l a y e r   n u m b e r s = { 2 , 2 , 18 , 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} SwinTSwinSSwinBSwinL:C=96,layer numbers={2,2,6,2}:C=96,layer numbers={2,2,18,2}:C=128,layer numbers={2,2,18,2}:C=192,layer numbers={2,2,18,2}

    • 参数列表:
      • 其中 C C 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,恒定学习率为 1 0 − 5 10^{−5} 105,权重衰减为 1 0 − 8 10^{−8} 108
  • 常规 ImageNet-1K 训练的结果:

    在这里插入图片描述

    • 与 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 预训练结果

    在这里插入图片描述

    我们还在 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 和延迟。

      在这里插入图片描述

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

      在这里插入图片描述

      • 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 较低的推理速度主要是由于其对输入图像大小的二次复杂度。
  • 与以前最先进技术的比较

    在这里插入图片描述

    • 我们的最佳模型在 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 作为其高效性的基础框架。

  • 结果:

    在这里插入图片描述

    • 在类似的计算成本下,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 中的重要设计元素。

  • 移动窗口

    在这里插入图片描述

    • 具有移动窗口分区的 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 模型在图像分类中放弃了长期以来一直被证明对视觉建模至关重要的平移不变性,但我们发现,鼓励某些平移不变性的归纳偏置对于通用视觉建模仍然是优选的,特别是对于对象检测和语义分割的密集预测任务。
  • 不同的自注意力方法

    在这里插入图片描述

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

      • 循环实现比简单的填充更具硬件效率,特别是对于更深的阶段
      • 总体而言,它分别使 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 倍。下表比较了它们在三项任务中的准确性,表明它们在视觉建模中同样准确。

      在这里插入图片描述

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

三读

TODO List

  • Pixel Shuffle 上采样和 Patch Merging
  • 模型中的从头到尾的 size 变化
  • MSA 和 W-MSA 计算复杂度推导
  • 掩蔽机制具体实现

Pixel Shuffle 上采样和 Patch Merging

在这里插入图片描述

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

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

在这里插入图片描述

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

以图片分辨率为 224 × 224 224\times 224 224×224 为例

  • 第一阶段:

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

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

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

  • 第二阶段:

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

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

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

  • 对于 MSA 来说

    在这里插入图片描述

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

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

掩蔽机制具体实现

  • 白话简述:

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

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

      在这里插入图片描述

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

      在这里插入图片描述

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

      在这里插入图片描述

个人感想

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/133506.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Gradle-12】分析so文件和依赖的关系

1、前言 在包大小的占比中,so文件的占比往往是最高的,动辄几兆的大小多一个都会把包大小的指标打爆。 而在各厂商要求对手机CPU ARM架构进行分包适配的情况下,你更需要知道哪些依赖是没有适配v7a/v8a的,这将影响你的APP在应用市场…

基于SSM的智能物业管理网站的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

Scrum Master 如何更好的支持PO?

在过去几年中,和许多Scrum Master交流时,我遇到一个令人担忧的模式。虽然我们有Scrum指南和其他补充资源,许多Scrum Master,特别是刚起步的Scrum Master们,还在日复一日的为如何帮助Product Owner而挣扎着。 以下是我…

C语言--有3个候选人,每个选民只能投票选一人,要求编一个统计选票的程序,先后输入被选人的名字,最后输出各人得票结果。

一.解体思路 设一个结构体数组,数组中包含3个元素; 每个元素中的信息应包括候选人的姓名和得票数;输入被选人的姓名,然后与数组元素中的“姓名”成员比较,如果相同,就给这个元素中的“得票数”成 员的值加1;输出所有元素的信息。 …

C++ RBTree 理论

目录 这个性质可以总结为 红黑树的最短最长路径 红黑树的路径范围 code 结构 搞颜色 类 插入 插入逻辑 新插入节点 思考:2. 检测新节点插入后,红黑树的性质是否造到破坏? 解决方法 变色 旋转变色 第三种情况,如果根…

聊天机器人框架Rasa资源整理

Rasa是一个主流的构建对话机器人的开源框架,它的优点是几乎覆盖了对话系统的所有功能,并且每个模块都有很好的可扩展性。参考文献收集了一些Rasa相关的开源项目和优质文章。 一.Rasa介绍 1.Rasa本地安装 直接Rasa本地安装一个不好的地方就是容易把本地…

使用电脑时提示msvcp140.dll丢失的5个解决方法

“计算机中msvcp140.dll丢失的5个解决方法”。在我们日常使用电脑的过程中,有时会遇到一些错误提示,其中之一就是“msvcp140.dll丢失”。那么,什么是msvcp140.dll呢?它的作用是什么?丢失它会对电脑产生什么影响呢&…

Docker快速入门

Docker是一个用来快速构建、运行和管理应用的工具。 Docker技术能够避免对服务器环境的依赖,减少复杂的部署流程,有了Docker以后,可以实现一键部署,项目的部署如丝般顺滑,大大减少了运维工作量。 即使你对Linux不熟…

36 Gateway网关 快速入门

3.Gateway服务网关 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等响应式编程和事件流技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式…

C++初阶--类与对象(3)(图解)

文章目录 再谈构造函数初始化列表隐式类型转换explicit关键字 static成员友元类内部类匿名对象拷贝函数时的一些优化 再谈构造函数 在我们之前的构造函数中,编译器会通过构造函数,对对象中各个成员给出一个适合的初始值,但这并不能称之为初始…

链表经典面试题之二

今天我们做一道环形链表的题目力扣141题https://leetcode.cn/problems/linked-list-cycle/ 这道题让我们分析链表中是否存环,存在的话返回true,不存在返回false。首先看到这道题我们要捋顺思路,怎么才能达到它要的效果?要找出是否…

Leetcode刷题详解—— 组合总和

1. 题目链接:39. 组合总和 2. 题目描述: 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些…

【网络开发必看】聊聊 Tomcat

文章目录 1. 什么是 Tomcat2. 怎么安装 Tomcat3. Tomcat 的目录结构3.1 bin 目录3.2 conf 目录3.3 lib 目录3.4 log 目录3.5 webapps 目录 4. 启动 Tomcat总结 1. 什么是 Tomcat Tomcat 是一个 HTTP 服务器. 前面学习了 HTTP 协议, 知道了 HTTP 协议就是规定 HTTP 客户端和 HT…

论文笔记:AttnMove: History Enhanced Trajectory Recovery via AttentionalNetwork

AAAI 2021 1 intro 1.1 背景 将用户稀疏的轨迹数据恢复至细粒度的轨迹数据是十分重要的恢复稀疏轨迹数据至细粒度轨迹数据是非常困难的 已观察到的用户位置数据十分稀疏,使得未观察到的用户位置存在较多的不确定性真实数据中存在大量噪声,如何有效的挖…

ffmpeg安装教程(windows、Linux下python环境)

本文旨在向大家介绍ffmpeg在Windows和Linux系统中的安装方法。 目录 一、Windows 安装 ffmpeg1.1 官网下载 ffmpeg 运行程序1.2 环境配置1.3 测试 二、Linux 安装ffmpeg2.1 Linux中安装ffmpeg2.2 python环境安装 ffmpeg2.1.1 为什么要介绍这个2.1.1 成功安装示例 一、Windows …

OpenCV-Python小应用(九):通过灰度直方图检测图像异常点

OpenCV-Python小应用(九):通过灰度直方图检测图像异常点 前言前提条件相关介绍实验环境通过灰度直方图检测图像异常点代码实现输出结果 参考 前言 由于本人水平有限,难免出现错漏,敬请批评改正。更多精彩内容&#xff…

笔记:AI量化策略开发流程-基于BigQuant平台(一)

从本文开始,按照AI策略开发的完整流程(共七步),上手在BigQuant平台上快速构建AI策略。本文首先介绍如何使用证券代码模块指定股票范围和数据起止日期。重要的事情说三遍:模块的输入端口有提示需要连线的上游数据类型&a…

Activiti6工作流引擎:Form表单

表单约等于流程变量。StartEvent 有一个Form属性,用于关联流程中涉及到的业务数据。 一:内置表单 每个节点都可以有不同的表单属性。 1.1 获取开始节点对应的表单 Autowired private FormService formService;Test void delopyProcess() {ProcessEngi…

十八数藏的新时代探索:数字创新助推文化保护

在这个数字化的新时代,传统文化和数字创新的结合呈现出令人振奋的新面貌。十八数藏,作为文化数字创新的佼佼者,正以数字化的手段助推文化的保护与传承。 十八数藏通过数字技术,将传统非物质文化遗产以数字形式呈现,使其…

红黑树-RBTree

目录 1. 红黑树的概念2. 红黑树的性质3. 结点的定义4. 结点的插入5. 整体代码 1. 红黑树的概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式…