Swin变压器
为了解决以上两点,我们提出了一种分层变换器,通过滑动窗口提取特征,将自我关注度的计算减少到与图像大小线性相关。
我们观察到,将语言领域迁移到视觉领域的主要问题可以归纳为两种类型:
在源代码实现中,两个模块合二为一,称为PatchEmbedding。输入图片大小为RGB的图片,把4x4x3看成一个面片,用线性嵌入层把面片变换成任意维度的特征。在源代码中,使用了4x4跨距=4的conv实现。-& gt;
这是本文的核心模块。
窗口划分分为常规窗口划分和移位窗口划分,分别对应W-MSA和SW-MSA。通过窗口划分将输入特征映射转换为num _ windows * b,window _ size,window _ size,c,其中num _ windows = h * w/window _ size/window _ size。然后调整大小为num _ windows * b,window _ size * window _ size,c .源代码如下:
它由规则窗口划分模块和多头自关注模块组成。
与直接使用MSA相比,W-MSA主要是减少计算量。传统的变压器基于全局计算关注度,计算复杂度很高。但是swin transformer通过关注每个窗口来减少计算量。主要计算过程注意如下:
假设每个窗口的块大小为,输入大小为,则原始和的计算复杂度如下:
虽然减少了计算量,但是由于注意力局限在窗口上,不重叠的窗口缺乏联系,限制了模型的性能。因此,提出了一个模块。在MSA之前添加一个循环移位窗口分区。
在swin transformer中,池不用于缩减像素采样,但在yolov5中,焦点图层用于缩减像素采样要素地图。-& gt;,使用全连接层->;在一个阶段中,特征图的高度和宽度减半,通道数加倍。
基准模型的结构命名为Swin-B,模型规模和计算复杂度与VIT-B/DEIT-B相似,同时我们还提出了Swin-T、Swin-S和Swin-L,分别对应0.25×、0.5×和2×的模型规模和计算复杂度。Swin-T和Swin-S的计算复杂度分别与ResNet-50和ResNet-101相似。默认设置是7。表示第一层中隐藏的层数。