Swin Transformer【Backbone】

背景

Swin Transformer是ICCV2021最佳论文。

ViT让transformer从NLP直接应用到CV有两个直接的问题:尺度问题(比如行人,车等大大小小的尺度问题在NLP领域就没有),序列问题(如果以图像像素点为基本单位,序列太大)。16个patch(分辨率低)使ViT可能不适合密集预测型的任务,全局建模使计算复杂度平方倍增长。

Swin Transformer让transformer也能做层级式的特征提取,使得提取的特征具备多尺度概念。窗口内计算自注意力使序列长度降低(计算复杂度随着图像大小线性增长,非平方级增长),移动使相邻两个窗口之间有了交互。语义相近的部分大概率出现在相邻的区域,这样local的设计是完全够用的,ViT的全局设计还是冗余的。

总的来说,是借鉴卷积的窗口滑动与自身全局视野的把握优势相结合。

模型结构

Swin Transformer【Backbone】_第1张图片

开始的操作可对比ViT理解,假设输入的图片[224,224,3],经过Patch Partition打成[56,56,48](类似ViT,不过这里的patch大小为4*4),经过Linear Embedding形成[56,56,96],改成[3136*96],再输入到Block的最终处理成[3136*96]。后再输入Patch Merging(空间大小除2,通道数乘2,为了对比卷积神经网络有了这样的操作,这种操作可以理解为以空间换维度,可看参考的视频,很详细。)成[28,28,192],依次循环构成整个Swin Transformer。

Swin Transformer Block

Swin Transformer【Backbone】_第2张图片

前面提到,[56,56,96]的张量输入块后,是在在7*7的窗口里算自注意力。见第一张图(b)是Swin Transformer的一个基本计算单元(含两个Block),先在窗口计算自注意力,再在shift后的窗口做自注意力。

如何算滑动窗口后的自注意力这个细节看B站沐神的讲解吧。

参考

B站沐神Swin Transformer论文精读【论文精读】

你可能感兴趣的:(Backbone,计算机视觉,深度学习)