Swin Transformer: Hierarchical Vision Transformer using Shifted Windows(ICCV2021)

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

Swin Transformer

  • 摘要
  • 引言
  • 方法
  • 实验

在这里插入图片描述

摘要

本文提出了一种新的Vision Transformer,称为Swin Transformer,可以作为计算机视觉领域的通用主干。将Transformer从NLP应用到CV会面临一些挑战,这些挑战主要来自两个方面:一个是尺度问题,视觉领域中的目标往往尺度差异很大(比如一张街景图像,里面的行人和汽车有大有小),而NLP中的Transformer并不需要考虑这个问题;另一个是图像分辨率高的问题,需要对其进行预处理缩小序列长度。针对这些挑战,作者提出了一种hierarchical transformer,其特征表示通过移动窗口(Shifted windows)计算得到。移动窗口设计一方面将自注意力计算限制在非重叠的局部窗口,序列长度大大降低,从而带来了更高的效率;另一方面shift操作可以让两个窗口之间实现信息交互,因此上下层之间就可以通过跨窗口连接,变相的达到一种全局建模的能力。这种层级式结构不仅非常灵活,可以提供各种尺度的特征信息,而且计算复杂度只会随着图像大小的变化进行线性增长,而不是平方级增长。Swin Transformer的这些特性,使其能够很好地被应用于计算机视觉的下游任务。

引言

在本文中,作者试图拓展Transformer的适用性,使其可以作为视觉领域的通用主干,不光在分类任务上,在检测、分割等其他任务上也能取得很好的效果。Transformer应用于视觉领域会面临两大挑战:(1)现有的基于Transformer的模型中,token都是固定维度的,这一特性并不适合视觉应用;(2)与句子中的单词相比,图像像素分辨率要高得多,对于许多视觉任务(如语义分割),需要在像素级上进行密集预测,而这对于Transformer来说是困难的,因为其自注意力的计算复杂度会达到图像大小的平方级。

在这里插入图片描述

为了克服上述挑战,作者提出了Swin Transformer。如上图(b)所示,ViT将图像分割成许多个16×16大小的patch,这些patch的尺寸从始至终都是固定的,虽然能达到全局建模的能力,但对多尺度特征的把握会相对弱一些。在目标检测和目标分割等下游任务中,多尺度特征至关重要。比如对于目标检测中的多尺度而言,应用最广的一个方法是Feature Pyramid Network(FPN),当有一个分层式的卷积神经网络,每一个卷积层出来的特征所具有的感受野是不一样的,因此能抓住物体不同尺寸的特征,从而能够很好地处理物体不同尺寸的问题。在ViT中,它产生的是单一尺寸且低分辨率的特征图,不适合处理密集预测型任务;而且它始终是在全局做自注意力计算,因此它的计算复杂度是以图像尺寸平方级的形式增长。上图(a)就是作者提出的Swin Transformer,它借鉴了很多卷积神经网络的设计理念和先验知识。比如为了减少序列长度,降低计算复杂度,Swin Transformer采取了在小窗口中计算自注意力,而不是像ViT一样在整图上进行计算,这样的话只要窗口大小是固定的,自注意力的计算复杂度就是固定的,整张图的计算复杂度就会跟图像大小成线性增长关系。Swin Transformer的这一计算方式其实就是借鉴了CNN中的locality这个归纳偏置,即利用了局部性的这个先验知识。同一个物体的不同部位或者语义相近的不同物体还是大概率会出现在相邻的地方,因此在小范围窗口中计算自注意力也是差不多够用的,全局计算自注意力对于视觉任务来说有点浪费资源。

对于多尺度特征,CNN之所以能够提取多尺度特征,主要在于池化操作,池化能够增大每一个卷积核看到的感受野,从而使得每一次池化后的特征能够抓住物体的不同尺寸。受此启发,Swin Transformer也提出了类似于池化的操作,叫做patch merging,就是把相邻的小patch合成一个大patch,合并后的大patch就能看到之前四个小patch看到的东西,从而增大了感受野,同时还能抓住多尺寸的特征。Swin Transformer的一个关键设计元素就是移动窗口操作,如下图所示。

在这里插入图片描述

图中的每一个灰色小方格都是一个4×4大小的小patch,每个红色的框是一个中型的计算单元(也就是一个窗口),在Swin Transformer中一个窗口默认有7×7=49个小patch的,这里就是画个示意图。从Layer1到Layer1+1就相当于将Layer1中的整个图像向右下角移了两个方格单元。

方法

在这里插入图片描述

Swin Transformer的整体架构如上图所示。假设有一张大小为224×224×3的图像,首先第一步就像ViT一样将图像分割成许多个patch,与ViT不同的是,Swin Transformer的每个patch大小为4×4×3,拉直后就是48维,因此经过patch partition之后,一张图像的尺寸变成了56×56×48,也就是一个3136×48的矩阵。然后将这些patch送入线性投射层,使得向量维度变成预先设置好的值C,Swin Transformer的一个变体Swin-T将这个超参数C设为96,3136×48经过线性投射层后就变成了3136×96。3136的序列长度对于Transformer来说是相当大的,因此Swin Transformer引入了基于窗口的自注意力计算,每个窗口有7×7=49个patch,也就是说序列长度就变成了49,大大降低了计算复杂度。在Stage 1中,Swin Transformer Block的输入是56×56×96,输出也是56×56×96。想获取到多尺寸的特征信息,那么就要构建一个层级式的Transformer,也就是要像卷积神经网络一样,弄一个类似于池化的操作出来。Swin Transformer提出了patch merging的操作,它的操作过程如下图所示。在Stage 2中,经过patch merging后,图像的H、W各缩小2倍,C变成4倍,然后会用一个1×1的卷积将4C降维到2C,Swin Transformer Block的输入为28×28×192,输出也是28×28×192。在Stage 3中,经过patch merging后,Swin Transformer Block的输入为14×14×384,输出也是14×14×384。在Stage 4中,经过patch merging后,Swin Transformer Block的输入为7×7×768,输出也是7×7×768,也就是说在最后一个阶段,只有一个窗口,这个窗口就代表了整个图像特征。

在这里插入图片描述

Swin Transformer特征图的维度跟卷积神经网络(残差网络)很像,而且为了和CNN保持一致,Swin Transformer并没有像ViT一样使用class token,而是在得到最后的特征图之后,用了一个全局平均池化(GAP)操作,将7×7取平均变成1。整体框架图中没有画出GAP,因为Swin Transformer并不是只用来做分类,它还能用于检测、分割等其他下游任务,如果是做分类的话,7×7×768经过GAP操作后就变成了1×768。

全局自注意力和基于窗口的自注意力的计算复杂度如下面公式所示,M=7为一个窗口的边长,假设h和w都是56,则 ( h w ) 2 = 3136 × 3136 (hw)^2=3136×3136 (hw)2=3136×3136 M 2 h w = 49 × 3136 M^2hw=49×3136 M2hw=49×3136,计算复杂度相差64倍,可以说是非常大了。

在这里插入图片描述

基于窗口的自注意力虽然大幅降低了计算复杂度,但是窗口之间没有信息交互了,全局建模的缺失会限制模型性能。针对这一问题,Swin Transformer提出了移动窗口方法,该方法将整幅图像向右下角移动两个窗口单元,而后再根据下图所示过程对移动后的窗口进行处理。在Swin Transformer中,先做一遍基于窗口的多头自注意力,再做一遍基于移动窗口的多头自注意力,这样就能实现窗口与窗口之间的信息交互,从而达到全局建模的能力。

在这里插入图片描述

Swin Transformer有以下几种变体,其中Swin-T的计算复杂度与ResNet50差不多,Swin-S的计算复杂度与ResNet101差不多,Swin-T、Swin-S、Swin-L的模型规模和计算复杂度分别是Swin-B的0.25、0.5、2倍。这几个变体中,不同的地方主要在于超参数C(线性投射后得到的向量维度)的大小和Transformer Block的数量。其中基于窗口的多头自注意力是一个block,基于移动窗口的多头自注意力也是一个block,这两个block连在一起计算,因此layer numbers中的2指的就是一个窗口block和一个移动窗口block。

在这里插入图片描述

实验

Swin Transformer与其他先进算法在图像分类任务上的性能比较:

在这里插入图片描述

相似规模的Swin Transformer与ResNet的性能比较:

在这里插入图片描述

Swin Transformer与其他先进算法在目标检测和实例分割数据集COCO上的性能比较:

在这里插入图片描述

Swin Transformer与其他先进算法在语义分割数据集ADE20K上的性能比较:

在这里插入图片描述

移动窗口和相对位置编码带来的性能提升消融实验:

在这里插入图片描述

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



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

相关文章

问题-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

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

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

论文阅读--Efficient Hybrid Zoom using Camera Fusion on Mobile Phones

这是谷歌影像团队 2023 年发表在 Siggraph Asia 上的一篇文章,主要介绍的是利用多摄融合的思路进行变焦。 单反相机因为卓越的硬件性能,可以非常方便的实现光学变焦。不过目前的智能手机,受制于物理空间的限制,还不能做到像单反一样的光学变焦。目前主流的智能手机,都是采用多摄的设计,一般来说一个主摄搭配一个长焦,为了实现主摄与长焦之间的变焦,目前都是采用数字变焦的方式,数字变焦相比于光学