• 可作为CV backbone的Transformer:Swin Transformer_Hierarchical Vision Transformer using Shifted Windows


    摘要

      提出新的视觉transformer,称之为Swin transformer,能作为视觉任务的通用backbone。 tranformer从语言到视觉的挑战源于这两个域的不同,如与文本中的字相比,视觉实体的变化范围很大,有高分辨率的像素。为处理这些不同,提出了一个层级的transformer,采用移动的窗口计算表征。移动窗口方案可以带来更高的效率,通过限制非重叠局部窗口的自注意力计算,同时允许跨窗口连接实现。 这种层次结构具有在不同尺度上建模的灵活性,并具有与图像大小相关的线性计算复杂度。

      Swin Transformer能够兼容广泛的视觉任务,包括图像分类(在ImageNet-1K的最高准确率86.4)和高密度预测任务,如目标检测(在COCO test-dev数据上58.7 box AP和51.1 mask AP)和语义分割(在ADE20K val上53.5 mIoU)。它在coco数据上,比之前的sota模型多2.7个box ap,2.6个mask ap,在ADE20K上,比之前sota多3.2个mIoU。 代码:https://github.com/microsoft/Swin-Transformer


    方法

    整体结构

    • 图3为小版本(Swin - T)
    • 先将输入的RGB图像切分成不重叠的patch,每个patch当作token,其特征设置为原始rgb像素值的concate。实验中,使用大小为4x4的patch,因此每个patch的特征维度是4x4x3=48,应用线性嵌入层投影至任意维度(表示为C)。
    • swin transformer 块应用到patch的token上,保持tokens的数量(H/4xW/4),与线性嵌入一起称之为stage 1.
    • 为产生具有层次的表征,随着网络加深,token的数量通过patch合并层 缩减,第一个patch合并层将相邻2 × 2的每一组patch的特征拼接起来,并在4c维的拼接特征上应用一个线性层
    • 这将token的数量缩减了4倍(分辨率2倍下采样),输出维度设为2C,随后应用Swin transformer块进行特征变换,分辨率保持在H/8xH/8。第一个块的patch合并和特征转换表示为stage 2,这个步骤重复两次,分别为stage 3和stage 4,输出分辨率分别为H/16xH/16和H/32xH/32,与经典CNN网络有相同的分辨率(如 vgg和ResNet),因此,提出的结构能方便的替换现有方法在各任务上的backbone。
    • swin transformer 块

        基于移动窗口,通过替换transformer中标准的多头自注意力模块构建,其它层相同。 如图3(b),swin transformer由基于MSA的移动窗口,后跟一个2层的MLP(之间采用GELU非线性)组成。每个MSA模块和MLP之前采用层归一化,每个模块后采用残差连接。

    • 基于自注意力的移动窗口

       全局计算的复杂度是关于token数量的二次方,当需要大量的token集合用于稠密预测或者表示一个高分辨率图片时,这并不适合。 非重叠窗口的自注意力机制 为了高效建模,我们提出在局部窗口内计算自注意。窗口被安排以不重叠的方式均匀地分割图像。假设每个窗口包含MxM个patch,全局MSA和基于窗口的MSA的计算复杂度为(M默认为7):

        对于大的hw,全局注意力计算通常负担不起,而窗口的自注意力是可缩放的

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

      各基于窗口的自注意力模块机制缺乏窗口间连接,限制了模型能力。为引入跨窗口连接,同时保持不重叠窗口的有效计算,提出了一个移动的窗口分割方法,如图2.

      

         第一个模块采用常规窗口分割策略,从左上像素开始,8X8的特征图平均分割到4个窗口,大小为4x4(M=4),然后,下一个模块采用一个窗口配置,即从上一层的窗口配置移动,即从常规窗口中,替换的像素。 通过偏移的窗口分割方法,连续的Swin Transformer块采用以下方式计算:

     

        引入了前一层相邻非重叠窗口之间的连接,被发现是有效的,如表4.

     

    •  用于偏移配置的有效batch计算

      采用偏移的窗口分割的问题是,会导致更多窗口,一些窗口可能比MxM小,一个解决办法是将小于MxM的小窗口填充,计算注意力时,将pad的值遮盖掉。

      当常规分割的窗口数量小时,如2x2,采用这个方法增加的计算量是相当大的(2x2->3x3,变大2.25倍)

      我们提出一个更有效的批量计算的方法,即向着左上角方向循环移动,如图4所示。在此次移动之后,一个批处理窗口可能由几个(在特征图上不相邻的)子窗口组成,因此采用掩蔽机制将自注意计算限制在每个子窗口内。

      使用循环移位,批处理窗口的数量与常规窗口分区的数量相同,因此也是高效的。这种方法的低延迟如表5所示

    • 相对位置偏差

      计算自注意力过程中,在计算相似度时,我们包含一个相对的位置偏差到每个头上

            

       由于沿着每个轴的相对位置在范围[-M+1,M-1],我们参数化一个小的偏差矩阵,B的值来自该矩阵

          进一步增加绝对位置嵌入到输入,性能轻微降低。

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

    结构变量

      构建我们的基础模型,称之为Swin-B,与ViT-B/DeiT-B有相似的模型大小和计算复杂度,同时介绍Swin-T,Swin-S和Swin-L,对应0.25,0.5和2倍的模型大小和计算复杂度

      Swin-T和Swin-S分别与ResNet-50(DeiT-S)和ResNet-101有相似的复杂度。窗口大小设置为M=7,每个头的查询维度为d=32,每个MLP扩展层的α=4,这些模型变种的超参数为:

     


     实验

     

      

      

      

    过去已逝,未来太远,只争今朝
  • 相关阅读:
    Django Rest Framework 教程及API向导
    zabbix2.4升级到2.5 --考虑升级到zabbix3.0
    followme_laser包解读
    ROS多个工作空间存在同名包的BUG
    fatal err Eigen/Dense No such file or directory(unsupported/Eigen/FFT、Eigen/Core也是一样的道理)
    ROS向节点传递参数的方法总结(rosrun,launch) + (参数服务器,main函数参数)
    同步Sublime Text配置
    W: Failed to fetch http://packages.microsoft.com/repos/vscode/dists/stable/main/binary-amd64/Package
    Ubuntu(Linux)下更新CMake,最安全的更新
    Ignoring Provides line with DepCompareOp for package gdb-minimal
  • 原文地址:https://www.cnblogs.com/BlogLwc/p/14793741.html
Copyright © 2020-2023  润新知