赞
踩
Swin Transformer论文pdf版
Swin Transformer论文网址
Swin Transformer代码
文章标题:Swin Transformer:Hierarchiacl Vision Transformer using Shifted Windows
作者来自Microsoft Research Asia
这篇论文提出了一个新的Vision Transformer,叫做Swin Transformer。它可以被用来作为一个计算机视觉领域,一个通用的骨干网络。
但是直接把Transformer从NLP用到Vision是有一些挑战的,这个挑战主要来自两个方面,一个是尺度上的问题
另外一个挑战是图像的分辨率太大了
hierarchical Transformer的特征是通过一种移动窗口的方式学来的,移动窗口的好处,不仅带来了更大的效率
同时通过shifting移动的这个操作,能够让相邻的两个窗口之间有了交互,所以上下层之间就可以有cross-window connection,
这种层级式结构的好处不仅非常灵活,可以提供各个尺度的特征信息,同时,因为这个自注意力是在小窗口之内计算的,所以计算复杂度是随着图像大小而线性增长的
作者不光是在ImageNet-1K上做了实验,而且达到了非常好的准确度87.3
而且还在密集预测型任务上,比如物体检测,还有物体分割上取得了很好的成绩,比如在COCO上,AP达到了58.7,比之前最好的方法高了2.7个点,在语义分割ADE上,也达到了53.5的效果,比之前最好的方法高了3.2个点
这种基于Transformer的模型,在视觉领域是非常有潜力的
对于这种MLP架构,用shift window的方法也能提升
在视觉领域,卷积神经网络之前是主导地位,但是Transformer在NLP领域使用效果非常好,所以我们将Transformer用到视觉领域来
作者先说了ViT,进行对比,Vision Transformer把图片打成patch
但是在ViT里,它处理的特征都是单一尺寸的,而且是low resolution
同时对于ViT而言,它的自注意力始终是在最大的窗口上进行了,就是始终是在整图上进行的,所以它是一个全局建模,复杂度也是跟图像的尺寸进行平方倍的增长
Swin Transformer刚开始的下采样率是4倍,然后变成了8倍、16倍
所以这就是作者反复在论文里强调的,Swin Transformer是能够当做一个通用的骨干网络的,不光是能做这个图像的分类,还能做密集预测性的任务
作者在引言的第四段就开始讲Swin Transformer一个关键的设计,移动窗口的操作
如果在Transformer第L层,把这个输入或者说这个特征图分成这种小窗口的话,那就会有效的降低序列程度,从而减少计算复杂度
每一个灰色小patch就是最基本的元素单元
每一个红色的框是一个中型的计算单元,也就是一个窗口
在Swin Transformer里面每一个小窗口里面默认是有7×7=49个小patch,在这里只是画个示意图,主要来讲解shift操作时怎么完成的
引言第五段,作者展示了一下实验结果
引言最后一段,作者坚信一个CV和NLP之间大一统的框架是能够促进两个领域共同发展的
作者强调了一下Swin Transformer在COCO和ADE20K上的效果非常好,远远超越了之前最好的方法,基于此,希望Swin Transformer能激发出更多更好的工作,尤其是在多模态方面
最关键的贡献是基于Shifted Window的自注意力,这个对很多视觉任务是非常有帮助的
所以作者说接下来他们的任务就是要将Shifted Windows用到NLP领域里
第三和第四阶段都是同理
先做一个Patch Merging,再通过Swin Transformer Block
进一步降成了14×14×384,再进一步降成了7×7×768
全局自注意力的计算会导致平方倍的复杂度
作者在论文中提到,去做窗口的自注意力机制,原来的图片会被平均分为一些没有重叠的窗口
多头自注意力:
Ω ( M S A ) = 4 h w C 2 + 2 ( h w ) 2 C \Omega(MSA)=4hwC^2+2(hw)^2C Ω(MSA)=4hwC2+2(hw)2C
基于窗口自注意力:
Ω ( W − M S A ) = 4 h w C 2 + 2 M 2 h w C \Omega(W-MSA)=4hwC^2+2M^2hwC Ω(W−MSA)=4hwC2+2M2hwC
其中, M M M就是窗口的长度,也就是上述的7
虽然解决了计算复杂度的问题,但是窗口和窗口之间没有了通信,这样就达不到全局建模了,于是就提出了移动窗口的方式
每次都要先做基于窗口的多头自注意力(W-MSA),再做一次基于移动窗口的多头自注意力(SW-MSA),这样就达到了窗口和窗口之间的互相通信
原来特征图上只有四个窗口,现在移动之后,变成了9个窗口
窗口数量增加了,窗口里每个元素大小也不一样
作者先引入cyclic shift(循环位移)操作
但是新得到的四宫格里面的A、B、C是不一样跟灰色的做自注意力计算的,因为他们是从很远的地方人为移动过来的,所以并没有什么联系,
于是作者采用了掩码的方式
掩码操作之后,再采用一次循环位移,将A、B、C再还原回去,保持原来图片的相对位置是不变的,整体图片的语义信息也是不变的
如上图,每个窗口是7×7=49个patch,每个patch就是一个向量,再将窗口拉直
因为每次移位是窗口的一半,这里的窗口是7,也就是移动3
所以就有7×4=28个3号位元素,7×3=21个6号位元素
行就是向量的维度 C C C
将左边矩阵转置,相乘,左边矩阵第一行与右边矩阵第一列相乘,以此类推
作者设置了掩码的模板矩阵,将需要计算的矩阵设置为0,不需要的设置为负很大的数
将模板矩阵与相乘得到的矩阵进行相加,不需要的模块就会变成非常小的数,再经过
s
o
f
t
m
a
x
softmax
softmax操作之后就变成0了
同理,其他模块也是一样的操作,进行矩阵相乘,结果如上图
做了两个预训练
一个是在ImageNet-1K上做预训练
一个是在ImageNet-22K上做预训练
测试都是在ImageNet-1K的测试集上去做的
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。