Swin Transformer—使用平移窗口的分层视觉转换器结构

Swin Transformer解读

论文题目:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows.
官方代码地址:https://github.com/microsoft/Swin-Transformer.

引言与概括

  • ICCV2021的最佳论文作者是来自微软亚洲研究院。

  • SwinTransformer名字的由来:ShiftedWindows,swin名字的由来S+win。

  • 标题中提到的两个重点 Hierarchical:层级,为的是可以提取出多尺度的图像特征 Shifted Window:移动窗口。

摘要概括:

本文提出了一种新的vision Transformer,称为Swin Transformer,它能够作为计算机视觉的通用骨干网络。

从语言到视觉的挑战来自于这两个领域之间的差异,比如视觉实体规模的变化很大,以及图像中像素比文本中单词的高分辨率。为了解决这些差异,我们提出了一个分层Transformer,其表示是由Shifted windows计算的。Shifted windows方案将自注意计算限制在非重叠的局部窗口上,同时允许跨窗口连接,从而提高了更高的效率。

在这里插入图片描述

核心总结: 将之前在Vision Transform中的那个Vision Transform Block块 两个连接在一起,将第一个块中的多头注意力机制模块替换为了W-MSA 第二个块中的多头注意力机制模块替换为了SW-MSA

论文中提到了之前的Vision Transform中存在的一个问题(或者说是挑战)

在这里插入图片描述

输入的尺寸是W x H 而输出的尺寸依然是W x H 没有对其进行下采样的处理,从而缺乏多尺度的检测能力。

  • MSA : multi-head self-attention
  • W-MSA : windows - multi-head self-attention
  • SW-MSA:shifted windows - multi-head self-attention
    在这里插入图片描述

从而解决了Transform中的多尺度检测的问题。

整体网络结构(swin-tiny版本)

在这里插入图片描述

我们使用的是SWin -T的版本来进行讲解和说明的。

在这里插入图片描述

在代码实现的时候更多是参考下面的层来进行实现的。(执行分类任务加了一个用来分类的头

在这里插入图片描述

It first splits an input RGB image into non-overlapping patches by a patch splitting module, like ViT. Each patch is treated as a “token” and its feature is set as a concatenation of the raw pixel RGB。values. In our implementation, we usea patch size of 4×4 and thus the feature dimension of each patch is 4 × 4 × 3 = 48. A linear embedding layer is applied on this raw-valued feature to project it to an arbitrary dimension

和vision Transform 一样采样的是 Embedding层,对输入的图片进行处理,从而将输入的图像转变为token。在通过Linear Embedding将通道数扩展为原来的2倍。(其他的模型将通道的数目扩展到C)

从而将图像的高宽下采样了4倍,得到了对应的图中的第一个位置的w/4 H/4和 48的结果信息。

在这里插入图片描述

在这里插入图片描述

这两步在代码上面是使用的一个4x4的卷积层来之间进行实现的得到的是56x56x96的结果,最后将56x56进行一个展平的操作步骤。

在这里插入图片描述

对于不同的任务来说,在结构的最后需要使用到不同的形式来进行,例如对于分类任务在加入一个全连接层,和分类头。检测或者其他的任务可以进行进一步的类比。

之后的Patch Merging就相当于是一个进行下采样的一个操作。

Patch Merging部分

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

在这里插入图片描述

Windows Multi-head Self-Attention(W-MSA)

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

在这里插入图片描述

  • 方式:在每个window中独立的计算MSA
  • 优势:计算量较小、
  • 弊端:Windows之间没有信息交互

对于节省了多少计算量论文中给出了相关的公式来进行进一步的描述。

Ω ( 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

  • h代表featuremap的高度
  • w代表featuremap的宽度
  • C代表featuremap的深度
  • M代表每个窗口(Windows)的大小

MSA的计算量分析

首先引入矩阵乘法的计算量公式:

A a × b ⋅ B b × c FLOT:  a × b × c \begin{array}{l} A^{a \times b} \cdot B^{b \times c}\\ \text { FLOT: } a \times b \times c \end{array} Aa×bBb×c FLOT: a×b×c

自注意力机制计算量

对于feature map中的每个像素(或称作token,patch),都要通过 W q , W k , W v \mathrm{W}_{\mathrm{q}}, \mathrm{W}_{\mathrm{k}}, \mathrm{W}_{\mathrm{v}} Wq,Wk,Wv
生成对应的query(q),key(k)以及value(v)。这里假设q, k, v的向量长度与feature map的深度C保持一致。那么对应所有像素生成Q的过程如下式:

A h w × C ⋅ W q C × C = Q h w × C \mathrm{A}^{\mathrm{hw} \times \mathrm{C}} \cdot \mathrm{W}_{\mathrm{q}}^{\mathrm{C} \times \mathrm{C}}=\mathrm{Q}^{\mathrm{hw} \times \mathrm{C}} Ahw×CWqC×C=Qhw×C

A h w × C 为将所有像素 (token) 拼接在一起得到的矩阵 (一共有hw个像素,每个像素的深度为C)  A^{\mathrm{hw}} \times \mathrm{C} \text { 为将所有像素 (token) 拼接在一起得到的矩阵 (一共有hw个像素,每个像素的深度为C) } Ahw×C 为将所有像素 (token) 拼接在一起得到的矩阵 (一共有hw个像素,每个像素的深度为C) 

W q C × C 为生成query的变换矩阵  \mathrm{W}_{\mathrm{q}}^{\mathrm{C} \times \mathrm{C}} \text { 为生成query的变换矩阵 } WqC×C 为生成query的变换矩阵 

Q h w × C 为所有像素通过  W q C × C 得到的query拼接后的矩阵  \mathrm{Q}^{\mathrm{hw} \times \mathrm{C}} \text { 为所有像素通过 } \mathrm{W}_{\mathrm{q}}^{\mathrm{C} \times \mathrm{C}} \text { 得到的query拼接后的矩阵 } Qhw×C 为所有像素通过 WqC×C 得到的query拼接后的矩阵 

根据矩阵运算的计算量公式可以得到生成Q的计算量为hw×C×C,生成K和V同理都是hwC的2,那么总共是3hwC的2。接下来Q和KT相乘,对应计算量为(hw)的2C

Q h w × C ⋅ K T ( C × h w ) = X h w × h w \mathrm{Q}^{\mathrm{hw} \times \mathrm{C}} \cdot \mathrm{K}^{\mathrm{T}(\mathrm{C} \times \mathrm{hw})}=\mathrm{X}^{\mathrm{hw} \times \mathrm{hw}} Qhw×CKT(C×hw)=Xhw×hw

假设得到  Λ h w × h w ,最后还要乘以V,对应的计算量为  ( h w ) 2 C :  \text { 假设得到 } \Lambda^{\mathrm{hw} \times h w} \text { ,最后还要乘以V,对应的计算量为 }(\mathrm{hw})^{2} \mathrm{C} \text { : }  假设得到 Λhw×hw ,最后还要乘以V,对应的计算量为 (hw)2C : 

Λ h w × h w ⋅ V h w × C = B h w × C \Lambda^{\mathrm{hw} \times \mathrm{hw}} \cdot \mathrm{V}^{\mathrm{hw} \times \mathrm{C}}=\mathrm{B}^{\mathrm{hw} \times \mathrm{C}} Λhw×hwVhw×C=Bhw×C

将之前的计算量进行一个求和的操作就可以得到单头注意力机制的总体计算总量

3 h w C 2 + ( h w ) 2 C + ( h w ) 2 C = 3 h w C 2 + 2 ( h w ) 2 C 3 \mathrm{hwC}^{2}+(\mathrm{hw})^{2} \mathrm{C}+(\mathrm{hw})^{2} \mathrm{C}=3 \mathrm{hwC}{ }^{2}+2(\mathrm{hw})^{2} \mathrm{C} 3hwC2+(hw)2C+(hw)2C=3hwC2+2(hw)2C

多头注意力模块相比单头注意力模块的计算量仅多了最后一个融合矩阵wo计算量为hwc2

4 h w C 2 + 2 ( h w ) 2 C 4 \mathrm{hwC}^{2}+2(\mathrm{hw})^{2} \mathrm{C} 4hwC2+2(hw)2C

W-MSA的计算量

对于W-MSA模块首先要将feature map划分到一个个窗口(Windows)中,假设每个窗口的宽高都是M,那么总共会得到 h M × w M \frac{\mathrm{h}}{\mathrm{M}} \times \frac{\mathrm{w}}{\mathrm{M}} Mh×Mw
个窗口。

然后对每个窗口内使用多头注意力模块。刚刚计算高为h,宽为w,深度为C的feature map的计算量为。
4 h w C 2 + 2 ( h w ) 2 C 4 \mathrm{hwC}^{2}+2(\mathrm{hw})^{2} \mathrm{C} 4hwC2+2(hw)2C

这里每个窗口的高为M宽为M,带入公式得

4 ( M C ) 2 + 2 ( M ) 4 C 4(\mathrm{MC})^{2}+2(\mathrm{M})^{4} \mathrm{C} 4(MC)2+2(M)4C

结合最终得到的窗口的数目就可以得到最后的计算量了

h M × w M × ( 4 ( M C ) 2 + 2 ( M ) 4 C ) = 4 h w 2 + 2 M 2 h w C \frac{\mathrm{h}}{\mathrm{M}} \times \frac{\mathrm{w}}{\mathrm{M}} \times\left(4(\mathrm{MC})^{2}+2(\mathrm{M})^{4} \mathrm{C}\right)=4 \mathrm{hw}^{2}+2 \mathrm{M}^{2} \mathrm{hwC} Mh×Mw×(4(MC)2+2(M)4C)=4hw2+2M2hwC

Shifted Multi-head Self-Attention Window (SW-MSA)

目的:实现不同 Window之间的信息交互。

在这里插入图片描述
直观的理解就是在原来window的基础上分别向右和向下移动了两个单位的 将windows向右下角移动windowsize//2的位置大小。

根据信息的位置就可以看出下一层的窗口在计算的过程中就融合了之前各个窗口的信息,从而实现了交互的功能。

在这里插入图片描述

经过分离之后就可以偏离出9个窗口了。如下所示。

在这里插入图片描述

如何通过偏移窗口来进行计算的

参考上面的示意图:将0号区域标记为A,将1号和2号区域标记为B,将3号和六号区域标记为C

  1. 将A和C两个区域先移动到下方来完成第一步的操作。

在这里插入图片描述
2. 在将A和B的区域移动到最右边去完成第二步的一个操作。

在这里插入图片描述

  1. 将对应的区域坐标进行一个合并最后可以得到4x4的 4个划分的区域信息位置。

在这里插入图片描述
即分别为:

  • 4
  • 5 3
  • 7 1
  • 8 6 2 0

要单独的计算区域5的MSA和区域3的MSA部分,论文当中的图4中结合给出了一部分的说明,就是使用一个masked—MSA来完成。

移动完后,4是一个单独的窗口;将5和3合并成一个窗口;7和1合并成一个窗口;8、6、2和0合并成一个窗口。这样又和原来一样是4个4x4的窗口了,所以能够保证计算量是一样的。这里肯定有人会想,把不同的区域合并在一起(比如5和3)进行MSA,这信息不就乱窜了吗?是的,为了防止这个问题,在实际计算中使用的是masked MSA即带蒙板mask的MSA,这样就能够通过设置蒙板来隔绝不同区域的信息了。

masked掩膜操作就相当于是一个减法的操作步骤。使得3和5的两个区域保持独立的计算方式。

在这里插入图片描述

注意:在全部计算完成之后需要将数据在挪回到原来的位置上的,而不是使用应该移动之后的位置来进行一个计算的操作。向左和向上进行一个还原的操作步骤。

相对位置偏移(Relative bias position)

在这里插入图片描述

Attention ⁡ ( Q , K , V ) = SoftMax ⁡ ( Q K T / d + B ) V \operatorname{Attention}(Q, K, V)=\operatorname{SoftMax}\left(Q K^{T} / \sqrt{d}+B\right) V Attention(Q,K,V)=SoftMax(QKT/d +B)V

论文中的表4给出了使用相对位置偏移之后,可以提升一定的性能:

在这里插入图片描述

计算步骤

  1. 计算相对的位置

在这里插入图片描述
得到M x M大小的相对位置索引的矩阵信息。 有2m-1的平方中组合的方式。(因为取值的范围是-M+1到M-1的取值范围

在这里插入图片描述

  1. 对相对的位置进行编码处理。
    在这里插入图片描述

根据上一步生成的相对位置索引,得到相对位置偏移矩阵B最后根据相对位置偏移矩阵B结合之前提到过的位置索引矩阵得到最后的相对位置偏移带入公式中进行计算

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

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

相关文章

基础实践:使用JQuery Ajax调用Servlet

前言 本博客介绍最简单的JQuery(原生JS的封装库)使用Ajax发送请求,并通过对应的servlet响应数据,并在页面显示,并且servlet响应的数据来自MySQL数据库。 实现需求:在前端页面的输入框中输入要注册的用户名&…

依赖库查看工具Dependencies

依赖库查看工具:Dependencies Dependencies 是一款 Windows 平台下的静态分析工具,用来分析可执行文件(EXE、DLL 等)所依赖的动态链接库(DLL)。它可以帮助开发者和系统管理员快速查找程序在运行时可能缺少的…

【机器学习】--- 决策树与随机森林

文章目录 决策树与随机森林的改进:全面解析与深度优化目录1. 决策树的基本原理2. 决策树的缺陷及改进方法2.1 剪枝技术2.2 树的深度控制2.3 特征选择的优化 3. 随机森林的基本原理4. 随机森林的缺陷及改进方法4.1 特征重要性改进4.2 树的集成方法优化4.3 随机森林的…

论文浅尝 | KAM-CoT: 利用知识图谱进行知识增强的多模态链式推理(AAAI2024)

笔记整理:沈小力,东南大学硕士,研究方向为多模态大预言模型、知识图谱 论文链接:https://arxiv.org/abs/2401.12863 发表会议:AAAI2024 1. 动机 本文探索了知识图谱在扩展大语言模型的多模态能力的效果,提出…

在jupyter notebook中取消代理服务器的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

使用GPU 加速 Polars:高效解决大规模数据问题

Polars 最近新开发了一个可以支持 GPU 加速计算的执行引擎。这个引擎可以对超过 100GB 的数据进行交互式操作能。本文将详细讨论 Polars 中DF的概念、GPU 加速如何与 Polars DF协同工作,以及使用新的 CUDA 驱动执行引擎可能带来的性能提升。 Polars 核心概念 Polar…

go libreoffice word 转pdf

一、main.go 关键代码 完整代码 package mainimport ("fmt""github.com/jmoiron/sqlx""github.com/tealeg/xlsx""log""os/exec""path/filepath" ) import _ "github.com/go-sql-driver/mysql"import &q…

多态与绑定例题

答案: B D C 知识点: 多态是相同方法不同的表现,分为重写和重载 重写体现在父类与子类不同表现,主要表现为子类重现父类的方法 重载体现在同一个类中的不同表现 绑定分为动态绑定和静态绑定 动态绑定是在运行时 静态绑定是…

java23发布啦

2024年9月java23发布啦!!! JDK 23 提供了12 项增强功能,这些功能足以保证其自己的JDK 增强提案 - JEP ,其中包括 8 项预览功能和 1 项孵化器功能。它们涵盖了对 Java 语言、API、性能和 JDK 中包含的工具的改进。除了 Java 平台上…

《独孤九剑》游戏源码(客户端+服务端+数据库+游戏全套源码)大小2.38G

《独孤九剑》游戏源码(客户端服务端数据库游戏全套源码)大小2.38G ​ 下载地址: 通过网盘分享的文件:【源码】《独孤九剑》游戏源码(客户端服务端数据库游戏全套源码)大小2.38G 链接: https://pan.baidu.co…

走在时代前沿:让ChatGPT成为你的职场超级助手

在当今快节奏的工作环境中,时间和效率是宝贵的资源。人工智能(AI),尤其是自然语言处理技术的进步,为我们提供了强大的工具来优化工作流程。ChatGPT(Generative Pre-trained Transformer)就是其中…

计算机毕业设计之:基基于微信小程序的轻食减脂平台的设计与实现(源码+文档+讲解)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

PostgreSQL技术内幕10:PostgreSQL事务原理解析-日志模块介绍

文章目录 0.简介1.PG日志介绍2.事务日志介绍3.WAL分析3.1 WAL概述3.2 WAL设计考虑3.2.1 存储格式3.2.2 实现方式3.2.3 数据完整性校验3.3 check ponit 4.事务提交日志(CLOG)4.1 clog存储使用介绍4.2 slru缓冲池并发控制 0.简介 本文将延续上一篇文章内容…

59.【C语言】内存函数(memmove函数)

目录 2.memove函数 *简单使用 部分翻译 *模拟实现 方案1 方案2 1.有重叠 dest在src左侧 dest在src右侧 2.无重叠 代码 2.memove函数 *简单使用 memove:memory move cplusplus的介绍 点我跳转 对比第59篇的memcpy函数 对比memmcpy函数的介绍如下区别: 部分翻译 m…

金刚石切削工具学习笔记分享

CVD钻石-合成单晶钻石之一 金刚石具有极高的硬度和耐磨性、较低的摩擦系数、较高的弹性模量、较高的热导率、较低的热膨胀系数、与有色金属的亲和力较小等优点,是目前最硬的工具材料,主要分为单晶金刚石和聚晶金刚石两大类。单晶金刚石又分为天然单晶金…

常用卫星学习

文章目录 Landsat-8 Landsat-8 由一台操作陆地成像仪 (OLI) 和一台热红外传感器 (TIRS)的卫星,OLI 提供 9 个波段,覆盖 0.43–2.29 μm 的波长,其中全色波段(一般指0.5μm到0.75μm左…

CentOS Stream 9部署MariaDB

1、更新系统软件包 sudo dnf update 2、安装MariaDB软件包(替代mysql) sudo dnf install mariadb-server 3、安装MariaDB服务 sudo systemctl enable --now mariadb 4、检查MariaDB服务状态 sudo systemctl status mariadb 5、配置MariaDB安全性 sudo my…

锐捷 睿易路由器存在RCE漏洞

漏洞描述 锐捷Ruijie路由器命令执行漏 漏洞复现 FOFA: icon_hash"-399311436" 点击左下角的“网络诊断”,在“Tracert检测”的“地址”框中,输入127.0.0.1;ls,接着点击“开始检测”,会在检测框中回显命令执行结果。…

代码编辑器 —— SourceInsight实用技巧

目 录 Source insight 重要性一、创建项目二、代码浏览三、代码同步 Source insight 重要性 Source Insight 是一款功能强大的代码编辑器,在软件开发中占据着重要地位。 Source Insight 能够帮助开发者更高效地解读和修改代码,提高开发效率和代码质量。…

LeetCode_sql_day31(1384.按年度列出销售总额)

目录 描述 1384.按年度列出销售总额 数据准备 分析 法一 法二 代码 总结 描述 1384.按年度列出销售总额 Product 表: ------------------------ | Column Name | Type | ------------------------ | product_id | int | | product_name | var…