swin transformer

滑动窗口的空间视觉transformer

Abstract

  • 计算复杂度是随着图片大小成线性增长的,而不是平方
  • 使用CNN,融合多尺度的特征,可以很好的迁移到下游任务中。

引言

  • VIT有16倍的下采样率成每一个patch,虽然vit有全局注意力,但是对多尺度特征的把握能力就会相对差一点。
  • swin 只在局部区域的小窗口内计算attention,这个计算复杂度只和小窗口的数量成线性关系,即使局部注意力也是完全够用的,因为目标只会出现在相近的位置上。
  • cnn最能提升感受野的位置是pooling操作,对应的 swin transformer也提出了类似的pooling操作,patch merging ,把小patch合成大patch
  • 有了多尺度的特征,一起输入到FPN就能做检测了,一起输入到Unet就能做分割了。
  • swin的基本计算单元是patch,中型计算单元是window,一个window有7*7 = 49个patch(图2只是示意图,与设置不同)
  • 使用图2 shift的方式,做窗口和窗口之间的互动。

背景:

方法:

  • 前向结构(图3)
  • 输入 224*224*3
  • path的尺寸是4*4 ,patch_partition 分割成56*56*48  -> ,56代表224/4,  48代表着4*4*3 因为是3个通道
  • liner-embeding ,调整输入的通道数,转变为transformer可以接受的尺寸变成56*56*96 ,在transformer block中56*56拉直成3136变成了序列长度,这个在代码里使用一次卷积操作。
  • transformer的内在特性,输出维度和输入维度相等,所以一阶段stage1的输出还是56*56*96,由于需要提取多尺度的信息,所以需要一系列层级化的transformer,而且还需要一个类似“池化”的操作。
  • 第二阶段一开始,patch merging,假设下采样两倍,输入张量的维度是hwc 那么输出维度就是h/2 w/2 4c (将这新生成的4个张量在c的维度上拼接起来),同时为了和resnet等cnn模型保持一致:这些cnn模型在pooling之后通道数都会翻倍,而不是变成4倍。所以又使用了1*1的卷积将通道数压了下来,变成了h/2 w/2 2c
  • 二阶段结束(二阶段的输入和输入尺寸一致),尺寸变成了28*28*192
  • 三阶段结束 14*14*384
  • 四阶段结束 7*7*768
  • Layer normalizaion

3.2 基于移动窗口的自注意力

  • image会被平均的划分为非重叠的窗口window),以56*56*96为例,window不是最小的计算单元,每一个window中还有m*m个patch(m = 7) ,那么一共会有56/7 = 8*8个windows
  • 计算复杂度
  • hwc向量图会与c*c的向量相乘生成 QKV3个向量(每一个权重矩阵都是hwc),那么这会产生3h*w*c^2这么大的计算复杂度。 Q*K 这一步产生了(hw)^2 *c,得到子注意力矩阵A,A的维度是hw*hw结果A再乘V 产生了(hw)^2 *c,最后经过投射层(proj),输入hwc,成c*c,输出hwc,产生h*w*c^2,相加的结果是公式(1)
  • 在公式2中 ,(1)中h变成了h/4 ,(1)中的w变成了w/4 , 公式1还需要乘总窗口数:h/M * w/M ,就得到了(2)
  • 移动窗口
  • 为了做到窗口和窗口的通信,在公式(3)中每次要先做一个窗口的多头注意力,然后再做一次基于移动窗口的多头注意力,以此来做到窗口和窗口之间的通信,具体的流程见图(3)中的(b)。同时这也是(a) architecture中swin transformer block总是偶数的原因。
  • mask化的移动窗口方式
  • 移动窗口后的的window不一样大了,每个window中拥有的patch的数量不一样多,无法压缩成一个batch,简单粗暴的方法是把每个小window的四周都pad 0,这样得到了9个窗口却提高了计算复杂度。
  • 解决方法是使用图4的循环移位,首先还是得到四个窗口,首先确定了计算复杂度,但是有些不相关的计算复杂度该如何处理呢。
  • 43:00
  • 相对位置编码
  • 40:00,相对位置编码(x,y)代表了一种索引组合模式,决定了其他色块在当前参考色块的左边(x = 1) ,右边(x = -1) ,上边(y=1),下边(y=-1)。

实验

  • 在Regular ImageNet-1K trained models的表格中,与ViT相比有很大提升(由于vit没有用好用的数据增强,而且缺少偏执归纳),与DeiT相比,略有提升,由于DeiT用了更好的数据增强和模型蒸馏。与Efficient Net相比,虽然精度略有优势,但是EffNet输入的是更大的图片,所以EffNet略有优势,同时对比Swin-B和EffNet-B7的模型参数量和计算复杂度,EffNet优势就更为明显。
  • 在(a) various frameworks这个表格中,将主流检测网络中的骨干网络,有resnet-50替换成为了swin-T(两者参数量接近),发现swin全方位碾压res系列
  • 在消融实验表格 table4中,发现相对位置编码和移位窗口这两种技术在分类任务上,相对于其basline模型没有特别大的提升,反而在检测和分割这两个密集预测的任务上提升明显。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值