【论文精读】Swin Transformer: Hierarchical Vision Transformer using Shifted Windows

Swin Transformer: Hierarchical Vision Transformer using Shifted Windows

  • 前言
  • Abstract
  • 1. Introduction
  • 2. Related Work
  • 3. Method
    • 3.1. Overall Architecture
    • 3.2. Shifted Window based Self-Attention
      • Self-attention in non-overlapped windows
      • Shifted window partitioning in successive blocks
      • Efficient batch computation for shifted configuration
      • Relative position bias
    • 3.3. Architecture Variants
  • 4. Experiments
    • 4.1. Image Classification on ImageNet-1K
    • 4.2. Object Detection on COCO
    • 4.3. Semantic Segmentation on ADE20K
    • 4.4. Ablation Study
  • 5. Conclusion
  • 阅读总结

前言

虽然最近的论文精读都涉及CV领域,与博主研究方向不同,但是这些文章大多都涉及Transformer架构,或者和自监督学习、无监督学习有关,所谓万变不离其宗,虽然在不同领域方法不同,但是很多情况下其思想上有很多的共性,特别值得读者去思考。本篇论文精读来自ICCV2021最佳论文,也奠定了Transformer架构在CV领域的地位,其方法精妙,效果显著,是一篇值得精读的佳作。


Paper: https://arxiv.org/pdf/2103.14030.pdf
Code: https://github.com/microsoft/Swin-Transformer
From: ICCV Best Paper

Abstract

本文提出一个新的视觉Transformer,称作Swin Transformer,可以作为CV领域的通用架构。将Transformer应用到CV领域的挑战来源于NLP与CV的差异:

  1. 和文本相比,视觉对象的尺度存在巨大变化。
  2. 像素的高分辨率大大增加了计算成本和复杂度。

为了解决上述问题,本文提出了层级Transformer,通过移动窗口计算层级表征。移动窗口的机制带来了更高的效率,更好的灵活性和更小的线性复杂度。这些特征让Swin Transformer在多个CV任务上取得了SOTA,比之前最好的方法提升了近3个点。实验结果证明了基于Transformer模型作为CV领域backbone的潜力,以及分层设计和移动窗口的优越性。

1. Introduction

CNNs占据CNN领域模型良久,并且性能优良。但是NLP中对Transformer架构的成功应用促使CV工作者研究其对CV领域的适应,尤其是Transformer的注意力机制可以解决长程依赖问题。因此,本文试图扩展Transformer的适用性,使其可以作为CV领域的backbone,代替CNN架构。
作者发现Transformer从语言领域迁移到视觉领域主要的挑战可以通过两个模式之间的差异来解释。第一是视觉元素在规模上存在很大差异,另一个是图像中像素分辨率比文本token要多得多,这会导致模型计算复杂度大大增多。为了解决上述问题,本文提出了Swin Transformer,它构建了分层特征图,并且计算复杂度与图像大小成线性关系。下图是Swin Transformer与ViT的比较:
image.png
Swin Transformer通过从小图像块开始,逐步合并更深Transformer层的相邻图像块来构建分层表示。借助这些分层特征图,Swin Transformer可以解决密集型的任务。线性复杂度体现在红框包围的区域,注意力的计算仅在框内进行,因此随着图像增大,计算也只是线性增大。这些优点和ViT形成鲜明对比,后者缺少局部特征的捕获,并且具有二次的复杂度。
Swin Transformer另一个关键设计是移动窗口,如下图所示:
image.png
移动的窗口桥接了前一层的窗口,让同一个红框内的图像块也能获取相邻图像块的信息,从而显著提升了模型的建模能力,此外窗口内所有查询图像块共享相同的key集,有利于硬件访问。
基于上述得到的Swin Transformer在图像分类、目标检测和语义分割任务上取得强大的性能。作者相信跨CV和NLP的统一架构可以让这两个领域同时受益,因为二者的联合建模能够共享领域知识。

2. Related Work

略。

3. Method

3.1. Overall Architecture

image.png
Swin Transformer架构总览图如上图所示。它首先通过图像分割模块将RGB图像划分为不重叠的大小为4×4×3的图像块并铺平,接着用一个线性层将图像块token投影到任意维度C。此时整个序列的维度为 H 4 × W 4 × C \frac{H}{4} \times \frac{W}{4} \times C 4H×4W×C。然后在这些图像token上应用Swin Transformer块,Swin Transformer块和线性embedding合称stage1。
为了产生分层的表征,随着网络变深,token的数量通过图像块合并层逐层递减。具体来说,每经过一个stage,图像块的数量减少为原来二等四分之一,输出维度增大为原来的两倍。上图的Swin Transformer一共有4个stage,这些stage共同产生分层表示,具有和典型卷积网络相同的特征图分辨率,可以方便替换现有的CV任务中的骨干网络。
Swin Transformer块如上右图所示,它将Transformer块中的多头自注意力机制MSA替换为了基于移动窗口的模块,其它层保持不变。

3.2. Shifted Window based Self-Attention

标准的Transformer用于图像分类使用的是全局自注意力,但是这种架构计算复杂度是token的二次方,使其不适合需要大量token进行密集预测或高分辨率的图像问题。

Self-attention in non-overlapped windows

为了高效建模,本文提出计算局部窗口内的自注意力。窗口以不重叠的方式均匀划分图像。假设窗口包含 M × M M×M M×M个图像块,全局MSA模块和窗口MSA模块的计算复杂度如下:
Ω ( M S A ) = 4 h w C 2 + 2 ( h w ) 2 C , Ω ( W − M S A ) = 4 h w C 2 + 2 M 2 h w C , \begin{array}{l} \Omega(\mathrm{MSA})=4 h w C^{2}+2(h w)^{2} C, \\ \Omega(\mathrm{W}-\mathrm{MSA})=4 h w C^{2}+2 M^{2} h w C, \end{array} Ω(MSA)=4hwC2+2(hw)2C,Ω(WMSA)=4hwC2+2M2hwC,

两个式子的第一项都相同,第二项中,前者是关于的二次方,后者是关于的线性变换。对于大的来说,全局自注意计算量是无法承受的,而基于窗口的自注意是可扩展的。

计算复杂度的计算其实可以很容易推导出来,这里画一张示意图就可以很好理解。以单头多注意力机制为例(多头最后的结果是一样的),其计算流程如下:

image.png

Shifted window partitioning in successive blocks

但是基于窗口的自注意力机制缺乏跨窗口的连接,这限制了其建模能力。为了引入跨窗口连接,同时保持高效计算,本文提出了一种移动窗口分区方法, 该方法在连续Swin Transformer块中的两个分区配置之间交替。
如图二所示,第一个模块对图像进行常规的划分,将8×8的特征图均匀划分为大小为4×4的2×2窗口,然后下一个模块采用和前一层不同的窗口配置,将窗口移动 ( ⌊ M 2 ⌋ , ⌊ M 2 ⌋ ) \left ( \left \lfloor \frac{M}{2} \right \rfloor ,\left \lfloor \frac{M}{2} \right \rfloor \right ) (2M,2M)个像素。使用移动窗口的分区方法,连续的Swin Transformer块计算如下:
z ^ l = W-MSA ⁡ ( LN ⁡ ( z l − 1 ) ) + z l − 1 , z l = MLP ⁡ ( LN ⁡ ( z ^ l ) ) + z ^ l , z ^ l + 1 = SW-MSA ⁡ ( LN ⁡ ( z l ) ) + z l , z l + 1 = MLP ⁡ ( LN ⁡ ( z ^ l + 1 ) ) + z ^ l + 1 \begin{array}{l} \hat{\mathbf{z}}^{l}=\operatorname{W-MSA}\left(\operatorname{LN}\left(\mathbf{z}^{l-1}\right)\right)+\mathbf{z}^{l-1}, \\ \mathbf{z}^{l}=\operatorname{MLP}\left(\operatorname{LN}\left(\hat{\mathbf{z}}^{l}\right)\right)+\hat{\mathbf{z}}^{l}, \\ \hat{\mathbf{z}}^{l+1}=\operatorname{SW-MSA}\left(\operatorname{LN}\left(\mathbf{z}^{l}\right)\right)+\mathbf{z}^{l}, \\ \mathbf{z}^{l+1}=\operatorname{MLP}\left(\operatorname{LN}\left(\hat{\mathbf{z}}^{l+1}\right)\right)+\hat{\mathbf{z}}^{l+1} \end{array} z^l=W-MSA(LN(zl1))+zl1,zl=MLP(LN(z^l))+z^l,z^l+1=SW-MSA(LN(zl))+zl,zl+1=MLP(LN(z^l+1))+z^l+1

其中 z ^ l \hat{\mathbf{z}}^{l} z^l z l \mathbf{z}^{l} zl分别是和 MLP 模块的输出,表示使用常规的窗口多头自注意力,表示使用移动窗口的窗口多头自注意力。
移动窗口分割方法引入了相邻不重叠窗口之间的连接,在多个下游任务上有效。

Efficient batch computation for shifted configuration

移动窗口的一个问题是,它会导致更多窗口的生成,并且窗口的大小不一。一个简单的解决方法是将较小的窗口填充到大小,并在计算注意力时mask掉填充的值。但是这种方法带来的计算量是客观的。
本文提出了一个更高效的批量计算方法,通过向左上方循环移位实现,如下图所示:
image.png
通过转换后,批处理窗口可能由特征图中不相邻的子窗口组成,因此采用随机掩码机制将自注意力计算限制在每个子窗口内。批处理窗口的数量保持和常规窗口数量相同,因此也是高效的。那么掩码的具体操作如下图所示,即将计算好的自注意力矩阵与右侧的掩码矩阵相乘。

Relative position bias

自注意力的计算遵循常规的计算公式,如下:

只不过作者加入了一个偏置矩阵,该偏置矩阵对模型性能有着显著改进。此外,如果向输入中添加绝对位置编码会稍微降低性能,因此本文采用的预训练中学习到的相对位置编码。

3.3. Architecture Variants

作者构建了四种不同大小规模的模型,如下所示:
image.png
其中Swin-B的大小和计算量和ViT-B类似。Swin-T和Swin-S的复杂度分别与ResNet-50和ResNet-101类似。默认情况下,窗口大小设置为7。

4. Experiments

本文对ImageNet-1K、COCO目标检测和ADE20K语义分割进行实验。实验部分首先和其他先进模型进行对比,再进行消融实验。

4.1. Image Classification on ImageNet-1K

作者分别在ImageNet-1K和ImageNet-22K上进行预训练,后者预训练后再ImageNet-1K上进行微调。训练好的模型在ImageNet-1K测试集上执行分类任务。结果分别如下面两张表所示:
image.png
常规的ImageNet-1K预训练模型分别与之前最先进的Transformer模型DeiT和最先进的卷积神经网络RegNet、EfficientNet相比,Swin Transformer实现了稍微更好的速度和精度平衡。
ImageNet-22K上预训练的模型显然受到大规模预训练数据的增益,实现了明显更好的速度和精度的平衡。Swin-B获得了86.4%的最高精度,比ViT高出2.4%,以及略低的FLOP(47.0G和55.4G)。较大的Swin-L模型实现了87.3%的最高精度。

4.2. Object Detection on COCO

对象检测和实例分割实验在 COCO 2017 上进行,为了证明Swin Transformer可以作为CV任务的backbone,作者将部分方法的卷积backbone换为了Swin Transformer。结果如下表所示:
image.png
a表列出了Swin-T和ResNet-50在四种目标检测框架上的结果。Swin Transformer在性能上全方位碾压,但是在模型尺寸、FLOP和延迟上稍大。
表2与R-CNN的不同模型进行比较,Swin Transformer实现了51.9 box AP和45.0 maskAP,显著优于其他模型。
表c是抛开所有的限制,Swin Transformer与之前最先进模型的比较。本文的模型实现了58.7的 box AP,超过了之前最优2.7个点。

4.3. Semantic Segmentation on ADE20K

语义分割任务在ADE20K上进行,下表列出了不同方法、backbone的mIoU、模型大小,FLOPs和FPS。从这些结果可以看出,Swin-L在val集上达到了53.5mIoU,比之前最好的模型高出了3.2。
image.png

4.4. Ablation Study

作者在三种下游任务上进行了消融实验,结果如下所示:
image.png
采用移动窗口的方法在每个阶段都要优于基于单窗口分区构建的方法,在ImageNet上提升1.1%,在密集预测型任务COCO和ADE20K上分别有2.8/2.2和2.8的提升。这表明了移动窗口在窗口之间建立连接的有效性,并且开销延迟也很小。
上表还显示了不同位置编码方法的比较,相对位置编码在三个任务上都是最优的方法,表明相对位置偏置的有效性。此外,绝对的位置编码在密集任务上对性能有所影响。
虽然ViT放弃了图像中的平移不变性,但是CNN中的长久经验证明其重要性,根据上表也能发现,鼓励平移不变的归纳偏置仍然可取,尤其是针对目标检测和语义分割的密集预测任务。
不同的自注意力方法在下表进行了比较:
image.png
移动窗口的循环实现具有更高的硬件效率,下表比较了它们在三个任务上的准确性,表明其在视觉建模上同样精准。此外,与最快的Transformer架构Performer相比,Swin Transformer也要稍快。
image.png

5. Conclusion

本文提出Swin Transformer,作为新的视觉Transformer架构,它提出分层特征表示,并且相对于输入的图像大小具有线性的计算复杂度。Swin Transformer在目标检测数据集COCO和语义分割数据集ADE20K上都显著超越之前最佳方法。作者希望Swin Transformer可以作为多模态的统一架构。
当然Swin Transformer还有一个关键要素移动窗口,要让Swin Transformer能够在NLP中受益,需要研究该方法在NLP中的应用。

阅读总结

Swin Transformer作为ViT的延伸工作,将图像中的特性(局部性和平移不变性)融入到Transformer模型中,帮助模型在密集预测任务上取得更好的结果。此外,作者也展露其野心,他们希望Swin Transformer架构不只是替换CV领域CNN架构的backbone,还将成为多模态大一统模型的架构,其想法远大,工作细腻,方法独特,效果显著,不愧为ICCV2021的最佳论文。
在我看来,这篇文章在工作量和创新点上都拉满了。首先工作量从实验部分就可以看出,作者将Swin Transformer和近年来领域最佳或里程碑式的模型进行了全方位对比,包括计算量、模型参数、延迟、精度、领域等,此外消融实验也在多个领域上进行,可谓论据十足。在创新点上,它创造性将图像特性和Transformer结合,通过分层特征学习和移动窗口两个创新性技术,让Transformer也能学习到图像中局部性和平移不变性的归纳偏置,同时又将计算复杂度降到线性,可谓是精妙绝伦。
其实Swin Transformer这样里程碑式的工作并不是空穴来风,也不是遥不可及的。当ViT出来的时候,它的核心在于在大规模数据集上进行预训练的Transformer也能做CV任务,相当于将Transformer引入了CV的大门,但是它并没有其它的创新点,或者说并没有引入图像的特性。因此很容易想到,将图像特性引入到Transformer中,很可能对模型的性能有很大的提升,那么图像的相较于文本的特性是什么,就是后序工作的重点。本文提出的特性是尺度变化和高分辨率,因此作者设计了分层特征提取和窗口自注意力,前者应对尺寸的变化,后者应对高分辨率带来的计算复杂度。当然图像相对于文本的特性远远不止这些,或者部分CV任务也有其独特的特性,因此针对不同的特性,设计不同的方法,才能得到有创新性的工作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/113285.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云上linux服务器安装tomcat

一、准备材料 白嫖了试用期的服务器玩了一阵子,重新购买一个服务器 配置参数:1核2G 贷款1M 阿里云服务器、MobaXterm、jdk1.8、tomcat8.5.78 安装参数:jdk1.8.0;tomcat8.5.78 官方网址:tomcat官方网址、JDK-8 二、java环境…

Ansible学习笔记9

yum_repository模块: yum_repository模块用于配置yum仓库的。 测试下: [rootlocalhost ~]# ansible group1 -m yum_repository -a "namelocal descriptionlocalyum baseurlfile:///mnt/ enabledyes gpgcheckno" 192.168.17.106 | CHANGED &g…

【element-ui】el-dialog改变宽度

dialog默认宽度为父元素的50%,这就导致在移动端会非常的窄,如图1,需要限定宽度。 解决方法:添加custom-class属性,然后在style中编写样式,注意,如果有scoped限定,需要加::v-deep &l…

css3英文文字换行,超过两行...展示

需求:超过两行...展示 开发的过程中发现div内容中文可以换行英文不换行,导致长度会溢出。 是英文全英文的话浏览器会解析成一个单词, 加上这句就好了 word-break:break-all; 一开始不知道是会解析成一个单词,用字符串拼接处理…

论文阅读_图形图像_U-NET

name_en: U-Net: Convolutional Networks for Biomedical Image Segmentation name_ch: U-Net:用于生物医学图像分割的卷积网络 addr: http://link.springer.com/10.1007/978-3-319-24574-4_28 doi: 10.1007/978-3-319-24574-4_28 date_read: 2023-02-08 date_publi…

高通开发系列 - 5G网络之QTI守护进程服务介绍

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 返回:专栏总目录 目录 代码位置和依赖关系功能介绍代码逻辑讲解外设节点关注的目录socket服务端初始化DPM客户端监听守护关键的数据结构体…

宏基官网下载的驱动怎么安装(宏基笔记本如何安装系统)

本文为大家介绍宏基官网下载的驱动怎么安装宏基笔记本驱动(宏基笔记本如何安装系统),下面和小编一起看看详细内容吧。 宏碁笔记本怎么一键更新驱动 1. 单击“开始”,然后选择“所有程序”。 2. 单击Acer,然后单击Acer eRecovery Management。…

MySQL事务原理、MVCC详解

事务原理 1 事务基础 1). 事务 事务 是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系 统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。 2). 特性 原子性(Atomi…

Java 数据库改了一个字段, 前端传值后端接收为null问题解决

前端传值后端为null的原因可能有很多种,我遇到一个问题是,数据库修改了一个字段,前端传值了,但是后台一直接收为null值, 原因排查: 1、字段没有匹配上,数据库字段和前端字段传值不一致 2、大…

卷积过程详细讲解

1:单通道卷积 以单通道卷积为例,输入为(1,5,5),分别表示1个通道,宽为5,高为5。假设卷积核大小为3x3,padding0,stride1。 卷积过程如下: 相应的卷积核不断…

时序预测 | MATLAB实现SSA-XGBoost(麻雀算法优化极限梯度提升树)时间序列预测

时序预测 | MATLAB实现SSA-XGBoost(麻雀算法优化极限梯度提升树)时间序列预测 目录 时序预测 | MATLAB实现SSA-XGBoost(麻雀算法优化极限梯度提升树)时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 Matlab实现SSA-XGBoost时间序列预测,麻…

SpringBoot - Google EventBus、AsyncEventBus

介绍 EventBus 顾名思义,事件总线,是一个轻量级的发布/订阅模式的应用模式,最初设计及应用源与 google guava 库。 相比于各种 MQ 中间件更加简洁、轻量,它可以在单体非分布式的小型应用模块内部使用(即同一个JVM范围…

利用逻辑回归判断病人肺部是否发生病变

大家好,我是带我去滑雪! 判断肺部是否发生病变可以及早发现疾病、指导治疗和监测疾病进展,以及预防和促进肺部健康,定期进行肺部评估和检查对于保护肺健康、预防疾病和提高生活质量至关重要。本期将利用相关医学临床数据结合逻辑回…

嵌入式系统入门实战:探索基本概念和应用领域

嵌入式系统是一种专用的计算机系统,它是为了满足特定任务而设计的。这些系统通常具有较低的硬件资源(如处理器速度、内存容量和存储容量),但具有较高的可靠性和实时性。嵌入式系统广泛应用于各种领域,如家用电器、汽车、工业控制、医疗设备等。 嵌入式系统的基本概念 微控…

力扣2. 两数相加

2. 两数相加 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个…

从《离婚律师》中学习代理模式

〇、前言 在2014年的时候,有一部非常火爆的电视剧叫做《离婚律师》,里面讲述了两名离婚律师池海东和罗郦的爱恨情仇,片子非常好看,当时我自己也怒刷了好几遍。 那么,在本剧的第四集中,有一段非常搞笑的剧情…

docker 04.更加重要的命令

之前的都是基础命令, 前台交互进程和后台守护进程: 重新进入容器: docker中的导入导出: docker中的拷贝到:

AliOS-Things引入

目录 一、简介 1.1 硬件抽象层 1.2 AliOS-Things内核 rhino ​编辑 1.3 AliOS-Things组件 二、如何进行AliOS-Things开发 三、安装环境 安装python pip git 修改pip镜像源 安装aos-cube 一、简介 AliOS-Things是阿里巴巴公司推出的致力于搭建云端一体化LoT软件。AliOS-…

centos升级python3.10,中间遇到问题,终于解决了

升级为python3.10 yum updateyum install openssl-devel bzip2-devel libffi-develyum groupinstall "Development Tools"wget https://www.python.org/ftp/python/3.10.2/Python-3.10.2.tgztar -xzf Python-3.10.2.tgzcd Python-3.10.2./configure --enable-optimi…

Spring Boot Actuator的Env端点存在本地文件包含(LFI)漏洞CVE-2020-5421

文章目录 0.前言1.参考文档2.基础介绍3.漏洞利用原理3.解决方案1. 升级Spring Boot版本2. 限制端点的访问3. 禁用环境端点4. 不公开敏感的Actuator端点5. 开启安全审计 0.前言 背景: Spring Boot Actuator的Env端点存在本地文件包含(LFI)漏洞CVE-2020-5421。被扫描到…