摘要

transformer应用到CV领域的挑战:

1、相对于文本,视觉实体的尺度区别很大,例如车辆和人
2、相对于文本,图像像素的分辨率太大

解决方法:使用层级式的transformer,使用移动窗口
好处:

1、通过限制在窗口内使用自注意力,带来了更高的效率
2、通过移动,使得相邻两个窗口之间有了交互,上下层之间也就有了跨窗口连接,从而变相达到了一种全局建模的效果
3、层级式的结构不仅非常灵活的去建模各个尺度的信息并且计算复杂度随着图像大小线性增长

结论:

因为有了像卷积神经网络一样的分层结构,有了多尺度的特征,所以很容易的应用到下游任务里,例如图像分类、物体检测、物体分割等

一、引言

在这里插入图片描述

视觉任务

多尺寸特征十分重要,例如目标检测,运用最广的方法FPN(a feature pyramid network),当拥有一个分层式的卷积网络时,每一个卷积层得到的特征的感受野是不一样的,也就能抓住物体不同尺寸的特征;物体分割,运用最广的方法UNet,为了处理不同尺寸的问题,使用了skip connection方法。(PspNet,DeepLab)

VIT

每一层的transformer block看到的token大小都是十六倍下采样率,虽然通过全局的自注意力得到全局的建模能力,但是处理的特征都是单一尺寸而且分辨率低,对于多尺寸特征的获得会弱一些。并且因为全局的自注意力导致计算复杂度是图像的尺寸的平方倍

Swin Transformer

借鉴了许多卷积神经网络的设计理念以及先验知识。
例如
为了减少序列长度和降低计算复杂度,在小窗口之内计算自注意力,所以只要窗口大小固定,自注意力的计算复杂度也是固定的,那么总的计算复杂度就是图像尺寸的线性倍。也就是使用了局部性的先验知识,在小窗口使用自注意力就可以了,并不需要去做全局的自注意力。
为了生成多尺寸的特征,回想卷积神经网络为什么会有多尺寸的特征,主要是Pooling操作。Pooling可以增大每一个卷积核的感受野,所以可以获得不同尺寸的特征。于是提出了一个类似池化的操作patch merging,也就是将相邻的四个小patch合成一个大patch,从而获得不同尺寸的特征。所以swin transformer可以作为一个通用的骨干网络,不仅可以用于图像分类,还能做密集预测型的任务

移动窗口

在这里插入图片描述
结合patch merging,保证了全局自注意力

二、相关工作

参考VIT

1、卷积神经网络
2、自注意力/transformer如何帮助CNN
3、Transformer作为视觉里的骨干网络

三、方法

3.1整体架构

在这里插入图片描述

假设输入图片是2242243,
经过patch partition,每四个p像素为一个patch,变成565648(48=443);
接下来经过linear embedding使向量维度变成transformer能够接受的值,变成5656C,再经过拉直变成序列长度3136,向量维度C;
因为3136太长了,transformer接受不了(咱不歪),所以提出了窗口,也就是swin transformer block是基于窗口去计算自注意力的,还是5656C;
patch merging分为两步,第一步将相邻的四个patch合成一个patch,变成28284C,但为了和卷积神经网络保持一致只让通道数翻倍,第二步在C这个维度上用一个11的卷积将通道数降下来,也就变成了28282C;后面同理
stage3变成14
144C
stage4变成7
7*8C

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

动机:全局自注意力计算复杂度高
计算复杂度
每个窗口默认有7*7个patch,自注意力的计算都是在这些小窗口里完成
在这里插入图片描述
(1)标准多头自注意力计算复杂度

(2)窗口多头自注意力计算复杂度
移动窗口
在这里插入图片描述
希望不只在一个窗口内做自注意力,而是全局的,所以需要移动窗口。
第一次是正常的窗口自注意力,第二次是移动窗口自注意力,两次是绑定的,这也是在四个阶段swin transformer都为偶数的原因
问题
在这里插入图片描述
经过移动之后,窗口大小不一致了
1、在小窗口外围pad上零,但变成了九个窗口,计算复杂度提升
2、循环移位,还是四个窗口,但是进行移位之后相邻的两个元素也不一定可以用自注意力了。所以使用mask的操作,这样一个窗口不同区域使用一次前向就能把自注意力算出来 ,算完注意力之后,需要将循环位移还原
在这里插入图片描述

五、结论

为了实现NLP和CV的大一统,希望将移动窗口运用到NLP

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐