《Swin Transformer Hierarchical Vision Transformer using Shifted Windows》作为2021 ICCV最佳论文,屠榜了各大CV任务,性能优于DeiT、ViT和EfficientNet等主干网络,已经替代经典的CNN架构,成为了计算机视觉领域通用的backbone,是继Vit之后的Transformer在CV领域的巅峰之作。它基于ViT模型的思想,创新性地引入了滑动窗口机制,让模型能够学习到跨窗口的信息,同时通过下采样层,使得模型能够处理超分辨率的图片,节省计算量以及能够关注全局和局部的信息。接下来我们就一起通过论文了解一下吧!
学习资料:
- 论文原文: https://arxiv.org/pdf/2103.14030.pdf
- 源码地址: GitHub - microsoft/Swin-Transformer: This is an official implementation for "Swin Transformer: Hierarchical Vision Transformer using Shifted Windows".
前期回顾
【Transformer系列(1)】encoder(编码器)和decoder(解码器)
【Transformer系列(2)】注意力机制、自注意力机制、多头注意力机制、通道注意力机制、空间注意力机制超详细讲解
【Transformer系列(3)】 《Attention Is All You Need》论文超详细解读(翻译+精读)
【Transformer系列(4)】Transformer模型结构超详细解读
【Transformer系列(5)】Transformer代码超详细解读(Pytorch)
【ViT系列(1)】《AN IMAGE IS WORTH 16X16 WORDS:TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE》论文超详细解读(翻译+精读)【ViT系列(2)】ViT(Vision Transformer)代码超详细解读(Pytorch)
目录
前言
Abstract—摘要
一、Introduction—简介
二、Related Work—相关工作
三、Method—方法
3.1 Overall Architecture—总体架构
3.2 Shifted Window based Self-Attention—基于移位窗口的self-attention
Shifted window partitioning in successive blocks—在连续块中移位窗口分区
Efficient batch computation for shifted configuration—高效的批量计算移位配置
Relative position bias—相对位置偏置
3.3 Architecture Variants—结构变体
四、Experiments—实验
4.1 Image Classification on ImageNet-1K—在ImageNet-1K上进行图像分类
常规ImageNet-1K训练
ImageNet-22K的预训练和ImageNet-1K的微调
4.2 Object Detection on COCO—COCO数据集上的目标检测
4.3 Semantic Segmentation on ADE20K—在ADE20K上语义分割
4.4 Ablation Study—消融实验
五、Conclusion—结论
本文提出了一种新的vision Transformer,称为Swin Transformer,它能够作为计算机视觉的通用骨干网络。从语言到视觉的挑战来自于这两个领域之间的差异,比如视觉实体规模的变化很大,以及图像中像素比文本中单词的高分辨率。为了解决这些差异,我们提出了一个分层Transformer,其表示是由Shifted windows计算的。Shifted windows方案将自注意计算限制在非重叠的局部窗口上,同时允许跨窗口连接,从而提高了更高的效率。这种层次结构具有在不同尺度上建模的灵活性,并且对图像大小具有线性的计算复杂度。 Swin Transformer的这些品质使其兼容广泛的视觉任务,包括图像分类(87.3top-1 ImageNet-1K)和密集的预测任务,如目标检测(58.7box AP和51.1mask AP可测试开发)和语义分割(53.5mIoU 在ADE20K验证集)。它的性能大大超过了之前的先进技术,即COCO上的+2.7boxAP和+2.6mask AP,以及ADE20K上的+3.2mIoU,展示了基于Transformer的模型作为视觉骨干的潜力。分层设计和Shifted windows方法也被证明对全MLP架构是有益的。这些代码和模型可以在https://github.com/microsoft/Swin-Transformer。
本文主要内容
(1)本文提出了一个分层的Transformer,表示通过移位窗口计算,称为Swin Transformer。
(2)主要方法是通过将自我注意计算限制在不重叠的局部窗口上,同时允许跨窗口连接。
(3)Swin Transformer在图像分类、目标检测和语义分割的任务上,性能大大超过了之前的模型。
计算机视觉中的建模长期以来一直由卷积神经网络(CNNs)所主导。从AlexNet[39]和它在ImageNet图像分类挑战上的革命性性能开始,CNN架构通过更大规模的[30,76]、更广泛的连接[34]和更复杂的卷积[70,18,84]形式变得越来越强大。随着cnn作为各种视觉任务的骨干网络,这些架构上的进步导致了性能的改进,并广泛地提升了整个领域。
另一方面,自然语言处理(NLP)中网络体系结构的发展采取了不同的道路,今天流行的体系结构是Transformer。为序列建模和转导任务而设计,Transformer以其对数据中的长期依赖进行建模而闻名。它在语言领域的巨大成功使研究人员研究了其对计算机视觉的适应性,最近它在某些任务上显示出了有希望的结果,特别是图像分类[20]和联合视觉语言建模[47]。
在本文中,我们试图扩大Transformer的适用性,使它可以作为计算机视觉的通用主干,就像它在NLP和cnn在视觉中所做的那样。我们观察到,将其在语言领域的高性能转移到视觉领域的重大挑战可以用两种模式之间的差异来解释。其中一个差异涉及到规模。与在语言Transformer中作为处理的基本元素的单词标记不同,视觉元素在尺度上可以有很大的变化,这是一个在对象检测[42,53,54]等任务中引起注意的问题。在现有的基于Transformer的模型[64,20]中,tokens都是固定规模的,不适合这些视觉应用。另一个区别是图像中像素的分辨率比文本中的文字要高得多。存在许多视觉任务,如语义分割,需要在像素级进行密集预测,这对于高分辨率图像上的Transformer是难以处理的,因为其自注意力的计算复杂度与图像大小是二次的。为了克服这些问题,我们提出了一种通用的Transformer主干,称为SwinTransformer,它构造层次特征映射,并对图像大小具有线性计算复杂度。如图1(a)所示,Swin Transformer通过从小尺寸的patch(灰色轮廓)开始,并在更深的Transformer层中逐渐合并相邻的patch来构建一个层次表示。有了这些层次的特征图,Swin Transformer模型可以方便地利用先进的技术进行密集预测,如特征金字塔网络(FPN)[42]或U-Net[51]。线性计算复杂度是通过在对图像进行分割的窗口(用红色表示)的非重叠窗口内局部计算自注意力来实现的。每个窗口中的patch数量是固定的,因此复杂度与图像大小成线性关系。这些优点使得Swin Transformer适合作为各种视觉任务的通用骨干,而以前基于Transformer的架构[20],它产生单一分辨率的特征图,具有二次复杂度。
Swin Transformer的一个关键设计元素是它在连续的自注意层之间的窗口分区的位移,如图2所示。移动后的窗口连接了前一层的窗口,提供了它们之间的连接,显著提高了建模能力(见表4)。这种策略对于现实世界的延迟也很有效:窗口内的所有query patches共享相同的key set,这有助于硬件中的内存访问。相比之下,早期基于滑动窗口的自注意方法[33,50]由于不同query像素2的keys不同,在一般硬件上存在较低的延迟。我们的实验表明,所提出的移位窗口方法比滑动窗口方法的延迟要低得多,但在建模能力上却很相似(见表5和表6)。shifted window方法也证明对所有MLP架构[61]都是有益的
该Swin Transformer在图像分类、目标检测和语义分割等识别任务上取得了较好的性能。它在三个任务上显著优于ViT/DeiT[20,63]和ResNe(X)t模型[30,70],并且在三个任务上具有相似的延迟期。它在COCO测试集上的58.7 boxAP和51.1 maskAP超过了之前由+2.7 boxAP(没有外部数据的Copy-paste[26])和+2.6maskAP(DetectoRS[46])得到的最先进的结果。在ADE20K语义分割上,它在val集上获得了53.5 mIoU,比之前的+(SETR[81])改进了3.2mIoU。它在ImageNet-1K图像分类上也达到了87.3%的top-1位精度。
我们相信,跨计算机视觉和自然语言处理的统一架构可以有利于这两个领域,因为它将促进视觉和文本信号的联合建模,而来自这两个领域的建模知识可以更深入地共享。我们希望Swin Transformer在各种视觉问题上的出色表现能够在社区中加深这种信念,并鼓励视觉和语言信号的统一建模。
Transformer从NLP搬到CV的难点
(1)规模。图像包含像素信息更多,而且规模不一。
(2)图像像素的分辨率比文本段落中的单词高得多。如果以像素点为单位,则计算量爆炸,序列长度爆炸,所以之前ViT提出了patch方案或小窗口+自注意力等,都是为了解决序列长度问题。
Swim Transformer 与 ViT 区别
图(1)是Swin Transformer和ViT的对比
Swin Transformer 能够像卷积神经网络当中构建出具有层次性的特征图,对于目标检测和分割任务有更大的优势。
ViT中都是保持下采样的规律不变,所以没法像 Swin Transformer 构建出具有层次性的特征层。
本文的主要方法
图(2)表示的是Swin Transformer在连续的自我注意层之间转移窗口分区
(1)第l层(左)采用常规的窗口分区方案,在每个窗口内进行自注意计算。
(2)在下一层l + 1(右)中,窗口分区被移动,产生新的窗口。
CNN and variants cnn作为整个计算机视觉的标准网络模型。虽然CNN已经存在了几十年,但直到AlexNet[39]的引入,CNN才成为主流。从那时起,更深层次、更有效的卷积神经结构被提出来进一步推动计算机视觉中的深度学习浪潮,如VGG[52]、GoogleNet[57]、ResNet[30]、DenseNet[34]、HRNet[65]和EffificientNet[58]。除了这些架构上的进步之外,还有许多改进个体卷积层的工作,如深度卷积[70]和可变形卷积[18,84]。虽然CNN及其变体仍然是计算机视觉应用程序的主要主干架构,但我们强调了类似变压器的架构在视觉和语言之间的统一建模方面的强大潜力。我们的工作在几个基本的视觉识别任务上取得了强大的表现,我们希望它将有助于建模的转变。
Self-attention based backbone architectures 同样受到自注意层和transformer架构在自然语言处理领域的成功的启发,一些作品采用自注意层来取代流行的ResNet[33,50,80]中的部分或全部空间卷积层。在这些工作中,自注意力在每个像素的局部窗口内计算,以加快优化[33],它们比对应的ResNet架构获得了略微更好的精度/FLOPs权衡。然而,它们昂贵的内存访问导致它们的实际延迟明显大于卷积网络[33]。我们建议使用滑动窗口,我们建议在连续层之间移动窗口,这允许在一般硬件中更有效地实现。
Self-attention/Transformers to complement CNNs 另一项工作是用自我注意层或Transformers来增强标准的CNN架构。自注意层可以通过提供编码远程依赖或异构交互的能力来补充主干[67,7,3,71,23,74,55]或头部网络[32,27]。近年来,Transformers中的编解码器设计已被应用于目标检测和实例分割任务[8,13,85,56]。我们的工作探索了Transformers的基本视觉特征提取,是这些作品的补充。
Transformer based vision backbones 与我们的工作最相关的是Vision Transformer (ViT)及其后续的[63,72,15,28,66]。ViT的开创性工作直接将Transformer架构应用于不重叠的中型图像patch上进行图像分类。与卷积网络相比,它在图像分类上取得了令人印象深刻的速度-精度权衡。虽然ViT需要大规模的训练数据集(即JFT-300M)才能表现良好,但DeiT[63]引入了几种训练策略,使ViT也能够有效地使用较小的ImageNet-1K数据集。生活在图像分类的结果是令人鼓舞的,但其架构不适合作为通用骨干网络密集视觉任务或输入图像分辨率高,由于其低分辨率的特征地图和图像大小的二次增加复杂性。目前已有一些研究将ViT模型通过直接上采样或反卷积应用于目标检测和语义分割的密集视觉任务,但[2,81]性能相对较低。与我们的工作同时,有一些修改了ViT架构[72,15,28],以更好的图像分类。根据经验,我们发现我们的Swin Transformer 架构在这些关于图像分类的方法中实现了最佳的速度精度权衡,尽管我们的工作集中于通用性能,而不是特别的分类。另一个同时进行的工作,[66]探索了类似的思路,在Transformer 上构建多分辨率的特征地图。它的复杂度仍然是图像大小的二次型,而我们的复杂性是线性的,并且也在局部工作,这已被证明有利于建模视觉信号[36,25,41]的高相关性。我们的方法既高效又有效,在COCO目标检测和ADE20K语义分割上都实现了最先进的准确性。
图3显示了Swin 架构的概述,它说明了一个小版本(SwinT)。它首先通过一个patch分割模块将一个输入的RGB图像分割成不重叠的补丁,比如ViT。每个patch都被视为一个“token”,其特性被设置为原始像素RGB值的连接。在我们的实现中,我们使用了4×4的patch大小,因此每个patch的特征维度是4×4×3=48。在这个原始值特征上应用一个线性embeding层,将其投射到一个任意维度(记为C)。
在这些patch tokens上应用了几个具有改进的自注意计算的变压器块(Swin Transformer块)。Transformer块保持了tokens的数量(H/4×W/4),并与线性embeding一起被称为“阶段1”。
为了生成层次表示,随着网络的深入,patch合并层就减少了标记的数量。第一个patch合并层将每一组2×2个相邻patch的特征连接起来,并在4c维连接的特征上应用一个线性层。这将“token”的数量减少了2×2=4的倍数(2×分辨率的降采样),输出维度被设置为2C。然后应用Swin Transformer块进行特征变换,分辨率保持在H/8×W/8。这个patch合并和特征转换的第一个块被表示为“阶段2”。该过程重复两次,如“阶段3”和“阶段4”,输出分辨率分别为H/16×W/16和H/32×W/32。这些阶段共同产生了一个与典型的卷积网络具有相同的特征图分辨率的层次表示,例如,VGG[52]和ResNet[30]。因此,所提出的架构可以方便地取代现有方法中的各种视觉任务。
Swin Transformer block Swin Transformer是通过将Transformer块中的标准多头自注意(MSA)模块替换为基于移动窗口的模块(见第3.2节),其他层保持不变。如图3(b)所示,一个SwinTransformer块由一个基于移位窗口的MSA模块组成,然后是一个中间具有GELU非线性的2层MLP。在每个MSA模块和每个MLP之前应用一个LayerNorm(LN)层,在每个模块之后应用一个残差连接。
流程
Patch Partition
Images分割成不重叠的patches,patch相当于Transformer的token,使用4×4的patch大小,因此每个patch的特征维数为4×4×3 = 48。
Stage 1
每个patch的特征应用线性嵌入层(Linear Embedding),将其投射到任意维度(记为C)。
这些patches token上应用Swin Transformer Block。Transformer Block维持 token 的数量(H/4 × W/4)。
Stage 2
第一个patches合并层将相邻4个patches的特征 拼接起来(减少 token 的数量),并在4c维的拼接特征上应用一个线性层。这将 patches 的数量减少了 4的倍(分辨率的2倍下采样),并且输出维数设置为2C。
然后应用 Swin Transformer Block 进行特征变换,分辨率保持在H/8 × W/8。
Stage 3
同 Stage 2,输出分辨率分别为H/16 × W/16。
Stage 4
同 Stage 2,输出分辨率分别为H/32 × W/32 。
标准的Transformer 体系结构[64]及其对图像分类[20]的适应都进行全局自关注,其中一个token和所有其他token之间的关系被计算。全局计算导致了关于标记数量的二次复杂度,这使得它不适合许多需要大量标记来进行密集预测或表示高分辨率图像的视觉问题。
Self-attention in non-overlapped windows 为了有效地建模,我们建议在局部窗口内计算自注意。这些窗口被安排成以不重叠的方式均匀地分割图像。假设每个窗口包含M×M patch,则一个全局MSA模块和一个基于h×w patchs图像的窗口的计算复杂度为
其中,前者与patches数hw之间为二次型,当M固定(默认设置为7)时,后者为线性型。全局自注意计算对于一个大的hw通常是不可承受的,而基于窗口的自注意计算是可扩展的。
Shifted window partitioning in successive blocks 基于窗口的自注意模块缺乏跨窗口的连接,这限制了其建模能力。为了在保持非重叠窗口计算效率的同时引入跨窗口连接,我们提出了一种移位窗口划分方法,该方法在连续的Swin Transformer块中的两种划分配置之间交替进行。
如图2所示,第一个模块使用规则的窗口划分策略,从左上角的像素开始,8×8特征映射均匀地划分为2个窗口,大小为4×4(M=4)。然后,下一个模块采用一个窗口配置,从前一层的窗口中,替换窗口像素。采用移位窗口划分方法,连续的Swin Transformer计算为 :
其中,和分别表示(S)的WMSA模块和MLP模块的输出特征;W-MSA和SW-MSA分别表示基于规则的窗口分区配置和移位的多头自注意力。 移位窗口划分方法在上一层中引入了相邻的非重叠窗口之间的连接,在图像分类、目标检测和语义分割等方面都是有效的,如表4所示。
Effificient batch computation for shifted confifiguration 移位窗口分区的一个问题是,它将导致更多的窗口,从移位配置中的到,并且一些窗口将小于M×M。一个简单的解决方案是将较小的窗口填充到M×M的大小,并在计算注意力时屏蔽填充的值。当常规分区中的窗口数量很小时,例如2×2,使用这个简单的解决方案增加的计算量相当大(2×2→3×3,是原来的2.25倍)。在这里,我们提出了一种更有效的批处理计算方法,即向左上角的方向循环移动,如图4所示。在此转移之后,批处理窗口可能由几个在特征图中不相邻的子窗口组成,因此使用mask机制将自注意计算限制在每个子窗口内。通过循环位移,批处理窗口的数量保持在与常规窗口划分的数量相同,因此也是有效的。这种方法的低延迟如表5所示。
Relative position bias 在计算自我注意时,我们遵循[49,1,32,33],在计算相似度中对每个头部包含一个相对位置偏差:
其中,为query, key矩阵和value矩阵;d为query/key维度,M2为窗口中的patch数。由于沿每个轴的相对位置在范围内[−M+1,M−1],我们参数化了一个较小的偏置矩阵,B中的值取自Bˆ。
我们观察到,与没有这个偏差项或使用绝对位置embeding的同行相比,有显著的改进,如表4所示。进一步添加绝对位置embeding会略微降低性能,因此在我们的实现中没有采用它。
在预训练中学习到的相对位置偏差也可以通过双立方插值[20,63]来初始化一个具有不同窗口大小的微调模型。
传统的Transformer的不足
传统的Transformer都是基于全局来计算注意力的,因此计算复杂度十分高。
本文改进
(1)Swin Transformer则将注意力的计算限制在每个窗口内,进而减少了计算量。
(2)主要区别是在原始计算Attention的公式中的Q,K时加入了相对位置编码。
(3)Self-attention in non-overlapped windows—非重叠窗口中的self-attention。
目的
更高效地建模
本文方法
在局部窗口内计算self-attention,窗口被安排以不重叠的方式均匀地分割图像。
计算复杂度
目的
引入跨窗口连接,同时保持非重叠窗口的高效计算
本文方法
本文提出了一种移位窗口分区方法,该方法在连续Swin Transformer块中的两个分区配置之间交替进行。
计算公式
目的
为了减少移位窗口分割过程中产生更多的窗口,并避免窗口尺寸过小。
本文方法
向左上方循环移位。在这种移位之后,一个批处理窗口可以由特征图上几个不相邻的子窗口组成,通过循环移位,批处理窗口的数量保持与常规窗口划分相同。
本文参数化了一个较小的偏差矩阵,但是呢,与没有该偏差项或使用绝对位置嵌入的同行相比,有显著的改进,像VIT那样在输入中进一步添加绝对位置嵌入会略微降低性能,因此在本文的实现中没有采用它。
我们建立了我们的基本模型,称为Swin-B,该模型具有类似于ViTB/DeiT-B的模型大小和计算复杂度。我们还介绍了Swin-T、Swin-S和Swin-L,它们分别是模型大小和计算复杂度约为0.25×、0.5×和2×的版本。需要注意的是,Swin-T和Swin-S的复杂性分别与ResNet-50(DeiT-S)和ResNet-101相似。窗口大小默认设置为M=7。在所有实验中,每个head的query维度为d=32,每个MLP的扩展层为α=4。这些模型变体的架构超参数是:
• Swin-T: C = 96 , layer numbers = { 2 , 2 , 6 , 2 }
• Swin-S: C = 96 , layer numbers = { 2 , 2 , 18 , 2 }
• Swin-B: C = 128 , layer numbers = { 2 , 2 , 18 , 2 }
• Swin-L: C = 192 , layer numbers = { 2 , 2 , 18 , 2 }
C是第一阶段的隐藏层的通道数。表1列出了用于ImageNet图像分类的模型变量的模型大小、理论计算复杂度(FLOPs)和吞吐量。
这些模型变量的体系结构超参数:
我们对ImageNet-1K图像分类[19]、COCO目标检测[43]和ADE20K语义分割[83]进行了实验。在下面,我们首先将提出的Swin Transformer架构与之前的三个技术进行比较。然后,我们消除了Swin Transformer的重要设计元素。
对于图像分类的设置,我们在ImageNet-1K[19]上对所提出的Swin Transformer进行了基准测试,它包含来自1000个类的1.28M训练图像和50K验证图像。报告了单一crop的最高精度。我们考虑了两种训练设置:
常规ImageNet-1K训练。这个设置主要遵循[63]的原则。我们使用一个AdamW[37]优化器为300个周期使用余弦衰减学习率调度器和20个周期的线性预热。使用的批处理大小为1024,初始学习率为0.001,权重衰减为0.05。我们在训练中包括了大多数[63]的增强和正则化策略,除了重复的增强[31]和EMA[45],它们并没有提高性能。请注意,这与[63]相反,在[63]中,重复增强对稳定ViT的训练至关重要。
ImageNet-22K的预训练和ImageNet-1K的微调。我们还在更大的ImageNet-22K数据集上进行了预训练,其中包含1420万张图像和22K类。我们使用了一个AdamW优化器为90个epochs,使用一个线性衰减学习率调度器与5个epoch的线性热身。使用的批量大小为4096,初始学习率为0.001,权重衰减为0.01。在ImageNet-1K微调中,我们对模型训练为30个epoch,批大小为1024,恒定的学习速率为10−5,权重衰减为10−8。
Results with regular ImageNet-1K training 表1(a)显示了与其他骨干的比较,包括基于transformer的和基于convnet的,使用常规的ImageNet-1K训练。 与之前最先进的基于transformer的架构,即DeiT[63]相比,Swin Transformer明显超过了类似的复杂架构:使用224**2输入的SwinT-T+1.5%(81.3%)(79.8%),使用224**2/384**2输入的Swin-B+1.5%/1.4%使用2242/3842输入(83.3%/84.5%)。
与最先进的ConvNets,即RegNet[48]和EffificientNet[58]相比,Swin Transformer实现了一个稍微更好的速度-精度权衡。需要注意的是,虽然RegNet[48]和EffificientNet[58]是通过彻底的架构搜索获得的,但所提出的Swin Transformer是由标准transformer改编而来的,具有很强的进一步改进潜力。
Results with ImageNet-22K pre-training 我们还在ImageNet-22K上对更大容量的Swin-B和Swin-L进行了预训练。对ImageNet-1K图像分类的微调结果如表1(b).所示对于Swin-B,ImageNet-22K预训练比ImageNet-1K预训练带来1.8%∼1.9%提升。与之前ImageNet-22K预训练的最佳结果相比,我们的模型实现了显著更好的速度-精度权衡:Swin-B获得了86.4%的top-1精度,比类似的推理吞吐量(84.7/85.9vs.图像/秒),略低的FLOPs(47.0G/55.4G)高2.4%。较大的Swin-L模型达到87.3%的top-1精度,+比Swin-B模型高0.9%。
• 表1a:在imagenet-1k上从头开始训练
• 表1b:首先在imagenet-22k上预训练,再1迁移到imagenet-1k上
设置
结果:与之前最先进的基于transformer的架构,即DeiT[63]相比,Swin Transformer明显超过了类似的复杂架构。
预训练设置
微调设置
结果:ImageNet-22K预训练比ImageNet-1K预训练带来1.8%∼1.9%提升。与之前ImageNet-22K预训练的最佳结果相比,本文的模型实现了显著更好的速度-精度权衡。
Settings 在COCO2017上进行了对象检测和实例分割实验,其中包含118K训练、5K验证和20K测试开发图像。使用验证集进行了消融研究,并对测试开发报告了系统级比较。在消融研究中,我们考虑了四种典型的目标检测框架:Cascade Mask R-CNN [29,6]、ATSS[79]、RepPoints v2[12]和mmdetection[10]中的Sparse RCNN[56]。对于这四个框架,我们使用相同的设置:多尺度训练[8,56](调整输入,这样短的一面在480和800之间,而长的一面最多1333),AdamW优化器(初始学习率0.0001,权重衰减0.05,和批大小16),和3x时间表(36时代)。对于系统级的比较,我们采用改进的HTC[9](记为HTC++),包括初始[22]、更强的多尺度训练[7]、6x时间表(72个epoch)、soft-NMS[5]和ImageNet-22K预训练模型作为初始化。
我们将我们的Swin Transformer与标准的卷积网络进行比较,即ResNe(X)t,以及以前的Transformer网络,如DeiT。比较是通过只改变主干来进行的。请注意,虽然Swin Transformer和ResNe(X)t由于它们的层次特征图,直接适用于上述所有框架,但DeiT只产生单一的特征图分辨率,不能直接应用。为了公平的比较,我们遵循[81],使用反卷积层构建DeiT的层次特征图。
Comparison to ResNe(X)t 表2(a)列出了Swin-T和ResNet-50在四个目标检测框架上的结果。与ResNet-50相比,我们的Swin-T 带来了一致的+3.4∼4.2boxAP收益,模型大小、流量和延迟略大。
表2(b)使用Swin Transformer比较了不同模型容量下的Swin transformer和ResNe(X)t。transformer实现了51.9boxAP和45.0maskAP的高检测精度,+3.6boxAP和+3.3maskAP显著高于ResNeXt 101-64x4d,具有相似的模型大小、流量和延迟。在使用改进的HTC框架的52.3的boxAP和46.0的mask AP的更高baseline上,+4.1的boxAP的增益也很高,+3.1的mask AP(见表2(c))。关于推理速度,虽然ResNe(X)t是由高度优化的Cudnn函数构建的,但我们的架构是用内置的PyTorch函数实现的,这些函数并不是都经过了很好的优化。一个彻底的核优化超出了本文的范围。
Comparison to DeiT 使用Cascade Mask R-CNN框架的DeiT-S的性能如表2(b).所示Swin-T的结果是+2.5boxAP和+2.3mask P高于DeiT-S,模型大小相似(86M vs.80M),且显著高于推理速度(15.3FPSvs.10.4FPS)。DeiT的推理速度较低,主要是由于它对输入图像大小的二次复杂度。
Comparison to previous state-of-the-art 表2(c)将我们的最佳结果与以前最先进的模型进行了比较。我们的最佳模型在COCO测试开发集上达到了58.7boxAP和51.1maskAP,超过了之前+2.7boxAP(没有外部数据的Copy-paste[26])和+2.6mask AP(检测器[46])的最佳结果。
目标检测和实例分割实验在COCO 2017上进行,其中包括118K训练、5K验证和20K测试开发图像。
和ResNe(X)t相比
表2a表明Swin-T架构带来了的+3.4∼4.2 box AP,比ResNet-50更具优势,但模型尺寸、算力消耗、延迟都稍大一些。
表2b表明Swin Transformer和相似模型大小、算力和延迟的ResNeXt101-64x4d相比获得了+3.6 box AP and +3.3 mask AP的显著增益。
表2c表明ResNe(X)t是由高度优化的Cudnn函数构建的,但Swin-T体系结构是由内置的PyTorch函数实现的,这些函数并没有得到很好的优化。
和DeiT相比
表2b表明与模型尺寸相似(86M对80M)的DeiT-S相比,Swin-T的结果是+2.5box AP和+2.3mask AP,并且推理速度显著更高(15.3fps对10.4fps)。DeiT的推理速度较低主要是由于其对输入图像大小的二次复杂度。
和SOTA相比
表2c表明Swin-T的最佳模型在COCO测试开发上超过了之前的最佳结果+2.7 box AP和+2.6 mask AP。
Settings ADE20K[83]是一个被广泛使用的语义分割数据集,涵盖了150个语义类别。它总共有25K张图像,其中20K用于训练,2K用于验证,另外3K用于测试。我们利用mmseg[16]中的UperNet[69]作为其高效的基础框架。更多的细节见附录。
Results 表3列出了不同方法/主干对的mIoU、模型大小(#param)、FLOPs和FPS。从这些结果可以看出,Swin-S的+比DeiT-S高5.3mIoU(49.3比44.0)。+4.4mIoU高于ResNet-101,+2.4mIoU高于ResNeSt-101[78]。我们使用ImineNet-22K预训练的Swin-L模型在val集上达到53.5 mIoU,超过了之前+3.2mIoU的最佳模型(SETR[81]的50.3mIoU,具有更大的模型尺寸)。
表3是以更小的模型实现了比之前的SOTA SETR更高的mIOU
结论:
在本节中,我们使用ImageNet-1K图像分类、COCO目标检测,Cascade Mask R-CNN和UperNet ADE20K语义分割,消除了提出的Swin Transformer中的重要设计元素。
Shifted windows 表4报告了在这三个任务上的移位窗口方法的消融情况。移位窗口划分的Swin-T在每个阶段比单个窗口划分上的性能在ImageNet-1K上的为+1.1%,COCO上的+2.8 boxAP/+2.2 maskAP和ADE20K上的+2.8mIoU。结果表明,使用移动的窗口在前几层的窗口之间建立连接是有效的。通过移位窗口产生的延迟开销也很小,如表5所示。
Relative position bias 表4显示了不同位置embeding方法的比较。那些没有位置编码和绝对位置embeding分别相比,Swin-T与相对位置偏差收益率+1.2%/+0.8%top-1精度在ImageNet-1K数据集上,+1.3/+1.5 boxAP +1.1/+1.3 mask AP在COCO数据集上,和+2.3/+2.9 mIoU在ADE20K数据集上,还需要注意的是,虽然包含绝对位置embeding提高了图像分类精度(+0.4%),但它损害了目标检测和语义分割(COCO的-0.2box/maskAP和ADE20K的-0.6mIoU)。
虽然最近的ViT/DeiT模型放弃翻译不变性在图像分类,尽管它长期以来一直被证明是至关重要的视觉建模,我们发现归纳偏差,鼓励某些翻译不变性仍然适合通用视觉建模,特别是预测任务密集的目标检测和语义分割。
Different self-attention methods 表5比较了不同的自注意计算方法和实现的真实速度。我们的循环实现比简单的填充更有硬件效率,特别是对于更深层次的阶段。总体而言,Swin-T、Swin-S和Swin-B的增长速度分别提高了13%、18%和18%。
在四个网络阶段,移位窗口方法上的自注意模块的初始/内核实现比滑动窗口的效率分别为40.8×/2.5×、20.2×/2.5×、9.3×/2.1×和7.6×/1.8×。总的来说,构建在移动窗口上的Swin transformer架构分别比建立在Swin-T、Swin-S和Swin-B上的变体快4.1/1.5、4.0/1.5、3.6/1.5倍。表6比较了它们在三个任务上的准确性,表明它们在视觉建模中的准确性相似。
与Performer[14]相比,这是最快的transformer架构之一(见[60]),提出了基于窗口的自我注意计算和整体双transformer架构略快(见表5),同时实现+2.3%的top-1精度相比Performer ImaneNet-1k使用Swin-T(见表6)。
表4是在分类、检测、分割任务上进行的实验
结论:移位窗口操作和添加相对位置偏差是有效的。
表5是比较不同attention方法还有耗时情况
结论:shifted window和cycilc结合是高效的。
表6是使用不同的self-attention比较
结论:与速度最快的Transformer架构之一Performer相比,基于移位窗口的自注意计算和整体Swin Transformer架构速度稍快。
本文提出了一种新的视觉tranformer Swin tranformer,它可以产生一种分层的特征表示方法,并且对输入图像的大小具有线性的计算复杂度。Swin tranformer在COCO目标检测和ADE20K语义分割方面取得了最先进的性能,明显超过了以往的最佳方法。我们希望Swin tranformer在各种视觉问题上的强大性能将鼓励视觉和语言信号的统一建模。
基于移动窗口的自注意作为Swin Transformer的一个关键元素,对视觉问题是有效的,并期待研究其在自然语言处理中的应用。
本文提出了一种新的视觉Transformer主干网络。Swin-T结合了CNN的归纳偏置,基于局部窗口做注意力,构建了一种层次化的特征表示,并具有与输入图像大小呈线性计算复杂度,极大降低了计算量。
(1)基于局部窗口做注意力
(2)将层次性、局部性和平移不变性等先验引入Transformer网络结构设计
(3)关键部分是提出了Shift window移动窗口(W-MSA、SW-MSA),改进了ViT中忽略局部窗口之间相关性的问题。
(4)使用cyclic-shift 循环位移和mask机制,保证计算量不变,并忽略不相关部分的注意力权重
(5)加入了相对位置偏置B
(6)移动窗口和相对位置编码对分类任务提升效果不显著,对下游任务,分割检测等提升效果显著