SW-MSA

news/2024/11/8 9:49:39/

目录

    • SW-MSA
        • Shifted-Window
        • 什么是循环移位
        • 重新分割图片并计算Attention
        • 如何mask

SW-MSA

Shifted-Window

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aRUXuUjC-1640771931662)(images/20210523200920882-1640684269785.png)]

​ 如上图所示,每一个小块叫做一个patch,每一个深色方块框起来的叫一个local window,在每一个local window中计算self-attention。如果是只计算一次self-attention,每个local window之间是孤立的,相互之间不会产生联系,但是实际上所有的local window组成了一张图片,他们之间应该有关联才对。所以们引入了shifted-window进行了第二次self-attention。
​ 如下图所示,分割图片的window向右向下进行了平移,将图片分割成了Layer1+1所示的形状。 平移的像素为 向 左 上 角 移 动 ( ( ⌊ M 2 ⌋ , ⌊ M 2 ⌋ ) ) 个 ( 2 × 2 ) 的 像 素 块 向左上角移动(\left ( \left \lfloor \frac{M}{2} \right \rfloor , \left \lfloor \frac{M}{2} \right \rfloor \right ))个(2 \times 2)的像素块 ((2M,2M))(2×2) M M M指的是窗口的大小。

分割完之后有进行了cyclic shift(循环移位)。先循环上移,在循环左移,最后变成如下所示的上层图片

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NdXnvK9j-1640771931663)(images/xunhuanweiyi.jpg)]

什么是循环移位

循环移位就是把数值变成二进制,然后循环移动的过程;换句话说,循环移位就是将移出的低位放到该数的高位(循环右移)或把移出的高位放到该数的低位(循环左移),左移,和右移动都是对整数进行的操作,在Win32控制台应用程序中,整形占4Byte节32bit。

循环左移的过程:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kzR1m97M-1640771931663)(images/20180430145117569-1640747970730.png)]

图像上也是如此,将移出的像素点放到图像的对立侧。

重新分割图片并计算Attention

​ 重新将图片分割成2*2的local window,窗口大小还是原来的,这样每个窗口里面都会是之前窗口的交叉。在对每个窗口计算Attention,就会形成不同窗口之间的connection。

​ 但是会形成一个新的问题,一个新形成的local window在图片上不一定是连续的。比如上面的分隔,$A、B、C $和剩下的区域,都是单独的连续小区域。所以在计算Attention的时候,只需要关注各自连续区域的内容,而其他的地方则需要mask掉。

如何mask

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xhDX6krH-1640771931664)(images/1640766853903.png)]

​ 如上图所示,是经过循环位移后重新分割图像。相同数字表示连续的区域。当我们对local window计算Attention的时候,只需要将不同数字mask即可。我们以最后一个窗口为例,解释如何mask。具体操作如下:

首先将local window展平成 N 维 N维 N向量:

然后将展平的向量和向量的转置,扩展成 N ∗ N ( 这 里 是 16 ∗ 16 ) N*N(这里是16*16) NN(1616)的矩阵:

然后,两个矩阵对应位置相减得到:

​ 其中 ∗ * 代表不为0的值。

​ 按照每行为一个单位看,第一行代表第一个元素应该和哪些元素进行Attention,为0则计算,不为0则mask掉,其他行也是如此。

​ 这样计算那就是 S W − M S A SW-MSA SWMSA.


http://www.ppmy.cn/news/764483.html

相关文章

2021-10-26 MSA (测量系统分析)

1、什么是MSA?MSA是Measure System analyse的第一个字母的缩写。 2、为什么叫测量系统而不是测量工具或测量仪器?因为影响测量结果的因素除了所使用的仪器外,还包括测量的标准、操作人员的使用方法、读数误差、夹具的松紧、环境温度等综合因…

免root卸载MIUI中在通知栏中推送广告的应用——msa

msa的包名是com.miui.systemAdSolution,位于/system/app/SystemAdSolution,具有以下权限 由此可以看出这个程序具有非常大的权限,可以在后台自动更新,而且能够获得用户的隐私来精确推送广告。 如果是root用户,直接删除即可。对于非root用户,可以使用adb命令来删除。 …

Python3在Windows上设置环境变量方法

Python3在Windows上设置环境变量方法,在环境变量中添加Python目录: 在命令提示框中(cmd) : 输入 path%path%;C:\Python 按下"Enter"。 注意: C:\Python 是Python的安装目录。 也可以通过以下方式设置: 右键点击"计算机&q…

Java中一个类可以继承多个类吗?揭秘多重继承的秘密!

大家好,我是你们的小米!今天,我们来聊聊Java中一个备受争议的话题——"一个类可以继承多个类吗?"这是一个让许多Java初学者困惑的问题,也是一个常常被问及的热门话题。那么,到底Java中是否允许一…

telnet连接,报“不能打开到主机的连接,在端口23:连接失败”

检查ip是否ping通 检查系统属性–>远程桌面是否勾选 运行services.msc->打开telnet->启动类型:自动->服务状态:启动->应用->确定

正在连接 127.0.0.1:20880 无法打开到主机的连接。 在端口 23: 连接失败

当我们想访问dubbo接口时,会用到telnet方法, 运行 telnet 127.0.0.1:20880 会报错 原因是 ip与端口间不要加符号 解决办法: 去掉冒号,用空格隔开即可 telnet 127.0.0.1 20880

无法打开到主机的连接。 在端口 23: 连接失败(Windows10)

telnet 127.0.0.1 9092 (地址和端口中间是空格不是冒号) telnet 127.0.0.1 9092 (地址和端口中间是空格不是冒号) telnet 127.0.0.1 9092 (地址和端口中间是空格不是冒号) 重要…

telnet出现端口23连接失败解决办法

一、检查一遍: 1.控制管理器程序里只有telnet客服端,没有服务端 2.我的电脑–管理–服务里没有服务端 二、步骤: 1.先勾选上telnet客户端 2.网站下载telnet服务端http://www.goodtechsys.com 3.安装下载好的telnet,进我的电脑–管…