论文发表在AI顶会(CCF-A):ICCV-2021。 论文链接:https://arxiv.org/abs/2103.14030
🦄 ICCV-2021最佳论文,swin transformer当之无愧。
这里简单记录下对swin transformer的原理学习(实验不讲),后面细看论文后再继续补充。
介绍:
swin transformer可作为视觉任务的一个通用backbone。transformer在nlp领域取得了巨大成功。那么,将其应用到cv, 主要有两点挑战: 1.图像的像素点巨多,当前序列输入transformer计算量巨大。 2.图像中有各种大小的实体对象,而在文本种是没有这种现象的。 成就: swin transformer在图像分类、目标检测、语义分割上SOTA。以及后面研究者利用swin的思想刷榜各类cv任务。
简单说说我的看法:
?swin transformer主要是通过将原图像切成多个local window,每个local window大小为:7x7,分别在每个local window内做自注意力。然后通过shift window来让不同local window之间能够注意力交互,已达到全局注意力类似的效果,这种做法能够显著减少注意力。同时在计算local window内的自注意力时,还提出了一种mask机制用来高效计算注意力。 引入Patch Meraging达到和CNN类似的下采样效果(多尺度的变换),更适合于密集型视觉任务的场景。
?而local window这种计算自注意力能够比一般在整张特征图上做自注意力省多少呢?论文给的这两种注意力的计算复杂度如下公式,可以看到差别是M2和(hw)2,差别还是蛮大的,毕竟在论文里M是7。 ?那这是怎么计算来的呢,我们来瞧瞧:
简单介绍下swin transformer的主要构件,以及前向传播的过程:
??如上述总体架构图所示是一个swin transformer的Tiny版本(C=96)。具体维度变化可看我红色框的标注。从头到尾的维度变换,类似CNN的思想:特征图的长宽减少,通道数增加(每步x2),这样就引入了多尺度的变换,更适合于密集型视觉任务的场景,不像ViT一样,从头到尾维度不变(常规的transformer block就这样)。
Patch Meraging:
下采样的过程主要是通过图中Patch Meraging的操作实现,如下图所示:
swin transformer block:
??swin transformer block有2种block,如总体架构图(b)所示。第一种是正常的在local window内分别做注意力计算,第二种是Shifted Window后做自注意力(但为提高效率,论文引入mask机制后真正移动的是特征图(窗口位置不变),通过torch.roll)。这两种block是一起使用的,总体架构图中可以看到,block的数量是偶数。
Shift Window:
Shift Window主要起到的作用是建模不同local window之间的交互,起到和全局注意力类似的效果: ??以上图为例,一张图被切成4块,下一步移动窗口(步长为窗口一半,这里是2)。这样得到了9个窗口,因为attention是在每个窗口内做的,这一下子计算量不就涨了一倍吗? 我giao! 所以作者搞了个mask操作,继续保持4个窗口,计算量不变,也能分别计算各窗口的注意力。
??实际上的shift window是通过对特征图移位,shift window将相同窗口内的部分标注相同序号。并给Attention设置mask来间接实现的。能在保持原有的window个数下,最后的计算结果等价。 ??具体来说,在上图中,先对特征图上下roll一个单位(这里一个单位如A的大小2格,因为移动一个单位,所以图中分为AC两部分即可),左右roll一个单位,毕竟整体窗口向右下角移动半个窗口大小,那移动两次,经过两次shift window block就移回原样了。然后4个窗口分别采用不同的mask模版,这样就能单独计算各窗口内的不同不同的注意力了。计算完恢复特征图原样。这样不就达到目的的吗,哟哟~~ ? ? ? ? ? 参考: [1] 图解Swin Transformer [2] 李沐:Swin Transformer论文精读【论文精读】
|