当前位置: 首页 > news >正文

《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 核。为此又设计了诸多繁琐的细节。这样在图像领域效果更好了,但是在不同模态的通用性降低了,应用在多模态领域可能需要一些额外的设计。

相关文章:

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

论文标题 《Swin Transformer: Hierarchical Vision Transformer using Shifted Windows》 Swin 这个词貌似来自后面的 Shifted WindowsShifted Windows:移动窗口Hierarchical:分层 作者 微软亚洲研究院出品 初读 摘要 提出 Swin Transformer 可以…...

Flink 基础 -- 应用开发(Table API SQL) 概念和通用API

1、概述 Apache Flink提供了两个关系API——Table API和SQL——用于统一的流和批处理。Table API是一个用于Java、Scala和Python的语言集成查询API,它允许以非常直观的方式组合来自关系操作符(如选择、过滤和连接)的查询。Flink的SQL支持基于Apache Calcite&#x…...

Flink之Java Table API的使用

Java Table API的使用 使用Java Table API开发添加依赖创建表环境创建表查询表输出表使用示例 表和流的转换流DataStream转换成表Table表Table转换成流DataStream示例数据类型 自定义函数UDF标量函数表函数聚合函数表聚合函数 API方法汇总基本方法列操作聚合操作Joins合并操作排…...

【Unity细节】Unity中如何让组件失活而不是物体失活

👨‍💻个人主页:元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 😶‍🌫️收录于专栏:unity细节和bug 😶‍🌫️优质专栏 ⭐【…...

[设计模式] 建造者模式

一、引言 起因是学习okhttp过程中遇到的这段代码 Request request original.newBuilder().url(original.url()).header("Authorization", "Bearer " BearerTokenUtils.getToken(configuration.getApiKey(), configuration.getApiSecret())).header(&quo…...

在DDD领域驱动下的微服务数据库的MVC设计思路(高度可行性)

在DDD领域驱动下的微服务架构中使用MVC设计思路来设计数据库是可行的,因为MVC是一种经典的软件架构模式,可以将应用程序分为三个主要部分:模型、视图和控制器。在微服务架构中,每个微服务可以看作是一个模块,可以使用M…...

Leetcode2834. 找出美丽数组的最小和

Every day a Leetcode 题目来源:2834. 找出美丽数组的最小和 解法1:贪心 从最小正整数 1 开始枚举,设当前数为 num,如果 nums 里没有 target - num,就说明可以添加 num,依次填满直到有 n 个数即可。 用…...

acwing算法基础之搜索与图论--kruskal算法

目录 1 基础知识2 模板3 工程化 1 基础知识 kruskal算法的关键步骤为: 将所有边按照权重从小到大排序。定义集合S,表示生成树。枚举每条边(a,b,c),起点a,终点b,边长c。如果结点a和结点b不连通(用并查集来…...

微信H5跳转微信小程序

官方文档&#xff1a;目录 | 微信开放文档 方法一&#xff1a;微信浏览器打开的h5跳转方式 HTML代码 <wx-open-launch-weapp id"launch-btn" username"所需跳转的小程序原始id" path"pages/pay/pay"><script type"text/wxtag…...

Yii2 引入 外部无命名空间的类,Class not found

记一次问题解决 问题描述 支付宝开放平台SDK v2 无命名空间。需 require 引入。 require Yii::$app->vendorPath."/alipay-sdk-php/v2/aop/AopClient.php"; var_dump(new AopClient([]));exit();上述写法会直接报错。 Class temporary\controllers\AopClient …...

设计模式是测试模式咩?

设计模式和测试模式概述 软件的生命周期为什么要进行测试&#xff08;测试的目的&#xff09;&#xff1f;软件的设计模式1. **瀑布模型**3. 增量和迭代模型4. 敏捷模型5. 喷泉模型 测试模型V模型W模型 一个应用程序从出生到“死亡”会经过非常漫长的流程…… 软件的生命周期 …...

Aspose.OCR for .NET 2023Crack

Aspose.OCR for .NET 2023Crack 为.NET在图片上播放OCR使所有用户和程序员都可以从特定的图像片段中提取文本和相关的细节&#xff0c;如字体、设计以及书写位置。这一特定属性为OCR的性能及其在扫描遵循排列的记录时的功能提供了动力。OCR的库使用一条线甚至几条线来处理这些特…...

conda环境中pytorch1.2.0版本安装包安装一直失败解决办法!!!

conda环境中pytorch1.2.0版本安装包安装一直失败解决办法 cuda10.0以及cudnn7.4现在以及安装完成&#xff0c;就差torch的安装了&#xff0c;现在torch我要装的是1.2.0版本的&#xff0c;安装包以及下载好了&#xff0c;安装包都是在这个网站里下载的&#xff08;点此进入&…...

后端面试问题(学习版)

JAVA相关 JAVA语言概述 1. 一个".java"源文件中是否可以包含多个类&#xff1f;有什么限制&#xff1f; 可以。 一个源文件可以声明多个类&#xff0c;但是最多只能有一个类使用public进行声明 且要求声明public的类的类名与源文件相同。 2. Java的优势&#xff…...

数据管理系统-week1-介绍

文章目录 一、数据它是什么&#xff1f;二、电子存储设备三、持久存储设备1、硬盘驱动器&#xff08;HDD&#xff09;、硬盘、硬盘驱动器是一种用于存储和检索数字信息的机电持久存储设备。2、固态硬盘&#xff08;SSD&#xff09;使用非易失性存储器&#xff0c;即使用NAND闪存…...

【SpringBoot】手写模拟SpringBoot核心流程

依赖包 新建一个工程&#xff0c;包含两个 module&#xff1a; springboot 模块&#xff0c;表示 springboot 源码实现&#xff1b;user 模块&#xff0c;表示业务系统&#xff0c;使用 springboot 模块&#xff1b; 依赖包&#xff1a;Spring、SpringMVC、Tomcat 等&#xff…...

应对.locked勒索病毒:恢复、预防全方位攻略

导言&#xff1a; .locked勒索病毒并非简单的数字威胁&#xff0c;它是一场对个人和企业数字资产的精密审判。这种病毒通过各种方式感染系统&#xff0c;从而以瞬间之间将用户的关键文件变成数字拼图&#xff0c;无情地要求赎金以换取解锁的密钥。如果您正在经历勒索病毒数据恢…...

基于DS1302时钟液晶12864显示2路闹钟仿真及源程序

一、系统方案 1、本设计采用51单片机作为主控器。 2、DS1302采集年月日时分秒送到液晶12864显示。 3、按键年月日时分秒&#xff0c;两路闹钟。 二、硬件设计 原理图如下&#xff1a; 三、单片机软件设计 1、首先是系统初始化 uchar clock_time[6] {0X00,0X59,0X23,0X09,0X…...

AGC034E Complete Compress

AGC034E Complete Compress 洛谷[AGC034E] Complete Compress 题目大意 给你一棵有 n n n个节点的树&#xff0c;并用 01 01 01串告诉你哪些节点上有棋子&#xff08;恰好一棵&#xff09;。 你可以进行若干次操作&#xff0c;每次操作可以将两颗距离至少为 2 2 2的棋子向彼…...

python设计模式12:状态模式

什么是状态机&#xff1f; 关键属性&#xff1a; 状态和转换 状态&#xff1a; 系统当前状态 转换&#xff1a;一种状态到另外一种状态的变化。 转换由触发事件或是条件启动。 状态机-状态图 状态机使用场景&#xff1a; 自动售货机 电梯 交通灯 组合锁 停车计时…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发&#xff0c;后来由Pivotal Software Inc.&#xff08;现为VMware子公司&#xff09;接管。RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用 Erlang 语言编写。广泛应用于各种分布…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库&#xff08;uthash库&#xff09;提供对哈希表的操作&#xff0c;文章如下&#xff1a; C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...

高分辨率图像合成归一化流扩展

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 1 摘要 我们提出了STARFlow&#xff0c;一种基于归一化流的可扩展生成模型&#xff0c;它在高分辨率图像合成方面取得了强大的性能。STARFlow的主要构建块是Transformer自回归流&#xff08;TARFlow&am…...

软件工程教学评价

王海林老师您好。 您的《软件工程》课程成功地将宏观的理论与具体的实践相结合。上半学期的理论教学中&#xff0c;您通过丰富的实例&#xff0c;将“高内聚低耦合”、SOLID原则等抽象概念解释得十分透彻&#xff0c;让这些理论不再是停留在纸面的名词&#xff0c;而是可以指导…...

Python网页自动化测试,DrissonPage库入门说明文档

&#x1f6f0;️ 基本逻辑​ 操作浏览器的基本逻辑如下&#xff1a; 创建浏览器对象&#xff0c;用于启动或接管浏览器获取一个 Tab 对象使用 Tab 对象访问网址使用 Tab 对象获取标签页内需要的元素对象使用元素对象进行交互 除此以外&#xff0c;还能执行更为复杂的操作&am…...

【学习记录】Office 和 WPS 文档密码破解实战

文章目录 &#x1f4cc; 引言&#x1f4c1; Office 与 WPS 支持的常见文件格式Microsoft Office 格式WPS Office 格式 &#x1f6e0; 所需工具下载地址&#xff08;Windows 官方编译版&#xff09;&#x1f510; 破解流程详解步骤 1&#xff1a;提取文档的加密哈希值步骤 2&…...