ICCV2021 Best paper:Swin Transformer !!!
共 6599字,需浏览 14分钟
· 2021-10-15
↑↑↑关注后"星标"炼丹笔记
炼丹笔记干货
Swin Transformer: Hierarchical Vision Transformer using Shifted Windows(ArXiv21)
最近朋友和我聊Swin Transformer,说霸榜了各大CV任务的榜单,一搜,发现该文章才出来不到两周,赶紧趁热赶学习一波!如需获取本文代码,后台回复“SwinT”即可。
![](https://filescdn.proginn.com/4de220947e0e8cc7688e831a21b39f2d/de5b09a1dde472fed238b9445292633e.webp)
之前计算机视觉相关的任务主要被CNN所统治。
从AlexNet及其在ImageNet图像分类挑战方面的革命性表现,CNN架构已经通过更大的规模,更广泛的连接,以及更复杂的卷积形式而逐渐壮大。
自然语言处理(NLP)中网络体系结构的演变走了一条不同的道路,今天流行的体系结构取而代之的是Transformer。
Transformer是为序列建模和转换任务而设计的,因为它关注数据中的长期依赖性建模。它在语言领域的巨大成功促使研究人员研究它对计算机视觉的适应性,最近它在某些任务上显示了不错的结果,特别是图像分类和联合视觉语言建模。
本文重点探讨将Transformer从NLP转移到CV的策略。我们先看二者的不同:
scale。与作为语言Transformer中处理的基本元素的单词标记不同,视觉元素在scale上可能有很大的差异,这是一个在目标检测等任务中受到关注的问题。在现有基于Transformer的模型中,tokens都是固定比例的,这种属性不适合这些应用。 图像中像素的分辨率比文本段落中的单词高得多。
在本篇文章中,作者提出了一种新的视觉Transformer,称为Swin Transformer,它可以作为计算机视觉的通用backbone。将Transformer从语言转到视觉的过程中所面临的挑战来自于两个领域之间的差异,例如视觉实体的规模变化很大,图像中的像素与文本中的单词相比分辨率很高。为了解决这些差异,本文提出了一个层次化的Transformer,其表示是用移位窗口计算的。
移位窗口方案通过将self-attention计算限制在非重叠的局部窗口上,同时允许跨窗口连接,从而提高了效率。这种分层结构具有在不同尺度下建模的灵活性,并且相对于图像大小具有线性计算复杂性。Swin-Transformer的这些特性使其能够兼容广泛的视觉任务,包括:
图像分类ImageNet-1K上的准确率为86.4 top-1; 密集预测任务,如目标检测(COCO test dev上的58.7 box AP和51.1 mask AP); 语义分割(ADE20K val上的535 mIoU)。
它的效果超过了之前的最佳水平,COCO上的box-AP和mask-AP分别为+2.7和+2.6,ADE20K上的mask-AP和+3.2 mIOU,显示了基于Transformer的模型作为视觉支柱的潜力。
存在许多视觉任务,如语义分割,需要在像素级进行dense的预测,这对于高分辨率图像上的Transformer来说是很困难的,因为它self-attention的计算复杂度是图像大小的二次方。
为了克服这些问题,我们提出了一种通用的Transformer backbone,称为Swin-Transformer,它构造了层次化的特征映射,并且计算复杂度与图像大小成线性关系。
如上图所示,Swin-Transformer通过从小尺寸的面片(用灰色表示)开始,逐渐合并更深层次的Transformer层中的相邻面片来构造层次表示。有了这些分层特征映射,Swin-Transformer模型可以方便地利用高级技术进行dense预测,如特征金字塔网络(FPN)或U-Net。线性计算复杂度是通过在分割图像的非重叠窗口(红色轮廓)内局部计算自我注意来实现的。每个窗口中的面片数是固定的,因此复杂度与图像大小成线性关系。这些优点使得Swin-Transformer适合作为各种视觉任务的通用主干,与以前基于Transformer的体系结构形成对比,后者产生单一分辨率的特征图,并且具有二次复杂性。
Swin Transformer的一个关键设计元素是它在连续的self-attention之间的窗口分区的移动,如下图所示。
移动的窗口桥接了前一层的窗口,提供了它们之间的连接,显著增强了建模能力。这种策略对于真实世界的延迟也是有效的:一个窗口中的所有query patches都共享相同的key set,这有助于硬件中的内存访问。
相比之下,早期的基于滑动窗口的self-attention方法由于不同query像素的key集合不同,在一般硬件上的延迟较低。实验结果表明,所提出的shifted window方法比传统方法具有更低的延迟。
所提出的Swin Transformer在图像分类、目标检测和语义分割等识别任务上取得了很好的效果。在这三个任务上,它的延迟时间与ViT/DeiT和ResNe(X)t模型相似,显著优于ViT/DeiT和ResNe(X)t模型。
![](https://filescdn.proginn.com/4de220947e0e8cc7688e831a21b39f2d/de5b09a1dde472fed238b9445292633e.webp)
![](https://filescdn.proginn.com/13fb42bbf7d8072b3fed6cd00de83115/1ed31d88c18b0c5e8af42595aa327a8f.webp)
![](https://filescdn.proginn.com/494d4f33770f290f8bf9639599560b41/f3e3194871a1215579d8d0436c787a9c.webp)
整体结构
Stage1
首先通过像ViT一样的分片模块将输入的RGB图像分片成不重叠的patch。每个patch被视为一个“token”,其特征被设置为原始像素RGB值的串联。
在我们的实现中,我们使用了4×4的面片大小,因此每个面片的特征维数为4×4×3=48。在这个原始值特征上应用一个线性嵌入层,将其投影到任意维(表示为C)。
变化过的self-attention(Swin Transformer blocks)被应用到这些patch token上。Transformer block保留了token的个数()并且使用了线性的Embedding。
Stage2
为了生成一个层次化的表示,当网络变得更深,token的数量会通过patches合并层而减少。第一块拼接层连接了每组2×2相邻的patch的特征,并在维级联特征上应用线性层。
这将token的数量减少了2×2=4的倍数(分辨率的2×降采样),并且输出维度设置为2C。之后应用Swin Transformer block进行特征变换,分辨率保持在。
Stage3&4
将该过程重复两次,输出分辨率分别为和。这些阶段共同产生一个层次表示,具有与典型卷积网络相同的特征图分辨率,例如VGG和ResNet。因此,所提出的架构可以方便地取代现有方法中的主干网来执行各种视觉任务。
![](https://filescdn.proginn.com/13fb42bbf7d8072b3fed6cd00de83115/1ed31d88c18b0c5e8af42595aa327a8f.webp)
![](https://filescdn.proginn.com/494d4f33770f290f8bf9639599560b41/f3e3194871a1215579d8d0436c787a9c.webp)
Swin Transformer block
Swin Transformer是将Transformer模块中的标准multi-head self-attention(MSA)模块替换为基于移动窗口,其它层保持不变。Swin Transformer由一个基于移位窗口的MSA模块组成,然后是一个介于GELU非线性之间的2层MLP。在每个MSA模块和每个MLP之前应用LayerNorm(LN)层,在每个模块之后应用剩余连接。
![](https://filescdn.proginn.com/13fb42bbf7d8072b3fed6cd00de83115/1ed31d88c18b0c5e8af42595aa327a8f.webp)
![](https://filescdn.proginn.com/494d4f33770f290f8bf9639599560b41/f3e3194871a1215579d8d0436c787a9c.webp)
基于Shifted Window的Self-Attention
标准Transformer体系结构及其对图像分类的自适应都进行global self-attention,其中计算了一个token和所有其他token之间的关系。全局计算导致token数量的二次复杂度,这使得它不适用于许多需要大量令牌进行密集预测或表示高分辨率图像的视觉问题。
1. Self-attention in non-overlapped windows
为了有效地建模,我们建议在局部窗口内计算self-attention。窗口以不重叠的方式均匀地分割图像。假设每个窗口包含个patches,全局MSA模块的计算复杂度模块以及基于窗口的图谱的patch是:
前者是path 数的二次方,后者是时的线性(默认设置为7)。对于大型硬件来说,Global self-attention计算通常是难以承受的,而基于窗口的self-attention是scalable的。
2. Shifted window partitioning in successive blocks
基于窗口的自self-attention模块缺乏跨窗口的连接,这限制了它的建模能力。为了在保持非重叠窗口计算效率的同时引入跨窗口连接,我们提出了一种移位窗口划分方法,该方法在连续的Swin Transformer块中交替使用两种划分配置。
如上图所示,第一个模块使用了一个从左上角像素开始的规则窗口划分策略,第一个模块采用将8×8 特征map平均划分为2×2个4×4(M=4)的窗口。然后,下一模块采用从上一层的窗口配置偏移的窗口配置,通过将窗口从规则分区的窗口置换像素。利用移位窗口划分方法,连续的swin transformer块被计算为:
其中和表示模块和输出特征以及block 的MLP模块。
W-MSA:使用regular窗口分区配置的基于window的multi-head self-attention
SW-MSA:使用移动的窗口分区配置的基于window的multi-head self-attention
移位窗口分割方法引入了前一层相邻非重叠窗口之间的连接,被发现在图像分类、目标检测和语义分割上是非常有效的。
![](https://filescdn.proginn.com/13fb42bbf7d8072b3fed6cd00de83115/1ed31d88c18b0c5e8af42595aa327a8f.webp)
![](https://filescdn.proginn.com/494d4f33770f290f8bf9639599560b41/f3e3194871a1215579d8d0436c787a9c.webp)
相对位置Bias
在计算self-attention,此处我们引入一个相对位置bias:
其中:
是窗口中patches的个数。
因为每个轴的相对位置在区间,我们参数化一个更小的bias矩阵,中的值是从中获得。
我们观察到与没有这个偏差项或使用绝对位置嵌入的对应项相比有显著的改进。如[19]中所述,进一步向输入中添加绝对位置嵌入会略微降低性能,因此在我们的实现中不采用这种方法。
在预训练中学习到的相对位置偏差也可以用来初始化模型,通过bi-cubic插值对不同窗口大小的模型进行微调。
![](https://filescdn.proginn.com/13fb42bbf7d8072b3fed6cd00de83115/1ed31d88c18b0c5e8af42595aa327a8f.webp)
![](https://filescdn.proginn.com/494d4f33770f290f8bf9639599560b41/f3e3194871a1215579d8d0436c787a9c.webp)
Architecture Variants
我们建立了与ViTB/DeiT-B相似计算复杂度的模型Swin-B,并介绍了Swin-T、Swin-S和Swin-L,它们分别是模型大小和计算复杂度的0.25倍、0.5倍和2倍。
请注意,Swin-T和Swin-S的复杂性分别与ResNet-50(DeiT-S)和ResNet-101相似。默认情况下,窗口大小设置为。对于所有实验,每个头部的query维度为,每个MLP的扩展层为α=4。这些模型变体的体系结构参数是:
Swin-T: C= 96,层的个数=; Swin-S: C= 96,层的个数=; Swin-B: C= 128,层的个数=; Swin-L: C= 192,层的个数=;
其中是第一阶段中隐藏层的channel个数。表中列出了用于ImageNet图像分类的模型变量的模型大小、理论计算复杂度(FLOPs)和吞吐量。
![](https://filescdn.proginn.com/4de220947e0e8cc7688e831a21b39f2d/de5b09a1dde472fed238b9445292633e.webp)
1. ImageNet-1K的图像分类
与最先进的ConvNets(RegNet和EfficientNet)相比,Swin Transformer有更好一点的速度精度trade-off。 虽然RegNet和EfficientNet是通过彻底的架构搜索获得的,但所提出的Swin Transformer是从标准Transformer改编而来的,具有很强的潜力。 对于Swin-B,ImageNet22K预训练比ImageNet-1K从头开始的培训带来了**1.8%∼1.9%**的收益; 与之前ImageNet-22K预训练的最佳结果相比,我们的模型实现了显著更好的速度-精度折衷:Swin-B获得86.0%的top-1精度,比ViT高2.0%,具有相似的推理吞吐量(84.7 vs.85.9 images/秒)和略低的FLOPs(47.0G vs.55.4G)。更大的Swin-L模型达到86.4%的top-1精度,略好于Swin-B模型。
2. COCO的目标检测
与ResNet-50相比,Swin-T框架带来了+3.4∼4.2 box的AP增益,具有略大的模型大小、FLOPS和延迟; Swin-Transformer可以拿到51.9 box-AP和45.0 mask-AP的高检测精度,与ResNeXt101-64x4d相比,可以获得+3.6 box-AP和+3.3mask-AP的显著增益,ResNeXt101-64x4d具有相似的模型大小、触发器和延迟 在使用改进的HTC框架的52.3 box AP和46.0 mask AP的较高基线上,Swin-Transformer的增益也较高,分别为+4.1 box AP和+3.1 mask AP; 使用级联Mask R-CNN框架的DeiT-S的性能。Swin-T的结果是+2.5 box-AP和+2.3mask-AP高于DeiT-S,模型尺寸相似(86M对80M),推理速度显著提高(15.3fps对10.4fps); 我们的最佳模型在COCO test dev上实现了58.7 box AP和51.1 mask AP,超过了之前的最佳结果+2.7 box AP和+2.6 mask AP(DetectoRS)。
3. ADE20K的语义分割
在计算成本相似的情况下,Swin-S比DeiT-S高出5.3 mIoU(49.3比44.0)。 比ResNet-101高出4.4mIoU,比ResNeSt-101高出2.4 mIoU。我们的带有ImageNet-22K预训练的Swin-L模型在val集上实现了53.5 mIoU,超过了以前最好的模型+3.2mIoU.
4. 解耦实验
在ImageNet-1K、COCO和ADE20K上,采用移位窗口划分的Swin-T比采用单一窗口划分的Swin-T在每个阶段的精度都高出+1.1%top-1、+2.8 box AP/+2.2 mask AP和+2.8 mIoU。 具有相对位置偏差的Swin-T在ImageNet-1K上产生+1.2%/+0.8%的top-1精度;在COCO上+1.3/+1.5 box AP和+1.1/+1.3 mask AP;以及+2.3/+2.9 mIoU在ADE20K上分别与那些没有位置编码和绝对位置嵌入的相关, 相对位置偏差的有效性。同时也注意到,虽然绝对位置嵌入的加入提高了图像分类的准确率(+0.4%),但它不利于目标检测和语义分割;
我们的cyclic实现比单纯的填充更具硬件效率,特别是对于更深层的阶段。总的来说,它可以为Swin-T、Swin-S和Swin-B带来13%、18%和18%的加速; 构建在移动窗口上的Swin-Transformer架构分别比构建在滑动窗口上的Swin-T、Swin-S和Swin-B快4.1/1.5、4.0/1.5和3.6/1.5倍; 与Performer相比,Performer是速度最快的Transformer体系结构之一,我们的基于shifted window的self-attention计算和整体Swin-Transformer体系结构稍快,同时与使用Swin-T的ImageNet-1K上的Performer相比,提升了+2.3%的top-1精度。
![](https://filescdn.proginn.com/4de220947e0e8cc7688e831a21b39f2d/de5b09a1dde472fed238b9445292633e.webp)
本文提出了一种新的视觉Transformer Swin-Transformer,它产生了一种层次化的特征表示,其计算复杂度与输入图像的大小成线性关系。Swin-Transformer在COCO目标检测和ADE20K语义分割方面达到了最先进的性能,显著超过了
以前的最佳方法。我们希望Swin-Transformer在各种视觉问题上的强大性能将促进视觉和语言信号的统一建模。
作为Swin-Transformer的一个关键元素,基于移位窗口的自我注意被证明是解决视觉问题的有效方法,我们也期待着研究它在自然语言处理中的应用。
![](https://filescdn.proginn.com/4de220947e0e8cc7688e831a21b39f2d/de5b09a1dde472fed238b9445292633e.webp)
Swin Transformer: Hierarchical Vision Transformer using Shifted Windows