论文阅读:CVPR2021 | Swin Transformer: Hierarchical Vision Transformer using Shifted Windows

本文主要是介绍论文阅读:CVPR2021 | Swin Transformer: Hierarchical Vision Transformer using Shifted Windows,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1、前言
  • 2、Introduction
  • 3、Method
    • 3.1、Overall Architecture
    • Swin Transformer block
    • 3.2、Shifted Window based Self-Attention
    • Self-attention in non-overlapped windows
    • Shifted window partitioning in successive blocks
    • Relative position bias
  • 总结


1、前言

本文提出了一种新的视觉Transformer,称为Swin Transformer,它可以很好地作为计算机视觉的通用主干。将Transformer从语言转换为视觉的挑战来自这两个领域之间的差异,例如视觉实体的大小差异很大,图像中的像素与文本中的文字相比分辨率较高。为了解决这些差异,我们提出了一种hierarchical Transformer,其表示是通过移位窗口来计算的。移位窗口方案通过将自注意计算限制到非重叠的局部窗口,同时还允许跨窗口连接,带来了更高的效率。这种分层结构具有在不同尺度上建模的灵活性,并且具有关于图像大小的线性计算复杂度。Swin Transformer的这些特性使其与广泛的视觉任务兼容,包括图像分类(ImageNet-1K上的86.4 TOP-1准确率)和密集预测任务,如目标检测(COCO TEST-DEV上的58.7 box AP和51.1 MASK AP)和语义分割(ADE20K Val上的53.5 mIou)。其性能大大超过了之前最先进的产品,COCO上的+2.7box AP和+2.6 MASK AP,以及ADE20K上的+3.2mIou,显示了基于Transformer的机型作为视觉主干的潜力。

2、Introduction

自然语言处理(NLP)中网络体系结构的演变走了一条不同的道路,今天流行的体系结构是Transformer。Transformer专为序列建模和转换任务而设计,以其对数据中的远程依赖关系进行建模而著称。它在语言领域的巨大成功促使研究人员研究它对计算机视觉的适应性,最近它在某些任务上展示了令人振奋的结果,特别是图像分类和联合视觉-语言建模。

在本文中,作者试图扩展Transformer的适用性,使其可以作为计算机视觉的通用主干,就像它在NLP中所做的那样,也可以像CNNs在视觉中所做的那样。作者观察到,将其在语言领域的高性能转换到视觉领域的重大挑战可以用这两种模式之间的差异来解释。这些不同之处之一涉及到规模。与作为语言Transformer中处理的基本元素的单词标记不同,视觉元素在尺度上可以有很大的变化,这是在诸如物体检测之类的任务中引起注意的问题。在现有的基于Transformer的模型中,tokens都是固定比例的,这一特性不适合这些视觉应用。另一个不同之处在于,与文本段落中的文字相比,图像中像素的分辨率要高得多。存在许多视觉任务,如语义分割,需要在像素级别进行密集预测,这对于高分辨率图像上的Transformer来说是很困难的,因为它的self-attention的计算复杂度是图像大小的平方。为了克服这些问题,我们提出了一种通用的Transformer骨干网,称为Swin Transformer,它构造了分层的特征映射,并且计算复杂度与图像大小成线性关系。如图1(A)所示,Swin Transformer通过从小块(灰色轮廓)开始,逐渐合并更深的Transformer层中的相邻块来构建分层表示。有了这些分层的特征图,Swin Transformer模型可以方便地利用先进的技术进行密集预测,如特征金字塔网络(FPN)或U-Net。线性计算复杂度是通过在分割图像(红色轮廓)的非重叠窗口内局部计算自我关注来实现的。每个窗口中的补丁数量是固定的,因此复杂度与图像大小成线性关系。这些优点使得Swin Transformer适合作为各种视觉任务的通用主干,而不是以前基于Transformer的架构,后者生成单一分辨率的特征地图,并且具有二次复杂度。
在这里插入图片描述
Swin Transformer的一个关键设计元素是在连续的 self-attention层之间移动窗口分区,如图2所示。移动的窗口连接了前一层的窗口,提供了它们之间的连接,显著增强了建模能力(参见表4)。该策略在实际延迟方面也是有效的:一个窗口内的所有query patches共享相同的key 集,这便于硬件中的内存访问。相反,较早基于滑动窗口的self-attention方法由于不同query 像素的不同键集而在一般硬件上受到低等待时间的影响。我们的实验表明,所提出的移位窗口方法比传统的移位窗口方法具有更低的时延。
在这里插入图片描述

图2.在建议的Swin Transformer架构中,展示了用于计算self-attention的移位窗口方法。在l层(左),采用规则的窗口划分方案,在每个窗口内计算self-attention。在下一层l+1(右)中,窗口分区被移位,从而产生新窗口。新窗口中的self-attention计算跨越了层l中先前窗口的边界,从而提供了它们之间的连接

3、Method

3.1、Overall Architecture

图3显示了Swin Transformer体系结构的概述,其中演示了微型版本(Swin-T)。它首先通过patch分割模块(如VIT)将输入的RGB图像分割成不重叠的patch。每个patch都被视为一个“token”,其特征被设置为原始像素RGB值的串联。在我们的实现中,我们使用了4×4的patch大小,因此每个patch的特征维数是4×4×3=48。将线性嵌入层应用于该原始值特征以将其投影到任意维度(表示为C)。
在这里插入图片描述

图3.(A)Swin Transformer(Swin-T)的架构;(B)两个连续的Swin Transformer块(用公表示)。W-MSA和SW-MSA分别是具有规则和移位窗口配置的多头自注意模块。

在这些patch token上应用了经过修改的自我self-attention的几个Transformer块(Swin Transformer块)。Transformer patch保持token数(H/4×W/4),与线性嵌入一起称为“阶段1”。

为了产生分层表示,随着网络的深入,通过patch合并层来减少token的数量。第一个patch合并层将每组2×2相邻面片的特征进行拼接,并在4C维拼接的特征上应用线性层。这将令牌数减少2×2=4的倍数(分辨率的2倍下采样),并且输出维度被设置为2C。然后应用Swin Transformer块进行特征变换,分辨率保持为H/8×W/8。这第一个块的拼接和特征变换称为“Stage2”。该过程重复两次,分别为“阶段3”和“阶段4”,输出分辨率分别为H/16×W/16和H/32×W/32。这些阶段共同产生具有与典型卷积网络(例如,VGG和ResNet)相同的特征映射分辨率的分层表示。因此,该体系结构可以方便地取代现有方法中的骨干网络,用于各种视觉任务。

Swin Transformer block

Swin Transformer是通过将Transformer模块中的multi-head self attention(MSA)模块替换为基于移位窗口的模块(在第3.2节中描述)而构建的,其他层保持不变。如图3(b)所示,Swin Transformer模块由一个基于移位窗口的MSA模块和一个中间带有Gelu非线性的2层MLP组成。在每个MSA模块和每个MLP之前应用LayerNorm(LN)层,并且在每个模块之后应用残差连接。

3.2、Shifted Window based Self-Attention

标准Transformer体系结构及其用于图像分类的适配都进行self-attention注意,其中计算token和所有其他token之间的关系。全局计算导致了关于token数量的二次方复杂性,使得它不适合于许多需要大量token集来进行密集预测或表示高分辨率图像的视觉问题。

Self-attention in non-overlapped windows

为了有效地建模,我们建议在局部窗口内计算self-attention注意。窗口被布置成以不重叠的方式均匀地分割图像。假设每个窗口包含M×M个patches,则全局MSA模块和基于h×w块图像的窗口的计算复杂度为:
在这里插入图片描述
其中,前者与patches 数量HW是平方的,后者在M固定时是线性的(默认情况下设置为7)。全局self-attention计算对于大型硬件来说通常是负担不起的,而基于窗口的自我注意是可伸缩的。

Shifted window partitioning in successive blocks

基于窗口的self-attention模块缺乏跨窗口的连接,这限制了其建模能力。为了在保持非重叠窗口计算效率的同时引入跨窗口连接,我们提出了一种移位窗口划分方法,该方法在连续的Swin Transformer块中交替使用两种划分结构。

如图2所示,第一个模块使用从左上角像素开始的常规窗口划分策略,将8×8特征图均匀划分为大小为4×4(M=4)的2×2个窗口。然后,下一模块通过将窗口从规则划分的窗口移位( ⌊ M 2 ⌋ \left \lfloor \frac{M}{2}\right \rfloor 2M ⌊ M 2 ⌋ \left \lfloor \frac{M}{2}\right \rfloor 2M)像素来采用从前一层的窗口移位的窗口配置。

Relative position bias

在计算self-attention时,遵循,在计算相似度时包括每个头部的相对位置偏差 B ∈ R M 2 × M 2 B\in \mathbb{R}^{M^{2}\times M^{2}} BRM2×M2
在这里插入图片描述

总结

在Vit的基础上,改进成分层transformer的。给我感觉像是CNN中从全连接进化到卷积网络一样。vit相当于粗暴的全连接,swim就有点cnn的感觉了。果然微软亚研的工作都是神仙级别的工作

这篇关于论文阅读:CVPR2021 | Swin Transformer: Hierarchical Vision Transformer using Shifted Windows的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/706573

相关文章

问题-windows-VPN不正确关闭导致网页打不开

为什么会发生这类事情呢? 主要原因是关机之前vpn没有关掉导致的。 至于为什么没关掉vpn会导致网页打不开,我猜测是因为vpn建立的链接没被更改。 正确关掉vpn的时候,会把ip链接断掉,如果你不正确关掉,ip链接没有断掉,此时你vpn又是没启动的,没有域名解析,所以就打不开网站。 你可以在打不开网页的时候,把vpn打开,你会发现网络又可以登录了。 方法一 注意:方法一虽然方便,但是可能会有

Windows/macOS/Linux 安装 Redis 和 Redis Desktop Manager 可视化工具

本文所有安装都在macOS High Sierra 10.13.4进行,Windows安装相对容易些,Linux安装与macOS类似,文中会做区分讲解 1. Redis安装 1.下载Redis https://redis.io/download 把下载的源码更名为redis-4.0.9-source,我喜欢跟maven、Tomcat放在一起,就放到/Users/zhan/Documents

Windows中,.net framework 3.5安装

安装.net framework,目前已知2种方法,如下: 一、在MSDN下载对应的安装包,安装,这种可能无法安装成功,概率很大,不成功使用第二种方法,基本上没问题。 二、win8/8.1/10 下安装 .net framework 3.5.1: 1. 打开 win8/8.1/10 安装盘(这里指系统安装镜像文件),提取 sources\sxs 文件夹到 X:\sources\sxs (X代

Windows 可变刷新率是什么?如何开启?

在现代计算设备中,显示屏的刷新率对用户体验起着至关重要的作用。随着显示技术的不断进步,固定刷新率显示器逐渐被支持可变刷新率(Variable Refresh Rate, VRR)技术的显示器所取代。 可变刷新率定义 可变刷新率是什么?可变刷新率(VRR)是一种显示技术,它允许显示器的刷新率动态调整,以匹配显卡输出的帧率。传统的显示器通常具有固定的刷新率(如60Hz、75Hz等),这意味着显示器

如何设置windows计划任务

如何设置windows计划任务 前言:在工作过程中写了一个python脚本,用于调用jira接口查询bug单数量,想要在本地定时任务执行,每天发送到钉钉群提醒,写下操作步骤用于记录。 1. 准备 Python 脚本 确保你的 Python 脚本已经保存到一个文件,比如 jira_reminder.py。 2. 创建批处理文件 为了方便任务计划程序运行 Python 脚本,创建一个批处理文

BD错误集锦1——[Hive]ERROR StatusLogger No log4j2 configuration file found. Using default configuration:

错误描述:在使用IDEA进行jdbc方式连接到hive数据仓库时,出现以下错误:                ERROR StatusLogger No log4j2 configuration file found. 问题原因:缺少log4j2.xml文件   <?xml version="1.0" encoding="UTF-8"?><Configuration><Appender

获取Windows系统版本号(转)

https://blog.csdn.net/sunflover454/article/details/51525179

博通5720 windows server 2003 32位网卡驱动和系统

driver for DELL R320 Broadcom 5720 Windows 2003 32bit 本人安装windows server 2003 网卡驱动成功!! 提供方便网盘下载地址博通5720网卡驱动 : http://pan.baidu.com/s/1GQWpw  windows server 2003 ghost 系统: http://pan

ssh在本地虚拟机中的应用——解决虚拟机中编写和阅读代码不方便问题的一个小技巧

虚拟机中编程小技巧分享——ssh的使用 事情的起因是这样的:前几天一位工程师过来我这边,他看到我在主机和虚拟机运行了两个vscode环境,不经意间提了句:“这么艰苦的环境写代码啊”。 后来我一想:确实。 我长时间以来都是直接在虚拟机里写的代码,但是毕竟是虚拟机嘛,有时候编辑器没那么流畅,在文件比较多的时候跳转很麻烦,容易卡住。因此,我当晚简单思考了一下,想到了一个可行的解决方法——即用ssh

Linux平台与Windows平台字节对齐(一)

记录时间:2014-10-20 20:31 今天白天在整理 winndows平台 + Arm平台的网络数据包。但期间由于经验不足,不了解两平台CPU架构的差距会影响到数据类型的大小,导致在工程非常紧急的时间里还浪费了很多宝贵的时间,鉴于问题的常见性 和 隐秘行,特此列出,以便能帮助需要帮助的人。 解决问题思路:在遇到网络交互数据不对时,可以从如下四方面去排除问题,通常只要使用这三种