赞
踩
挑战:物体尺寸差异和高分辨率
Transformer可以用作一个通用的网络,而不像ViT那样只用于分类。
如上图,ViT全局建模,始终处理的是16倍下采样之后的特征,不适合密集预测型任务。
Swin Transformer为了减少序列长度,在小窗口内做自注意力,用了locality的归纳偏置,节省资源。patch merging,相邻小patch合成大patch,类似池化。
如上图,在 l 层加上shift操作,窗口之间能进行交互,从而有全局自注意力的效果。
Stage 1
输入X:224×224×3
patch:4×4×3=48
patch-num:56×56
X=56×56×48
C=96
X = 56×56×96 = 3136×96
序列长度太长,通过Swin Transformer Block在窗口内做自注意力,最后输出尺寸不变,如下图所示:
输出56×56×96
Stage 2
输入56×56×96
patch merging:cnn下采样一个特征图的效果
输出28×28×192
Stage 3
输入28×28×192
patch merging
输出14×14×384
Stage 4
输入14×14×384
patch merging
输出7×7×768
最后全局池化拉成1×768
假设尺寸是56×56×96
patch大小是7×7
一共有8×8个窗口,分别算自注意力。
多头自注意力的计算复杂度如公式1,输入图片尺寸是hw×C(C是向量长度),输出q、k、v,复杂度是3hwC2;q和k相乘,复杂度是(hw)2C;softmax后再与v相乘,复杂度是(hw)2C;得到的结果最后乘以映射权重矩阵C×C,复杂度是hwC2。
基于窗口的同理,每个窗口大小是M×M(M=7),1式中的hw=M2,总窗口数是hw/M2,故而窗口数乘以1式得2式。
图(b)所示得两个连续transformer的计算公式如下,先进行基于窗口的自注意力,然后移动窗口再计算自注意力。
对于移动窗口的图,可以通过padding0的方式对相同尺寸的窗口做自注意力,但效率不高;而cyclic shift通过如图所示的拼接,依然是划分成4×4个窗口,然后对包含不连续信息的窗口做masked MSA,如下所示,67是C,8是A,25是B,在对左下角的窗口做MSA时,会累加一个如右图矩阵模板,softmax后变为0。
同时还提出使用相对位置编码。
在传统的滑动窗口方法中。不同的查询q和q’ 将具有不同的相邻窗口,该窗口指示不同的key集。计算对内存访问不友好,因此实际速度不好。
在Swin Transformer中使用的非重叠窗口方法中,例如,在同一红色窗口中的不同查询,例如q和q’,将共享相同的key集。
官方代码库:https://github.com/microsoft/Swin-Transformer
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。