— order: 14 —1 Swin Transformer: Hierarchical Vision Transformer usingShifted Windows时间:2021.5Swin Transformer ICCV21 最佳论文,是 ViT 之后,第二个证明 Transformer CV 领域强大表现的工作此外,作者团队发布了一系列基于 swin transformer 的工作,比如自监督版本的 MoBY视频领域的 video-swin-transformer应用swin 思想的 MLP 版本 Swin MLP 以及半监督目标检测 Soft Teacher基于掩码自监督学习的 SimMIM 等,基本把视觉领域所有的任务都刷了个遍。范围广、效果好、影响力大,成了视觉领域绕不开的 baseline1.1 标题 & 摘要 & 引言标题:用了 Shifted Windows Hierarchical ViT就是想让 ViT CNN 一样,也能够分成几个 block做层级式的特征提取,从而让提出来的特征有多尺度的概念论文提出 Swin Transformer 可以作为 CV 领域通用的骨干网络。之所以这么说,是因为 ViT 只做了分类任务,把下游任务(e.g. 测、分割)留给后人探索。Swin Transformer 证明使用 Transformer 没毛病,绝对能在方方面面上取代 CNN直接把 Transformer NLP 应用到 Vision 的挑战:尺度:同一个语义的物体在图片中具有不同的尺度,这是 NLP 中没有的情况Resolution:如果以图片像素作为基本单位,序列的长度会剧烈膨胀,以往工作往往将处理后的特征图来当做 Transformer 的输入,或者把图片打成 patch基于此提出 Shifted Windows自注意力在窗口内计算,序列长度大大降低,计算复杂度随着图像大小线性增长(而不是平方增长),为作者之后在更大分辨率上预训练模型并提出 Swin-V2 铺平了道路;层级式结构非常灵活,可以提供各个尺度的特征信息;同时 shifting 操作让相邻两个窗口之间有了交互,上下层之间就可以有cross-window connection变相地达到了全局建模的能力引言里的 fig 1 Swin Transformer ViT 做了对比ViT 使用1616 patch size始终是16×的下采样率。它可以通过全局的自注意力操作达到全局建模能力,但是它对多尺寸特征的把握就会弱一些插播:我们知道,对于视觉任务,尤其是下游任务(e.g. 检测和分割)来说,多尺寸特征至关重要的对目标检测而言,运用最广的一个方法就是 FPN(feature pyramid network)使用分层式的 CNN每一个卷积层的感受野(receptive field)不同,能抓住物体不同尺寸的特征;对物体分割而言,最常见的一个网络是 U-NetU-Net 使用 encoder-bottleneck-decoder 的架构,为了处理多尺度物体的问题,使用 skip connection 的方法,让高频率的图像细节能恢复出来。分割里常用的网络结构还有 PspNetDeepLab这些工作里也有相应的处理多尺寸的方法,比如说使用空洞卷积、psp aspp 层等但是在 ViT 里,处理的特征自始至终都是单一尺寸(16倍下采样后的特征),而且是 low resolution就不适合处理这种密集预测型的任务。另外一点是它的自注意力在最大的窗口上进行,计算复杂度随图像尺寸平方增长Swin Transformer 的效果是非常好的,在视觉领域大杀四方,作者对此展望了 CV NLP 大一统的未来但其实在 unified network 这一点上,ViT 还是做的更好的,因为它真的可以什么模态特征都不考虑,直接拼接起来送入共享参数的模型里(相比之下 Swin Transformer 更多还是利用了视觉这边的先验信息)另外 Swin Transformer 比较大的创新点就是 shifted window它未来需要证明这对 NLP 也是有效的,才能真正把大一统的故事讲得圆满1.2 具体架构为了减少序列长度,Swin Transformer 在窗口内算自注意力,每个窗口内包含的 patch 数量不变的(每个窗口的计算量不变),当图像大小(面积)增长𝑥倍,窗口数量也增长𝑥倍,从而计算复杂度随图像尺寸线性增长(如果把图像边长作为𝑥的话,就是从原来的𝑥4𝑥2这个感觉跟 transformer global attention 性质就相违背,有点部分牺牲全局建模能力换取计算效率的感觉但由于利用了 CNN locality inductive bias即使是在一个局部小范围的窗口算自注意力也够用,全局计算自注意力对于视觉任务来说有点浪费资源,所以也不算特别大的牺牲。更何况后续还用 shift 操作增加了窗口之间的交互,部分弥补了这一点另外一个挑战是如何生成多尺寸的特征CNN 生成多尺寸特征主要是靠 Pooling 操作,增大每一个卷积核的感受野,从而每次池化过后的特征能抓住物体的不同尺寸类似的,Swin Transformer 也提出来一个操作叫 patch merging,把相邻的小 patch 合成一个大 patch这样合并出来的大 patch就能看到之前四个小 patch 看到的内容,增大了感受野,能捕捉多尺寸特征Swin Transformer 是个通用的骨干网络,对密集预测型任务友好,有了这些多尺寸的特征图以后,后续可以接各种 U-Net, FPN 架构Shifted Windows如图 (b) 所示,论文里一个窗口默认为77 patch这里只是图例shift 操作就是往右下角的方向整体移了两个 patch在新的特征图里把它再次分成四方格如果按照原来的方式,窗口之间永不重叠,就真的变成了孤立自注意力,达不到使用 Transformer 的初衷。现在加上 shift 操作,一 patch 就可以跟新的窗口里别的 patch 进行交互,而新的窗口里所有 patch 其实来自于上一层别的窗口里的 patch这也就是作者说的 cross-window connection配合之后提出的 patch merging合并到 Transformer 最后几层的时候,每一个patch 本身的感受野就已经很大,再加上 shifted Windows 操作,所谓窗口内的局部注意力其实也就变相等于全局的自注意力模型总览图画的十分清晰:stage 1:首先上来 Patch Parition + Linear Embedding 其实就相当于 ViT 里的 Patch Projection在代码里也是通过一次卷积就完成了,输出为𝐻𝑊𝐶,其中论文里𝐶=96紧接着是 swin transformer block使用基于窗口的自注意力计算,内部操作暂时当做黑盒,依据 transformer 的特性输入输出的shape 保持一致stage 2:提出 Patch Merging 的操作以达到 pooling 的效果,它很像 Pixel Shuffle 的上采样的一个反过程。输入输出也跟 CNN 似,size 减半,channel 翻倍。具体过程如图(数字为序号)。merging 后再接一个 swin transformer blockstage 3 stage 4 继续重复 stage 2 的操作,最后输出的特征图就是多尺寸的特征图,可以接各种下游任务的网络结构为了跟 CNN 保持一致,Swin Transformer 并没有像 ViT 一样使用 cls token而是(比如对分类任务),采用 global averagepolling 把特征拉成11𝐶Swin Transformer Block 细致介绍基于窗口的自注意力计算(W-MSA)拿第一层的输入来举例。我们知道 ViT 1616 patch size序列长度就只有196;而这里,用44patch同样大小的特征图就被划分为565696,序列长度5656=3136太长了所以小窗口概念,每次少算一点但算很多次。自注意力以77=49为序列长度计算,但算了567567=64次。我们把各个数字抽象为𝐻,𝑊,𝐶,𝑀,通用的复杂度公式为Ω(MSA)=4𝑤𝐶2+2(𝑤)2𝐶Ω(W-MSA)=4𝑤𝐶2+2𝑀2𝑤𝐶移动注意力窗口(SW-MSA): cyclic shift + mask之前图例里画的移动窗口方式,会导致窗口数量增加以及每个窗口大小不一(一个简单的解决方式是 padding但增加计算复杂度)于是很自然的解决办法是循环移位(cyclic shift)把小块拼起来不就好了但另外一个问题就浮现了。对于图片边界的窗口,它们里面的一些元素是从很远的地方搬过来的,它们之间按道理来说不应该去做自注意力。对此使用掩码操作,巧妙地设计几种掩码方式掩码计算完,最后要把小块循环移位搬回去。通过这种方式,实现不增加计算复杂度的情况下,在一次前向过程完成了交互于是整体的 Swin Transformer Block 就是 Layernorm + W-MSA再接着 Layernorm + MLP随后 Layernorm + SW-MSA再接着Layernorm + MLP两个 block 加起来构成一个基本计算单元作者后面还讲了没有用绝对位置编码,而是用相对位置编码,其实是为了提高性能的技术细节,跟文章整体的故事已经关系不大,就不介绍了1.3 实验 & 评价四种变体:Swin Tiny, Swin Small, Swin Base, Swin Large主要不一样的就是两个超参数1.一个是向量维度的大小𝐶2.另一个是每个 stage 里到底有多少个 transform block跟残差网络非常像,ResNet 也是分成了四个 stage每个 stage 有不同数量的残差块)首先是分类上的实验一共用了两种预训练方式:第一种是在正规的 ImageNet-1K 上,第二种是在更大的 ImageNet-22K 上做预训练不论是用哪种去做预训练,最后都是在 ImageNet-1K 的测试集上测试的对比了一些方法总之就是效果比较好其次是目标检测的结果,在 COCO 数据集上训练测试语义分割用 ADE20K 数据集消融实验探究移动窗口以及相对位置编码的影响对分类任务而言影响不算特别显著,不过在 ImageNet 上提升一个点也算可观了;对下游任务也就是目标检测和语义分割影响更大这很合理,因为密集型预测任务对位置信息更敏感,而且更需要上下文关系评价除了作者团队自己在过去半年中刷了的任务,比如说最开始讲的自监督的 Swin Transformer还有 Video Swin Transformer 以及Swin MLPSwin Transformer 还被别的研究者用到了不同的领域在视觉领域大杀四方,以后每个任务都逃不了跟 Swin 比一比,而且因为 Swin 这么火,所以很多开源包里都有 Swin 的实现它的影响力远不止于此,论文里对 CNN Transformer还有对 MLP 这几种架构深入的理解和分析可以给更多研究者带来思考,从而不仅可以在视觉领域里,在多模态领域中,也能激发出更好的工作