Swin-Transformer的Attention Mask笔记

SwinTransformer采用局部窗口的自注意力机制,将全局特征图分解为多个局部窗口进行计算,通过这种方式减少计算复杂度并保持特征的有效性。为解决窗口偏移带来的计算复杂性增加问题,SwinTransformer引入了shift mask策略,确保只在有意义的相邻窗口间进行特征交互。

Swin Transformer中将原来全局特征图的自注意力转为求多个windows内的attention,得到局部windows的交互,然后再像CNN卷积一样的思路,通过windows之间交互来获取全局的交互,这样可以避免原transform应用到视觉领域时遇到的问题:1、计算量巨大;2、特征变化大。
其核心设计久是shifted window,如下图所示,这种偏移方式能够获取不同windows的交互,但是也带来了问题,即4原来的4个windows变成了9个,这相当于由在4个windows内应用transformer变成了在9个windows内应用transformer,计算就变得复杂很多。为了简化这个计算,swin-transformer的实现中通过shift mask,使得只需要像原来一样在4个transformer就能完成全部9个windows的局部交互计算。
在这里插入图片描述
实现是是这样的,首先,将特征图通过torch.roll函数将其变换,让9个windows凑成4个windows,然后像正常求4个windowns内部的交互那样执行transformer,到了Q、K的转置相乘得到系数矩阵的时候,需要添加我们的mask,让一部分特征无效(原因是我们将特征图做了torch.roll变换,原来有的9个windows除了4是本来就相邻的,彼此交互有意义,其它的非相邻部分求他们的交互是没道理的,所以让其他部分不生效)。
具体如下:

首先我们对Shift Window后的每个窗口都给上index,并且做一个roll操作(window_size=2, shift_size=-1)

在这里插入图片描述

我们希望在计算Attention的时候,让具有相同index QK进行计算,而

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值