这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战
深度学习小白第一次写论文阅读笔记,可能会有比较多的错误和疏漏,请见谅。
期待自己在不断输出的过程中有所长进,能与大家分享更有价值的内容。
原文链接:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows
Motivation
- 过去的视觉transformer如
ViT
只做了分类任务,没有检测和分割等。Swin Transformer
证明了Transformer可以作为普适的计算机视觉骨干网络。 - Transformer用在CV中有两个方面:
- 尺度问题:不同图片中的同一个视觉对象的尺寸差距可能会很大,NLP中不存在此问题;
- 图像resolution太大:如果直接用像素作为输入序列,长度太大。
Related Works
ViT
每一层token的尺寸都是16x下采样率,可以通过全局SA达到全局建模能力,但是对多尺度特征的把握较弱,不适合处理dense recognition tasks;ViT
的自注意力始终在整图上进行(全局建模),复杂度随图像尺寸平方增长。
Ideas
移动窗口
- 层级式结构可以提供各个尺度的特征信息,更好地应用到下游任务中;
- SA在小窗口内算,计算复杂度随图片尺寸线性增长,而不是平方级增长;
- 通过窗口的移动让相邻两个窗口之间有交互,上下层之间可以有cross-window connection,变相达到全局建模能力。
Model
模型结构
- Patch Partition:先把输入打成 的patch,比如一个 的图像,经过第一层后,维度变成 。
- Stage1:
- 先经过一个Linear Embedding层,将图片patchs转换transformer的输入, 会被拉成长度为 的线性序列,至于通道数,如图所示,常数 依赖于transformer对输入的限制,这里为 ,因此经过Linear Embedding后,输入的维度变为 ;
- 需要注意的是,这个 的矩阵并不直接作为Swin Transformer Block的输入,而是基于本文移动窗口的思想,拆分成 大小的窗口,每个patch长度只有 ;
- transformer本身不改变输入的维度。
- Stage2:Patch Merging就是对stage1中transformer的输出进行进一步的变形,后面的操作有点类似于CNN。Patch Merging就是对前面的输出做一个上采样,把 拆分成四个 ,并组合成 , 再经过一个 的滤波器(卷积),得到 。
- stage3和stage4与stage2同理,都是缩小张量大小(每次缩小为1/4),得到更多的通道数(增大为4倍)。为了跟CNN保持一致,即池化操作后通道数翻倍,而不是变成原来的4倍,故采用 的卷积核将通道数从4倍变为2倍。stage4结束后,输出维度为 。
窗口
关于计算复杂度,作者估算了全局自注意力和基于窗口的自注意力的计算复杂度,如图,后者往往比前者低很多。
然而,如果仅仅有窗口机制,窗口之间无法进行自注意力,无法进行全局建模。因此引入移动窗口,在上下两层中引入shifted windows机制,可以实现窗口之间的通信。
在本文的Swin Transformer Block中,先做一次基于窗口的多头自注意力(W-MSA),再做一次基于移动窗口的多头自注意力(SW-MSA),如图。
Experiments
- ImageNet上的图片分类任务
- COCO上的目标检测
- ADE20K上的语义分割
- 消融实验(探究了移动窗口和绝/相对位置编码对模型效果的影响)
Limitations
论文的结论中提到,基于shifted windows 的自注意力作为本文的一个关键思路,目前只能用于图像领域而不能用于NLP领域。其实,相比于ViT
,Swin Transformer
虽然达到了更好的效果,但是后者更偏向于为图像专门设计的工作,用了一些视觉里的先验知识,所以效果有所提升是理所应当的。而ViT
才是把最原始的Transformer直接拿过来用,在CV和NLP两个领域都工作地很好。大一统的模型有利于两个领域的共同发展,这是Swin Transformer
目前的局限之处,而让Swin Transformer
同样能用在NLP领域,也是作者希望进一步努力的方向之一。