Swin Transformer 论文精读

news2024/11/20 4:31:25

Swin Transformer 论文精读

https://www.bilibili.com/video/BV13L4y1475U

Swin 几乎涵盖了 CV 的下游任务(下游任务指骨干网后面的 head 解决的任务,如:分类、检测、语义分割),并且曾经刷新多个数据集的榜单。

题目 Swin Transformer: Hierarchical Vision Transformer using Shifted Windows 含义:使用移动窗口的层级式的 Vision Transformer。Swin 希望 Transformer 像卷积网络一样可分成几个 block,能够做层级式的特征提取,使提取到的特征具有层级的概念。

Abstract

本文提出了一种新的 vision transformer,称为 Swin Transformer,它可以作为计算机视觉的通用骨干网。将Transformer 从语言应用到视觉的挑战来自于这两个领域之间的差异,例如视觉实体规模的巨大差异(在不同图片的同一个物体尺寸可能不同)以及与文本中的单词相比,图像中像素的高分辨率。为了解决这些差异,我们提出了一个 hierarchical Transformer,它的表示是用 shifted windows 计算的。shifted windows 提高了效率(因为self-attention 是在窗口内计算的,序列长度大大降低);将 self-attention 限制在不重叠的局部窗口,同时允许跨窗口连接(通过 shfiting,相邻的窗口之间有了交互。所以上下层之间可以 cross-windows connection,从而变相的达到一种全局建模的能力)。这种层次结构的好处:①、灵活提供各种尺度上的信息(建模的灵活性);②、相对于图像大小具有线性计算复杂度(self-attention 是在小窗口内计算的,计算复杂度随图像大小线性增长,而不是平方增长)。Swin Transformer 的这些特性使其与广泛的视觉任务兼容,包括图像分类(ImageNet-1K上的87.3 top-1精度)和密集预测任务,如对象检测(COCO testdev上的58.7 box AP和51.1 mask AP)和语义分割(ADE20K val上的53.5 mIoU)。其性能在COCO上大幅超过了+2.7盒AP和+2.6掩模AP,在ADE20K上超过了+3.2 mIoU,显示了基于 Transformer 的模型作为视觉骨干的潜力 。分层设计和移位窗口方法也被证明对所有 MLP 体系结构都是有益的。

Introduction

前两段的含义:在视觉领域,之前是卷积网络占主导地位,Transformer 在 NLP 领域效果很好,可以把 Transformer 应用于视觉领域。ViT 已经把这个落实了;而 Swin 的出发点便是证明 Transformer 可以用作一个视觉领域的通用骨干网络。


请添加图片描述

ViT 虽然可通过全局的自注意力操作达到全局的建模,但对多尺度特征的把握就弱一些。 对于具体的视觉任务,如检测和分割,多尺度的特征尤为重要。ViT 处理的特征是 single low resolution —— 一直处理的都是16倍的下采样率过后的的特征。因此 ViT 可能不适合于处理密集预测型的任务。另一方面,ViT 的 self-attention 始终是在整张图上进行的。它是一个全局建模,而且复杂度跟图像尺寸进行平方倍的增长。

Swin 借鉴了很多卷积网络的经验与先验知识。比如为减少序列长度、降低计算复杂度。Swin 提出在小窗口内计算 self-attention,而不像 ViT 在全图上进行。只要窗口大小固定,计算复杂度固定;整张图的计算复杂度,与这张图片的大小成线性增长关系。这一点也算是利用了卷积网络中的 locality 的 inductive bias:同一物体的不同部位或者语义相近的不同物体大概率会出现在相连的地方。

Swin 怎样产生多尺寸的特征呢?卷积网络中主要通过 pooling 生成多尺寸特征。pooling 操作能增大每个卷积核看到的感受野,从而使得池化后的特征抓住物体不同的尺寸。相应地,Swin 提出类 pooling 操作 —— patch merging:把相邻的小 patch 合成大 patch。大 patch 能够看到之前小 patch 看到的内容,感受野也就增大了,正如上图(左)表示的。

(第三段)


请添加图片描述

(第四段。第四段介绍 shifting 操作。这里结合 Fig 2 讲解。)


第五段展示 Swin 取得的结果。

第六段作者展望:CV 与 NLP 大一统的框架能够促进两个领域的共同发展。

(Swin 很好地利用视觉里的先验知识,在视觉任务上大杀四方。但是在大一统上,ViT 更好。因为它什么都不改,先验信息也不加,Transformer 在两个领域都用的很好。这样模型可以共享参数,甚至到多个模态的输出拼接起来当成一个很长的输入,直接交过 Transformer,不考虑模态间的差异。)

Conclusion

Swin 是一种新的视觉 Transformer,它产生层次特征表示,并且对输入图像大小具有线性计算复杂度。Swin 在 COCO 对象检测和 ADE20K 语义分割方面实现了最先进的性能,大大超过了以前的最佳方法。我们希望 Swin 在各种视觉问题上的强大表现将鼓励视觉和语言信号的统一建模。(第一段)

作者提出 Swin 最关键的贡献是 shifted window based self-attention。对于视觉的下游任务尤其是密集预测型任务更重要。作者提出接下来的工作可以把 shifted window based self-attention 应用在 NLP 中。(第二段)

Related Work

作者先大概讲一下卷积神经网络,再谈到 self-attention 或者 Transformer 如何帮助卷积神经网络,最后谈纯 Transformer 做视觉的骨干网络。
(Swin 的相关工作与 ViT 相关工作的内容几乎一致,不再赘述)

Method

作者在本章节分两个大块:3.1 讲述 Swin 的整体流程,主要是过一遍 Swin 的前向过程以及描述 patch merging 操作如何实现。3.2 讨论 Swin 如何把基于 shifted window 的 self-attention 变为一个 Transformer block 开展计算。

Overall Architecture



请添加图片描述

(21:06—29:00 根据模型总览图 Fig 3 讲述 Swin 的前向计算过程)

假设输入的图片大小是标准 ImageNet 大小 224 ∗ 224 ∗ 3 224*224*3 2242243。因为 Swin 的 patch 大小为 4 ∗ 4 4*4 44,所以处理得到的图像块为 56 ∗ 56 ∗ 48 ( 56 = 224 4 )( 48 = 4 ∗ 4 ∗ 3  表示每个  p a t c h  向量的维度) 56*56*48(56=\frac{224}{4})(48=4*4*3\ 表示每个\ patch\ 向量的维度) 56564856=4224)(48=443 表示每个 patch 向量的维度)

通过 Linear Embedding 把向量维度变成 已经预设好的大小(即 Transformer 能够接受的大小),Swin 论文中把这个超参数设为 C C C(对于 Fig 3 展示的 Swin-T 来说, C = 96 C=96 C=96)。那么通过 Linear Embedding 得到的结果大小为 3136 ∗ 96 ( 3136 = 56 ∗ 56 ) 3136*96(3136=56*56) 3136963136=5656;也就是说,序列的长度为 3136 3136 3136,每个 token 向量的维度为 96 96 96

Swin 的 Patch Partition、Linear Embedding 这两步操作相当于 ViT 中的 Patch Projection 这一步操作。在 Swin 代码中,作者用一步卷积完成。

此时进入 Transformer 的序列长度为 3136 3136 3136,远超 ViT 进入 Transformer 的序列长度(它的序列长度为 196 196 196);而且 Transformer 也不能接受这么长的序列。Swin 便引入了 self-attention based shifted windows。默认的,每个窗口有 49 个 patch,即序列长度只有 49。Swin Transformer Block 是 self-attention based shifted windows 进行计算的。


接下来我们了解 Patch Merging 如何实现。

请添加图片描述

应该明确 Patch Merging 的输入为 H ∗ W ∗ C H*W*C HWC,经过中间 Ⅰ、Ⅱ、Ⅲ、Ⅳ 四步之后的输出为 H 2 ∗ W 2 ∗ 2 C \frac{H}{2}*\frac{W}{2}*2C 2H2W2C。也就是经过 Patch Merging 之后,实现了 “宽高减半,通道加倍” 的效果。

  • 第 Ⅰ 步把给出的图像分为 4 个窗口,每个窗口有 4 个 patch。
  • 第 Ⅱ 步把每个窗口相应位置的 patch 放在一起,达到了 “宽高减半” 的效果。
  • 第 Ⅲ 步把它们叠放一起,得到 “宽高减半,通道四倍” 的结果。
  • 第 Ⅳ 步使用 1 ∗ 1 1*1 11 的卷积对通道降维,实现 “宽高减半,通道加倍” 。

再次回看 Fig 3。

每次经过每个 Stage 的 Patch Merging 后,都会 “宽高减半,通道加倍” (Fig 3 中已经标出这些变化)。

到此为止,Swin 骨干网的前向传播(计算)完成。

Swin 有四个 Stage,后三个 Stage 有类似池化的 Patch Merging 操作,并且它的 self-attention 在小窗口之内计算的。



Shifted Window based Self-Attention

为何引入 Shifted Window based Self-Attention?基于全局的 self-attention 导致平方倍的复杂度;在做视觉的下游任务,尤其是密集预测型的任务时,或者遇到图片尺寸很大时,全局的 self-attention 的计算非常非常昂贵!所以,作者提出 Shifted Window based Self-Attention。(第一段)


作者如何实现窗口划分的?(开始 20:45-结束 30:54)(下图以 Stage 1 的输入举例,讲解窗口的划分)

请添加图片描述

输入尺寸是 56 ∗ 56 ∗ 96 56*56*96 565696。原来的图片被平均分为没有重叠的窗口。上图用橘黄色表示这些窗口。这些窗口并非是最小的计算单元,最小的计算单元还是 patch。也就是说每个窗口里还有 m ∗ m m*m mm 个 patch。在 Swin 本篇论文中, m = 7 m=7 m=7。即每个窗口中有 49 ( 49 = 7 ∗ 7 ) 49(49=7*7) 4949=77 个 patch。又因为 self-attention 的计算是在窗口内进行的,所以序列长度永远是 49 49 49。那么上图一共可以划分出 64 ( 56 7 ∗ 56 7 ) 64(\frac{56}{7}*\frac{56}{7}) 64756756 个窗口,分别在这 64 64 64 个窗口里算 self-attention。


讲解 Shifted Window based Self-Attention 的复杂度的计算方式以及与全局的 self-attention 复杂度的对比。(开始 30:54-结束 34:41)

(此部分笔记略。等到以后需要时再添加)


作者如何实现移动窗口(shift window)的呢?(开始 35:07-结束 36:95)

请添加图片描述

上图已经左部分介绍了移动过程,实现窗口间互通信的目的。Swin Transformer Block 结构的安排也是有讲究的(符合左部分图示的移动过程):每次先做一次基于窗口的 multi-head self-attention,再做一次基于移动窗口的 multi-head self-attention(如上图右部分所示)。
z ^ l = W _ M S A ( L N ( z l − 1 ) ) + z l − 1 \hat{\pmb{z}}^l = W\_MSA(LN(\pmb{z}^{l-1})) + \pmb{z}^{l-1} z^l=W_MSA(LN(zl1))+zl1
z l = M L P ( L N ( z ^ l ) ) + z ^ l {\pmb{z}}^l = MLP(LN(\hat{\pmb{z}}^l)) + \hat{\pmb{z}}^l zl=MLP(LN(z^l))+z^l
z ^ l + 1 = S W _ M S A ( L N ( z l ) ) + z l \hat{\pmb{z}}^{l+1} = SW\_MSA(LN(\pmb{z}^{l})) + \pmb{z}^{l} z^l+1=SW_MSA(LN(zl))+zl
z l + 1 = M L P ( L N ( z ^ l + 1 ) ) + z ^ l + 1 {\pmb{z}}^{l+1} = MLP(LN(\hat{\pmb{z}}^{l+1})) + \hat{\pmb{z}}^{l+1} zl+1=MLP(LN(z^l+1))+z^l+1


讲解 Swin 如何利用掩码的方式提高移动窗口的计算效率。(开始 37:04-结束 51:00)

(此部分笔记略。等到以后需要时再添加)


Architecture Variants

(开始 51:00-结束 51:43)

在本节作者提出 Swin 的四种变体:Swin-T、Swin-S、Swin-B、Swin-L。目的是希望与 Resnet 做比较公平的对比。四种变体的不同体现在两个超参数:①、向量维度大小 C C C,②、每层 Stage 拥有的 transformer block 的数量。(这一点与 Resnet 的结构相似。Resnet 也是分为四个 Stage,每个 Stage 拥有残差块数量不同)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记一次符合Google Coding Style的Bash脚本重构

最近我在思考这样一个问题,顺便看一下gpt对这个问题的解释。搜索发现: 团队写代码,为什么要遵循coding guideline? 一致性:编码准则确保整个团队的代码风格和格式是一致的,这使得团队成员之间更易于交流和…

人工智能(Pytorch)搭建模型6-使用Pytorch搭建卷积神经网络ResNet模型

大家好,我是微学AI,今天给大家介绍一下人工智能(Pytorch)搭建模型6-使用Pytorch搭建卷积神经网络ResNet模型,在本文中,我们将学习如何使用PyTorch搭建卷积神经网络ResNet模型,并在生成的假数据上进行训练和测试。本文将…

Linux---vi/vim编辑器、查阅命令

1. vi\vim编辑器三种模式 vim 是 vi 的加强版本,兼容 vi 的所有指令,不仅能编辑文本,而且还具有 shell 程序编辑的功能, 可以不同颜色的字体来辨别语法的正确性,极大方便了程序的设计和编辑性。 命令模式&#xff08…

整数智能重磅推出集成SAM的智能标注工具2.0

前言 图像语义分割一直是数据标注中最繁琐、最耗时的标注任务之一,利用钢笔工具手动描边的标注方式所带来的时间成本和低准确率都将影响模型的生产速度和模型性能。整数智能ABAVA数据工程平台最新发布了基于SAM(Segement Anything Model)改进…

【面试题】面试题总结

加油加油 文章目录 1. TCP与UDP的区别2. TCP为什么是四次挥手机制3. HTTP与HTTPS的区别4. HTTPS加密机制5. 简要介绍SSL/TSL协议6. GET与POST的区别7. cookie与session的区别8. JVM内存区域划分9. 程序运行时候内存不足,会出现什么状况10. 显式调用GC会立即执行吗11…

【Python json】零基础也能轻松掌握的学习路线与参考资料

Python中的JSON模块主要用于将Python对象序列化成JSON数据或解析包含JSON数据的字符串。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。由于JSON在Web应用中的广泛使用…

SpringCloud Sentinel实战限流熔断降级应用

目录 1 Sentinel核心库1.1 Sentinel介绍1.2 Sentinel核心功能1.2.1 流量控制1.2.2 熔断降级 2 Sentinel 限流熔断降级2.1 SentinelResource定义资源2.2 Sentinel的规则2.2.1 流量控制规则 (FlowRule)2.2.2 熔断降级规则 (DegradeRule)2.2.3 系统保护规则 (SystemRule)2.2.4 访问…

Tomcat配置https协议证书-阿里云,Nginx配置https协议证书-阿里云,Tomcat配置https证书pfx转jks

Tomcat/Nginx配置https协议证书 前言Tomcat配置https协议证书-阿里云方式一 pfx配置证书重启即可 方式二 jkspfx生成jks配置证书重启即可 Nginx配置https协议证书-阿里云实现方式重启即可 其他Tomcat相关配置例子如下nginx配置相关例子如下 前言 阿里云官网:https:…

探索Java面向对象编程的奇妙世界(三)

⭐ 垃圾回收机制(Garbage Collection)⭐ JVM 调优和 Full GC⭐ this 关键字⭐ static 关键字 ⭐ 垃圾回收机制(Garbage Collection) Java 引入了垃圾回收机制,令 C程序员最头疼的内存管理问题迎刃而解。Java 程序员可以将更多的精力放到业务逻辑上而不是内存管理工…

网安面试只要掌握这十点技巧,绝对轻轻松松吊打面试官

结合工作经验,在这里笔者给企业网管员提供一些保障企业网络安全的建议,帮助他们用以抵御网络入侵、恶意软件和垃圾邮件。 定义用户完成相关任务的恰当权限 拥有管理员权限的用户也就拥有执行破坏系统的活动能力,例如: ・偶然对系…

挂耳式耳机品牌排行榜,良心推荐这四款蓝牙耳机

在蓝牙耳机越来越普及的同时,大家开始重视佩戴耳机时的舒适度,市面上的耳机形式也逐步迭代,目前流行的开放式耳机不仅很好的避免长期佩戴耳机产生的酸痛感,而且对耳道健康问题的处理也具有极佳的效果。那么,面对市面上…

VB显示“shell32.dll”中的图标

在Form上添加一个ListBox列表控件 代码如下: Option Explicit Private Declare Function ExtractIconEx Lib “shell32.dll” Alias “ExtractIconExA” (ByVal lpszFile As String, ByVal nIconIndex As Long, phiconLarge As Long, phiconSmall As Long, ByVal nI…

奇偶分频电路

目录 偶数分频 寄存器级联法 计数器法 奇数分频 不满足50%占空比 50%占空比 偶数分频 寄存器级联法 寄存器级联法能实现2^N的偶数分频,具体做法是采用寄存器结构的电路,每当时钟上升沿到来的时候对输出结果进行翻转,以此来实现偶数分…

拥有自我意识的AI:AutoGPT | 得物技术

1.引言 ChatGPT在当下已经风靡一时,作为自然语言处理模型的佼佼者,ChatGPT的优势在于其能够生成流畅、连贯的对话,同时还能够理解上下文并根据上下文进行回答。针对不同的应用场景可以进行快速定制,例如,在客服、教育…

【Unity-UGUI控件全面解析】| TextMeshPro 控件详解

🎬【Unity-UGUI控件全面解析】| TextMeshPro控件详解一、组件介绍二、组件属性面板三、代码操作组件四、组件常用方法示例4.1 Font Asset Creator 面板介绍4.2 制作中文字体库五、组件相关扩展使用5.1 软化/扩张 效果5.2 描边效果5.3 投影效果5.4 光照效果5.5 外发光效果💯…

5.25 费解的开关

思路&#xff0c;枚举 开关按下两次就复原&#xff0c;所以一个开关只有两种情况&#xff0c;按下和不按下&#xff0c;5*5的开关&#xff0c;一共25个开关&#xff0c;一共有2^25种情况&#xff0c;for (int i 0;i < 2^25;i)进行操作&#xff0c;计算按下开关次数&#x…

mac 安装 MongoDB

一.官网下载安装包 1.1 下载安装包 Download MongoDB Community Server | MongoDB 1.2 将下载好的 MongoDB 安装包解压缩&#xff0c;并将文件夹名改为 mongodb&#xff08;可改成自己想要的任何名字&#xff09;。 1.3 按快捷键 Command Shift G 打开前往文件夹弹窗&#…

没有经验能做产品经理吗?

没有经验能做产品经理吗&#xff1f;这是一个经常被讨论的问题&#xff0c;因为很多人想转行成为产品经理&#xff0c;但他们没有相关的工作经验。这里我也给出一些解答。 一、产品经理的职责和技能 首先&#xff0c;让我们看一下产品经理的职责和技能。产品经理是负责产品开…

LeetCode:相交链表(java)

相交链表 题目描述指针法解题 #LeetCode 160题&#xff1a;相交链表&#xff0c;原题链接 原题链接。相交链表–可以打开测试 题目描述 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返…

【Python Power BI】零基础也能轻松掌握的学习路线与参考资料

Python和Power BI是现代数据分析和可视化领域中最受欢迎的工具之一&#xff0c;Python是一种高级编程语言&#xff0c;广泛用于数据科学和分析&#xff0c;而Power BI是一种业务智能工具&#xff0c;用于创建交互式大屏幕和实时报表。Python和Power BI的结合使用可以为数据科学…