论文笔记:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows

2023-11-20

cvpr2021

0 abstract

  • Transformer 从NLP迁移到CV,会遇到两个挑战
    • 语义物体(人、车。。。)的尺寸有大有小
    • 如果是像素级别的Transformer,那么resolution太大
  • 为了解决上述的两个挑战,提出了swin transformer
    • 将self-attention约束在移动窗口内部的各个pixel
    • 同时也有cross-window connection
    • ——>swin transformer可以作为通用cv任务的backbone
  • 层级结构可以更好地在不同尺度下建模
  • 同时对于图像大小来说,计算复杂度是线性的

1 Introduction

从论文introduction中的两个图来进行介绍:

1.1 和ViT的对比

 机器学习笔记:ViT (论文 An Image Is Worth 16X16 Words: Transformers for Image Recognition at Scale)_UQI-LIUWJ的博客-CSDN博客

  •  Vit 中,图片是分成16*16的patch组成的,然后将patch组成序列扔给Transformer。
    • 换言之,ViT是16倍下采样。每一层都是16倍下采样
    • 也就是说,自始至终ViT中patch代表的尺寸是一样的,都是16*16的像素
  • 而CNN(及其变体)之所以在很多cv任务中表现很好,是因为他们通过池化操作,可以获得不同的感受野,也即可以抓住物体不同尺寸的特征。
    • 在很多CV下游任务,尤其是像素密集型的任务(检测、分割等),多尺度信息是很重要的(比如U-Net)
    • ViT虽然使用了attention,但是它的尺寸一致是patch级别的attention,自注意力一直是全局注意力
      • ——>不会得到多尺寸的attention结果,这个会在一定程度上影响下游任务的表现
  • 于此同时,随着图像尺寸的增加,patch的数量是平方倍的增长
    • \frac{n*n}{4*4} \rightarrow \frac{(2n)*(2n)}{4*4}
    • ——>对于很大的图,或者像素点很密集的图,使用ViT不一定可行
  •  于是作者提出了swin transformer
    • 只在小窗口内进行自注意力(而不是在整张图中算自注意力)
      • ——>减少了序列的长度
    • 和图像尺寸成线性关系
      • ——>图片大小增大x倍,窗口的数量增加x倍,计算量也只增加x倍
      • ——>相比于ViT,能更好地作用在大图中
  • swin transformer 利用的性质是图像的locality
    • ——>即语义相近的物体大多在很近的区域内
    • ——>使用全局的attention是有点浪费的
  • swin transformer 中的patch mergeing 类似于CNN中池化操作
    • 后一层的一个大patch可以包含上一层几个小patch的内容
    • ——>有了多尺度的信息

 1.2 Swin Transformer中的window

  •  红色的框是一个窗口(在swin transformer中是7*7个patch一个窗口,图中用4*4表示)
  • shift window的操作可以看作是窗口整体向右下角移动(图中是向右下角移动两个patch)
    • ——>这样窗口和窗口之间就有交互的(cross-window connection)
    • ——>如果不进行shift window的话,不管垒几层,每次只是在小窗口里面进行self-attention,那么一个patch永远看不到其他patch的信息
      • ——>这样就是孤立的自注意力,没有全局信息
    • ——>通过patch merging(swin transformer中的上采样),每一个patch的感受野已经很大了。再加上shift window的话,最后几层一个窗口内包含的信息接近于全局注意力了。

2 模型部分

2.1 整体模型

 (暂时将swin Transformer看成一个黑盒)

注意3(b)的两个窗口加起来才是一个swin-Transformer的基本单元【顺序不能颠倒】

——>3(a)中的数量都是偶数也是因为需要1+1搭配起来使用

2.2 window transformer VS 传统 transformer

        第一个式子是mulit-head self-attention的计算复杂度,第二个式子是window-multi-head self-attention的计算复杂度

MSA复杂度的推导:

对W-MSA来说,此时MSA公式中的h和w都是M=\frac{h}{4}=\frac{\omega}{4}

代入,有:论文中的式子 

2.3 shift window transformer

  • 基于窗口(在窗口内的transformer)减少了计算量,但是此时窗口之间没有通信
    • —>这会限制模型的学习能力。我们需要某种方式,让窗口之间互相通信
    • —>所以我们需要移动窗口,Transformer先做窗口移动,再捕捉窗口

类似于1.2中所说的那样,向右下方平移

但现在还有另外一个问题:此时我们不仅窗口数从4个变成了9个,而且每个窗口的大小也不一样。

一种方法是我们对每个不足4*4的窗口向外进行补0的padding。但是这样的话,虽然每个窗口的大小一样了,但是窗口数还是变多了。变相地增加了复杂度。

论文中使用的方法是,再做一次移位(图中的cyclic shift部分)

将窗口平移后,“不规则”的A,B,C部分,补到对应的位置,这样就还是4个窗口——>计算复杂度依旧固定

2.3.1 Masked MSA 

        但是这样操作又有了一个问题: 移动之后的元素是从很“远”的地方搬过来的,讲道理和原先的那一块“不规则”部分是没有多少联系的——>这两块之间是不应该有attention权重的【比如C和D,B和E】

        论文中使用了掩码mask的方式进行处理

  • 对不需要循环移位的部分,MASK如下图Windows0所示(不需要MASK)
  • BE情况——>window1(右上角)
  • CD情况——>window2(左下角)
  • AF情况——>window3(右下角)

计算好的attention加上这个MASK,在经过SOFTMAX。那么不应该有关联的两块之间的权重就会非常的小

我们举个例子,来推导一下window2是怎么得到的(其他几个类似)

上图是经过循环移位后得到的图,图的大小为14*14,每个窗口的大小为7*7,其中数字0~8用来区分不同的区域。

Window2相当于是3和6组成的窗口对应的MASK

3号和6号区域所在的窗口内有49个patch,每个patch都是一个向量,如果现在把这个窗口拉直(一行接着一行),就变成了下图的矩阵。矩阵大小为49*1,一共有4*7=28个3号位元素,有3*7=21个6号位元素,每个向量的维度是C。

这里的3不是数值,而是指的是来自3号位的数字 

self-attention就是和自己的转置(如下)进行矩阵相乘

 

  

self-attention的结果如下

图中3&3,6&6的部分是应该有attention的,但是3&6的部分是不应该有attention的

所以mask也就如window2画的那样了 

 2.3.2 再移回去

        当然,做完mask之后,还是需要把移过来的部分再移回去的。(要不然图片就相当于一直在向右下角移动)

2.4 四种swin Transformer的配置

tiny/small/basic/large

2.5 相关位置编码

        假设已经将特征图分成一个一个的window了,我们在计算attention之前,需要给每个window内部的位置进行位置编码

B 相关位置编码

每个轴的相关位置取值范围是[-M+1,M-1]

【左上角(0,0)和右下角(M-1,M-1)之间的相对位置编码为(M-1,M-1)和(-M+1,-M+1)】

所以我们先取\hat{B} \in R^{(2M-1) \times (2M-1)},再从中取B

3 实验结果

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

论文笔记:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows 的相关文章

随机推荐

  • 利用云原生数仓 Databend 构建 MySQL 的归档分析服务

    MySQL 常用 OLTP 业务环境 一般会使用比较好的硬件资源来提供对外服务 现在 MySQL 数据对外提供的数据动不动好几个 T 也是正常的 在很多业务中 数据有较强的生命周期 在线一段时间后 可能就是失去业务意义 如 某个业务下线 业
  • C语言通讯录

    主要知识 结构体 枚举 指针 递归 冒泡排序等 文章目录 一 前言 1 菜单 2 结构体创建 3 初始化通讯录 4 增加联系人 4 删除联系人 5 修改联系人信息 6 搜索联系人 7 显示联系人 8 联系人排序 三 代码展示 contect
  • 单片机FLASH操作

    FLASH 操作 查看程序已经占用的FLASH的扇区 剩余的扇区就是可以操作而不会使程序发生错乱的区域 找到listing文件夹下面的 map文件 搜索Memory Map of the image 查看占用的内存 起始地址是 0x8000
  • kafka数据丢包原因及解决方案

    数据丢失是一件非常严重的事情事 针对数据丢失的问题我们需要有明确的思路来确定问题所在 针对这段时间的总结 我个人面对kafka 数据丢失问题的解决思路如下 是否真正的存在数据丢失问题 比如有很多时候可能是其他同事操作了测试环境 所以首先确保
  • VGGNet网络详解与模型搭建

    文章目录 1 模型介绍 2 模型结构 3 模型特性 4 Pytorch模型搭建代码 1 模型介绍 VGGNet是由牛津大学视觉几何小组 Visual Geometry Group VGG 提出的一种深层卷积网络结构 他们以7 32 的错误率
  • IIC UART SPI通信协议介绍

    UART 通用一部收发器 是一种通用的串行 异步通信总线该总线有两条数据线 可以实现全双工的发送和接收 在嵌入式系统中常用于主机与辅助设备之间的通信 波特率 波特率用于描述UART通信时的通信速度 单位为bps bit per second
  • 值得学习与推荐的c/c++框架和函数库

    这几天不上班 翻翻Evernote中记录的一些笔记 刚好有时间把记录的一些好玩链接转载一下 这篇文章里提到的很多库都用过 尤其是图像处理相关库 尤其是opencv及cximage 当时做图像算法时 很多算法就是从上面找来 然后自己修改的 比
  • 2023年咸阳市职业院校技能大赛网络搭建与应用赛项《网络搭建及安全部署竞赛报告单》

    2023年咸阳市职业院校技能大赛 网络搭建与应用赛项 网络搭建及安全部署竞赛报告单 二 交换配置与调试 90分 一 1 按照题上要求把填写下表 设备名称
  • 关于新手小白首次使用Git克隆仓库遇到的问题

    目录 前言 遇到的问题 1 Failed to connect to git hub com port 443 Timed out 解决方法 2 Could not read from remote repository 解决方法 总结 前
  • 抽奖的功能实现html,css,js

    效果图 代码实现
  • 2022年第十四届蓝桥杯模拟赛【核酸日期】C语言详解

    目录 题目 思路 代码实现 题目 核酸日期 问题描述 如果周一做核酸 周二显示核酸天数为 1 天 周三显示 2 天 以此类推 周六显示 5 天 周日显示 6 天 小蓝在某一天做了一次核酸 请问他的核酸显示为几天 已知做核酸和查看核酸不是在同
  • 顺序表

    线性表的顺序存储结构类型描述 define MaxSize 50 静态分配 typedef struct ElemType data MaxSize int length SqList define InitSize 100 动态分配 ty
  • FreeFileSync怎么用

    FreeFileSync自动镜像备份教程 自动同步备份软件 FreeFileSync 开源免费 有中文 我一般使用移动硬盘备份电脑数据 下载链接 https freefilesync org download php 1 启动FreeFil
  • window下Stable Diffusion一键安装

    轻松安装Stable Diffusion 一键搞定电脑Windows安装 AI绘图技术是当今最火热的技术之一 各种AI绘画软件也层出不穷 其中Stable Diffusion便是其中一款非常重要的 一 电脑Windows安装Stable D
  • ubuntu 16.04安装telnet 和 ssh2

    1 首先查看telnet运行状态 netstat a grep telnet 输出为空 表示没有开启该服务 2 安装openbsd inetd apt get install openbsd inetd 3 安装telnetd apt ge
  • ACE_Message_Block类 使用小结

    ACE Message Block用来封装 网络主机之间需要传输的数据 并能很好的管理动态内存分配 每个ACE Message Block对象都包括一个 带有引用计数 的ACE Da ta Block指针成员 该成员指向实际的数据 如果多个
  • python3+scrapy简单爬虫入门

    安装python 1 到官网下载选择对应版本进行安装 https www python org downloads release python 364 如果使用压缩包的话还需要配置环境变量 安装包见下图 2 安装完后 在cmd命令行下输入
  • mui ajax 下拉,mui下拉菜单

    mui下拉菜单 var page 1 最大页数 var maxPage Number MAX VALUE mui init pullRefresh container pullrefresh up auto true style circl
  • 最快的公共dns服务器_如何使用Google公共DNS服务器?

    最快的公共dns服务器 Google is a huge company that provides paid and free services It mainly operates in the IT and internet area
  • 论文笔记:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows

    cvpr2021 0 abstract Transformer 从NLP迁移到CV 会遇到两个挑战 语义物体 人 车 的尺寸有大有小 如果是像素级别的Transformer 那么resolution太大 为了解决上述的两个挑战 提出了swi