深度学习(11)---Swin Transformer详解

news2024/9/24 11:25:02

文章目录

  • 一、引言
  • 二、结构
  • 三、Patch Merging操作
  • 四、W-MSA详解
  • 五、SW-MSA详解


一、引言

 1. 在原论文中,首先在开头作者就分析,当前的Transformer从NLP迁移到CV上没有大放异彩主要原因集中在:
 (1) 两个领域涉及的规模不同,NLP的规模是标准固定的,而CV的规模变化范围非常大。
 (2) CV比起NLP需要更大的分辨率,而且CV中使用Transformer的计算复杂度是图像尺度的平方,这会导致计算量过于庞大。

 2. 那么本篇论文作者为了解决该问题所用的方法有:
 (1) 引入CNN中常用的层次化构建方式来构建层次化Transformer。
 (2) 提出了 Shifted Windows Multi-Head Self-Attention(SW-MSA)的概念,通过此方法能够让信息在相邻的窗口中进行传递。
 这样一来通过限制在窗口内使用自注意力,带来了更高的效率;并且通过移动,使得相邻两个窗口之间有了交互,上下层之间也就有了跨窗口连接,从而变相达到了一种全局建模的效果。另外层级式的结构不仅非常灵活的去建模各个尺度的信息并且计算复杂度随着图像大小线性增长。
因为有了像卷积神经网络一样的分层结构,有了多尺度的特征,所以很容易的应用到下游任务里,例如图像分类、物体检测、物体分割等。

 3. 与之前的ViT相比,论文中给出了相应的对比图如下,从中可以看出来两者的区别:
 (1) Swin Transformer使用了类似卷积神经网络中的层次化构建方法(Hierarchical feature maps),比如特征图尺寸中有对图像下采样4倍的,8倍的以及16倍的,这样的backbone有助于在此基础上构建目标检测,实例分割等任务。而在之前的Vision Transformer中是一开始就直接下采样16倍,后面的特征图也是维持这个下采样率不变,这样对于多尺寸特征的获得会弱一些。
 (2) Swin-Transformer使用窗口多头自注意力,将特征图划成多个不相交的区域,然后在每个窗口里进行自注意力计算,只要窗口大小固定,自注意力的计算复杂度也是固定的,那么总的计算复杂度就是图像尺寸的线性倍数,而不是Vit对整个特征图进行全局自注意力计算,这样就减少了计算量,但是也隔绝了不同窗口之间的信息交流,随之作者提出后文的移动窗口自注意力计算(Shifted Windows Multi-Head Self-Attention(SW-MSA))。

在这里插入图片描述

 4. 总的来说Swin Transformer是一种改进的ViT,但是Swin Transformer该模型本身具有了划窗操作(包括不重叠的local window和重叠的cross-window),并且具有层级设计。

二、结构

 1. Swin Transformer的网络架构如下图所示:
在这里插入图片描述

 (1) 输入:首先输入还是一张图像数据,224(宽) ∗ 224(高) ∗ 3(通道)。
 (2) 处理过程:通过卷积得到多个特征图,把特征图分成每个Patch,堆叠Swin Transformer Block,与Swin Transformer Block在每次堆叠后长宽减半,特征图个数翻倍。
 (3) Block含义:最核心的部分是对Attention的计算方法做出了改进,每个Block包括了一个W-MSA和一个SW-MSA,成对组合才能串联成一个Block。W-MSA是基于窗口的注意力计算。SW-MSA是窗口滑动后重新计算注意力。

 2. 对于上图的流程解释如下:

  • 输入图片尺寸为H✖️W✖️3(假设是224✖️224✖️3),经过Patch Patition进行分块成为不重合的patch集合,其中每个patch的尺寸为4✖️4大小,在通道方向进行展平变成4✖️4✖️3=48,所以通过Patch Partition后图像尺寸由[H, W, 3](224✖️224✖️3)变成了[H/4, W/4, 48](56✖️56✖️48),patch块的数量为H/4 x W/4(56✖️56),然后通过一个Linear embedding将划分后的patch特征维度变成我们所预制好的值(Transformer能够接受的值),这里设置为超参数C。对于上图Swin-T来说,C=96,即图像shape再由[H/4, W/4, 48]变成了[H/4, W/4, C](56✖️56✖️96)。
  • 接下来如果想有多尺度的信息,那么就要构建一个层级式的Transformer,也就是说我们需要一个像卷积操作中类似于池化的操作,也就是紧接着的Patch Merging操作,shape会由[H/4, W/4, C](56✖️56✖️96)变成[H/8, W/8, C](28✖️28✖️192)具体怎么操作看下文讲解。
  • 然后通过三个阶段构建不同大小的特征图,除了阶段1中先通过一个Linear Embeding层外,剩下三个阶段都是先通过一个Patch Merging层进行下采样。

三、Patch Merging操作

 1. 下图展示Patch merging 的操作过程,顾名思义就是将邻近的小patch合并成一个大patch,这样就可以起到一个下采样特征图的效果了。

在这里插入图片描述

 2. 前面有说,在每个阶段中首先要通过一个Patch Merging层进行下采样(阶段1除外)。如上图所示,假设输入Patch Merging的是一个4✖️4大小的单通道特征图(feature map),Patch Merging会将每个2✖️2的相邻像素划分为一个patch,然后将每个patch中相同位置(同一颜色)像素给拼在一起就得到了4个feature map。接着将这四个feature map在深度方向进行Concat拼接,然后在通过一个LayerNorm层。最后通过一个全连接层在feature map的深度方向做线性变化,将feature map的深度由C变成C/2。通过这个简单的例子可以看出,通过Patch Merging层后,feature map的高和宽会减半,深度会翻倍。

四、W-MSA详解

 引入Windows Multi-head Self-Attention(W-MSA)模块是为了减少计算量。如下图所示,左侧使用的是普通的Multi-head Self-Attention(MSA)模块,对于feature map中的每个像素(或称作token,patch)在Self-Attention计算过程中需要和所有的像素去计算。但在图右侧,在使用Windows Multi-head Self-Attention(W-MSA)模块时,首先将feature map按照M✖️M(例子中的M=2)大小划分成一个个Window,然后单独对每个Window内部进行Self-Attention。
:这样计算量会大大减少。

在这里插入图片描述

五、SW-MSA详解

 1. 前面有说,采用W-MSA模块时,只会在每个窗口内进行自注意力计算,所以窗口与窗口之间是无法进行信息传递的。为了解决这个问题,作者引入了Shifted Windows Multi-Head Self-Attention(SW-MSA)模块,即进行偏移的W-MSA。

 2. 如下图所示,左侧使用的是刚刚讲的W-MSA(假设是第L层),W-MSA和SW-MSA它俩一般是成对使用的,构成一个Swin-Transformer Block,那么右侧图第L+1层使用的就是SW-MSA。根据左右两幅图对比能够发现窗口(Windows)发生了偏移可以理解成窗口从左上角分别向右侧和下方各偏移了 ⌊ M / 2 ⌋ ⌊M/2⌋ M/2 个像素

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

 3. 根据上图,可以发现通过将窗口进行偏移后,由原来的4个窗口变成9个窗口了。后面又要对每个窗口内部进行MSA,这样做感觉又变麻烦了。为了解决这个麻烦,作者又提出而了Efficient batch computation for shifted configuration,一种针对移位窗口配置的高效批处理计算方法。下面是原论文给的示意图。

在这里插入图片描述

 为了更好的理解可以参考下面的图:

在这里插入图片描述

 最终的结果中,4是一个单独的窗口,5和3合成一个窗口,7和1合成一个窗口,8,6,2,0合成一个窗口,它们大小都一样(图中画的不标准),这样就是4个4✖️4大小的窗口了,所以能够保证计算量是一样的。

 但是这样又有一个问题,把不同区域汇合到一起,它们之间的元素都是从很远的地方搬运过来的,所以它们之间不应该作自注意力,不应该有太多的联系(比如一张图的上面是天空,下面是土地,现在就是把部分天空移到了土地下面,再做自注意力就不太合适了)。所以为了防止这个问题,实际计算中使用掩码操作(Masked MSA),这样就能使用蒙版来隔绝不同区域的信息了,算出自注意力之后再进行还原。

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

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

相关文章

YOLOv9改进策略【模型轻量化】| ShufflenetV2,通过通道划分构建高效网络

一、本文介绍 本文记录的是基于ShufflenetV2的YOLOv9目标检测轻量化改进方法研究。FLOPs是评价模型复杂独的重要指标,但其无法考虑到模型的内存访问成本和并行度,因此本文在YOLOv9的基础上引入ShufflenetV2,使其在在保持准确性的同时提高模型…

十一. 常用类

文章目录 一、包装类1.1 包装类的继承关系1.2 包装类和基本数据类型的转换1.3 包装类与String之间的转换1.4 包装类的常用方法 二、String类2.1 String类的理解和创建对象2.2 String的创建方式2.3 字符串的特性2.4 String的常用方法 三、StringBuffer和StringBuilder类3.1 Stri…

重塑PDF编辑体验:最新在线工具深度评测

现在用PDF的场景多了,随之而来的加速了PDF编辑、转换工具的飞速发展,很多时候因为便捷大家更喜欢使用在线的工具。今天我就分享几款pdf在线编辑工具提高你文档处理效率。 1.福昕PDF编辑器 链接一下>>https://editor.foxitsoftware.cn 在沉浸阅…

Datawhale X 李宏毅苹果书 AI夏令营|机器学习基础之线性模型

1. 线性模型 线性模型是机器学习中最基础和常见的模型之一。在线性模型中,预测变量(输入特征)和目标变量(输出)之间的关系被建模为一个线性组合。数学形式可以表示为: 其中:x 是输入特征向量&a…

加速 PyTorch 模型:使用 ROCm 在 AMD GPU 上应用 torch.compile

Accelerate PyTorch Models using torch.compile on AMD GPUs with ROCm — ROCm Blogs 介绍 PyTorch 2.0 引入了一个名为*torch.compile()*的工具,可以极大地加速 PyTorch 代码和模型。通过将 PyTorch 代码转换为高度优化的内核,torch.compile 在现有代…

【深入理解SpringCloud微服务】深入理解微服务配置中心原理,并手写一个微服务配置中心

【深入理解SpringCloud微服务】深入理解微服务配置中心原理,并手写一个微服务配置中心 为什么要使用配置中心配置中心原理如何手写一个配置中心使用PropertySourceLocator监听配置变更,刷新配置 实现一个微服务配置中心服务端库表ConfigCenterController…

全国中学基础信息 API 数据接口

全国中学基础信息 API 数据接口 基础数据,高校高考,提供全国初级高级中学基础数据,定时更新,多维度筛选。 1. 产品功能 2024 年数据已更新;提供最新全国中学学校基本信息;包含全国初级中学与高等中学&#…

JavaWeb:实验一JSP运行环境安装及配置

一、实验目的 1.掌握JSP程序运行环境配置的基本要求。 2.熟悉HTML的常用标签使用以及静态网页的制作。 二、实验性质 验证性实验 三、实验内容 制作一个静态网站的基本页面index.html,要求如下: 1&#xff…

SQL 语言简明入门:从历史到实践

SQL(Structured Query Language)是数据库领域的核心语言。自20世纪70年代中期由IBM公司开发以来,SQL已经成为全球最广泛使用的数据库管理语言。 本文将以简洁明了的方式为您介绍SQL的历史、基本结构、核心语言组成以及其独特的特点和书写规则…

【软件部署】JumpServer堡垒机搭建及使用

目录 一、linux服务器docker搭建 二、linux服务器单机部署 1.环境安装 2.安装数据库和Redis 3.下载linux安装包并部署 4.安装启动后命令 5.通过浏览器访问部署服务器的地址 三、JumpServer产品使用 1、添加系统用户 2、创建资产 3、将主机/资源进行授权给用户 4、登录…

Day 7:条件编译

GCC编译器 预处理阶段: 1.gcc - E 文件名 :预处理文件 2.gcc - o 文件名 :重命名 gcc -E gcc.c gcc-o gcc.i:生成预处理文件。 vi gcc.i: 作用:展开头文件,宏进行替换。 编译阶段: gcc -…

希尔排序的图解展示与实现

什么是希尔排序 对整个数组进行预排序,即分组排序:按间距为gap分为一组,分组进行插入排序。 预排序的作用与特点 大的数更快地到后面,小的数更快地到前面; gap越大,跳得越快,排完接近有序慢&…

数据结构与算法---排序算法

文章目录 排序选择排序冒泡排序插入排序 希尔排序归并排序快速排序桶排序计数排序基数排序堆排序 排序 排序是指将一组数据按照特定的规则或顺序进行排列,比如一个数组[1, 5, 2, 4, 3]按照从小到大的顺序排列后就是[1,2,3,4,5]。 排序算法(Sorting alg…

lay数据表格(table)的多选框限制单选

TOC lay数据表格(table)的多选框限制单选 使用layui弹窗显示表格数据提供选择,最初使用单选框,选中后无法取消勾选,后该成多选框限制成单选,可点击已勾选复选框实现取消功能。 PS:easyui数据表格提供简单实现 多选框…

有哪些数据分析类的软件可供参考?

对于数据分析师来说,掌握以下数据分析工具很有必要,一个好的数据分析工具,可以使得数据分析工作事半功倍,相对于整个数据分析学习流程来说,掌握数据分析工具是学习数据分析的关键。 日常数据分析中,有80%的…

【电力系统】使用电力系统稳定器 (PSS) 和静态 VAR 补偿器 (SVC) 提高瞬态稳定性

摘要 电力系统在面对故障和扰动时,其瞬态稳定性是确保系统安全运行的关键因素。本文探讨了通过使用电力系统稳定器(PSS)和静态VAR补偿器(SVC)来提高电力系统瞬态稳定性的策略。通过仿真分析,证明了PSS和SV…

折腾 Quickwit,Rust 编写的分布式搜索引擎 - 可观测性之分布式追踪

概述 分布式追踪是一种跟踪应用程序请求流经不同服务(如前端、后端、数据库等)的过程。它是一个强大的工具,可以帮助您了解应用程序的工作原理并调试性能问题。 Quickwit 是一个用于索引和搜索非结构化数据的云原生引擎,这使其非常适合用作追踪数据的后端…

提升农业信息化水平,C# ASP.NET Vue果树生长信息管理系统带来全新管理体验

🍊作者:计算机毕设匠心工作室 🍊简介:毕业后就一直专业从事计算机软件程序开发,至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长:按照需求定制化开发项目…

【算法每日一练及解题思路】找出模式匹配字符串的异位词在原始字符串中出现的索引下标

【算法每日一练及解题思路】找出模式匹配字符串的异位词在原始字符串中出现的索引下标 一、题目:找出模式匹配字符串的异位词在原始字符串中出现的索引下标 二、举例: 两个字符串原始字符串initStr123sf3rtfb,模式匹配字符串regxf3s,找到模…

【读书笔记-《30天自制操作系统》-12】Day13

本篇的内容仍然是定时器的相关讲解。上一篇内容中对于中断程序做了许多优化,但是这些优化到底起了多少作用呢?本篇用一种测试方法来进行测试。然后本篇继续引入链表与哨兵的概念,进一步加快超时的中断处理。 1. 主程序简化 开发过程到了这…