Swin-transformer详解

深度学习网络模型————Swin-Transformer详细讲解与代码实现 经典网络模型系列——Swin-Transformer详细讲解与代码实现 阅读详情


1️⃣ Swin-transformer介绍

Vision transformer将transformer应用到视觉领域,然而它存在一些问题:

  • 需要对特征图中的所有patch计算自注意力,即全局自注意力,导致计算开销大
  • 采用全局自注意力,每个patch都和其他patch进行交互,导致局部信息提取效率低

Swin-transformer是为了克服上述缺点而提出的,发表在2021年 ICCV上,其主要创新点就是引入窗口偏移(Shifted Window)机制,主要包括两块:

  • Windows Multi-head Self-Attention(W-MSA)
  • Shifted Windows Multi-Head Self-Attention(SW-MSA)

2️⃣ 原理介绍

下面这张图介绍了Swin Transformer的整体流程,看起来很复杂,现在我按照顺序逐一进行分析。
在这里插入图片描述

2.1 Patch Partition和Linear Embedding

假设有一张输入图片为224×224×3。经过Patch Partition变成56×56×48。关于Patch操作,看Patch Partition,一看就懂,包会的。

然后经过Linear Embedding,变成56×56×C,对于Swin-T结构,论文中的C设置的是96。56×56×96,表示56×56个patch,每个patch维度是96。transformer输入格式通常是序列长度×每个单词的Embedding维度,因此56×56会被拉直。因此变成3136×96,表示patch个数×patch维度,可以发现3136太大了,会导致耗费太多计算资源。因此作者提出W-MSA。关于为什么W-MSA会节省计算资源,看我下面的分析:

实际上,图中的Patch Partition和Linear Embedding类似于ViT里的Patch Projection,在代码里就是用一次卷积操作完成的。

具体的维度是什么,看一下代码

2.2 Swin Transformer Block

介绍例子之前,先声明两点:

  • Swin Transformer Block有两种block形式,一个是W-MSA,另一个是SW-MSA。注意这两个结构是成对使用的,先使用W-MSA再使用SW-MSA。因此Swin Transformer Block都是偶数。
  • Swin Transformer Block两种block形式都不会改变特征的维度,这是内部结构决定的

好了,我们来看下面这个例子:左图是对整个特征图进行MSA,每个patch都要和整个特征图中的其他patch进行交互,计算量大。

因此右图提出W-MSA,W-MSA将特征图划分为多个大小为 M × M M×M M×M的小窗口(windows),每个小窗口里有 M 2 M^2 M2个patch,并在每个窗口内独立地进行MSA。(一个大小为 H × W H×W H×W的特征图,下面这个小例子中窗口大小是 M = 2 M=2 M=2,因此特征图被划分成 H 2 × W 2 \frac{H}{2}×\frac{W}{2} 2H​×2W​个小窗口),计算量将显著减少,那会减少多少呢?

在这里插入图片描述

MSA和W-MSA的计算量公式为,具体推导过程见:Swin-Transformer网络结构详解
Ω ( 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{aligned}&\Omega(\mathrm{MSA})=4\mathrm{hwC}^2+2(\mathrm{hw})^2\mathrm{C}\\&\Omega(\mathrm{W}-\mathrm{MSA})=4\mathrm{hwC}^2+2\mathrm{M}^2\mathrm{hwC}\end{aligned} ​Ω(MSA)=4hwC2+2(hw)2CΩ(W−MSA)=4hwC2+2M2hwC​

其中h代表特征图高度,w代表特征图宽度,C代表特征图深度,M代表每个窗口(Windows)的大小。

假设特征图的h、w都为112,M=7, C=128, 采用W-MSA模块相比MSA模块能够节省约40124743680 FLOPs:
2 ( h w ) 2 C − 2 M 2 h w C = 2 × 11 2 4 × 128 − 2 × 7 2 × 11 2 2 × 128 = 40124743680 2(\mathrm{hw})^2\mathrm{C}-2\mathrm{M}^2\mathrm{hw}\mathrm{C}=2\times112^4\times128-2\times7^2\times112^2\times128=40124743680 2(hw)2C−2M2hwC=2×1124×128−2×72×1122×128=40124743680

然而W-MSA也存在一些问题,W-MSA只会在每个窗口内进行自注意力计算,窗口之间无法进行信息传递,为了解决该问题,作者提出了SW-MSA模块,即对窗口进行偏移,如下图所示:
在这里插入图片描述
左侧使用的是刚刚讲的W-MSA(假设是第L层),那么根据之前介绍的W-MSA和SW-MSA是成对使用的,那么第L+1层使用的就是SW-MSA(右侧图)。可以发现,右图窗口相较于左图窗口发生了偏移,具体怎么偏移的呢?

即窗口从左上角分别向右侧和下方各偏移了 ⌊ M 2 ⌋ ⌊ \frac{M}{2} ⌋ ⌊2M​⌋个像素, M M M是窗口大小,在论文中是4,因此偏移2个patch。

换一个更加直观的图进行理解:
在这里插入图片描述

可以发现通过将窗口进行偏移后,由原来的4个窗口变成9个窗口了。对于右图中中间4×4的窗口,它能使左图中4个窗口的信息联系起来,这样就解决了窗口之间无法进行信息传递的问题。
​

聪明的你可能发现了,原来是4个窗口,现在变成了9个窗口,而且窗口大小还不一样,此时没法组成一个batch进行处理了,有一个方法就是对小的窗口进行padding,把它们都变成大小为4×4的窗口,然后进行9次W-MSA,这不是给自己找事呢吗,确实是这样滴,因此作者为了解决这个事,又提出了Efficient batch computation for shifted configuration

论文中的操作如下图所示,有点看不懂,因此借鉴博客Swin-Transformer网络结构详解的描述:
在这里插入图片描述
下图左侧是刚刚通过偏移窗口后得到的新窗口,右侧是为了方便大家理解,对每个窗口加上了一个标识。然后0对应的窗口标记为区域A,3和6对应的窗口标记为区域B,1和2对应的窗口标记为区域C

在这里插入图片描述
然后先将区域A和C移到最下方:
在这里插入图片描述
接着,再将区域A和B移至最右侧:
在这里插入图片描述
移动完后,4是一个单独的窗口。但其他的还都是分散的,因此将5和3合并成一个窗口;7和1合并成一个窗口;8、6、2和0合并成一个窗口,神奇的发现,又和原来一样是4个4x4的窗口了。

但是有个问题,把不同的区域合并在一起后再进行MSA,信息不就乱了吗?

确实是这样,因此,采用masked MSA,通过设置掩码来隔绝不同区域的信息。

下面举个例子,例如左图所示,区域5和区域3组成了4×4窗口,里面共有16个patch,现在把窗口拉直(第一行从左到右,第二行从左到右以此类推),则变成了右图所示的样子,蓝色代表区域5的patch,绿色代表区域3的patch
在这里插入图片描述
有了输入X,我们就可以计算Q,K,V了,注意嗷,Q,K,V的大小是一样的。一定也是16行,按照和X同样的排列,两个区域5,两个区域3,以此类推。但是有多少列取决于网络设计,如下图所示:
在这里插入图片描述
有了Q,K,V,现在我们计算 Q K T QK^T QKT,如下图所示:
在这里插入图片描述
Q K T QK^T QKT的大小是16×16,其中蓝色部分表示 区域5的patch和区域5的patch相乘;绿色表示 区域3的patch和区域3的patch相乘;白色部分表示交叉相乘。因为我们隔绝不同区域的信息,因此白色部分都不考虑,所以想办法把它们都刨去。因此设计的掩码格式如下图所示,蓝色和绿色部分的掩码都是0,白色部分都是-100(没写出来,太乱了)。
在这里插入图片描述
然后让 Q K T QK^T QKT除以 d k \sqrt{d_k} dk​ ​得到 Q K T / d k QK^T/\sqrt{d_k} QKT/dk​ ​,再与掩码相加,注意是相加,transformer里是相乘。最后经过Softmax后,白色部分的值基本就趋近0了。这样就实现了隔绝不同区域的信息。

区域分布不同,掩码的格式也不同,论文的作者做了可视化,我举得这个例子就是下图中window1的情况:
在这里插入图片描述

再回头看一下Shift window后的图片:
在这里插入图片描述
我们通过上述不同的Mask MSA,对4个4×4的窗口进行masked MSA。最后计算完后还要把数据给挪回到原来的位置上

到这里对Swin Transformer Block的介绍就完成了。

2.3 Patch Mergeing

在这里插入图片描述

回想一下VGG16,每个VGG块是卷积+卷积+池化,通过每个块以后都是高宽减半,通道加倍。我下面拿VGG16的第二个块举例子,可以发现前两个卷积的作用是让通道加倍,而池化的作用是让高宽减半。
在这里插入图片描述
在Swin Transformer中,对于Stage2,Stage3到Stage4,每经过一个Stage,其实也是高宽减半,通道加倍。Stage1比较特殊,因为要对输入数据处理因此不看Stage1。

看一下Stage2,Stage3到Stage4的结构,都是先经过Patch Mergeing,然后经过N个Swin Transformer Block。前面也说过了,经过Swin Transformer Block并不改变特征的维度。那么高宽减半,通道加倍是怎么来的呢,显而易见,就是Patch Mergeing。

现在举个例子看一下Patch Mergeing的具体流程:

假设有一个4×4的特征图,假设通道数是1,按2×2将特征图划分成4部分(注意,对于Patch Mergeing,论文就是2×2,不是这个例子中是2×2)。
在这里插入图片描述

然后将每部分中相同位置(例子中就是颜色相同)的patch拼起来,变成4个2×2的特征图。再将这4个特征图在通道方向进行concat拼接,然后通过一个LayerNorm层。

这时候你应该发现,原始特征为4×4×1,现在变成了2×2×4,高宽确实减半了,但是通道变成4倍了。
在这里插入图片描述

因此,最后又通过一个全连接层在通道方向做线性变化,将深度又4变成2。特征由4×4×1变成了2×2×2,即高宽减半,通道加倍了。
在这里插入图片描述
下面是Patch Mergeing的整体流程:
在这里插入图片描述

2.4 Relative Position Bias

此部分参考博客Swin-Transformer网络结构详解的描述,感谢该博客的作者!

相对位置偏执 B B B通过下面的公式引入:
A t t e n t i o n ( Q , K , V ) = S o f t M a x ( Q K T d + B ) V \mathrm{Attention}(\mathrm{Q},\mathrm{K},\mathrm{V})=\mathrm{SoftMax}(\frac{\mathrm{QK}^\mathrm{T}}{\sqrt{\mathrm{d}}}+\mathrm{B})\mathrm{V} Attention(Q,K,V)=SoftMax(d

Swin transformer详解 本文介绍了一种称为的新视觉,它可以作为 CV 的通用主干。将 Transformer 从语言适应到视觉方面的挑战来自两个域之间的差异,例如视觉实体的规模以及相比于文本单词的高分辨率图像像素的巨大差异。为解决这些差异,我们提出了一种层次化 (hierarchical) Transformer,其表示是用移位窗口 (Shifted Windows)计算的。移位窗口方案通过将自注意力计算限制在不重叠的局部窗口的同时,还允许跨窗口连接来提高效率。这种分层架构具有在各种尺度上建模的灵活性,并且。 阅读详情

相关推荐

Swin Transformer详解: Hierarchical Vision Transformer using Shifted Windows

这篇文章使用和CNN类似的分层提取特征,来达到扩大感受野的效果。是一个特征提取的主干网络,backbone。分层特征提取,不断减小“feature map”的大小(token的数量)。关键部分是Shift window移动窗口(W-MSA、SW-MSA)ViT中使用不重叠的窗口,但是忽略了相邻窗口间的相关性,而Swin-T使用shfit windown移动(M/2)来弥补。但这样会引入很大的计算量,那么作者又提出了cyclic-shift 循环位移,保证计算量不变,但是这样的移动会使得相邻窗口间不相关的部.

qq_45122568的博客 1万+

Swin-Transformer详解

Swin-Transformer是2021年微软研究院发表在ICCV上的一篇文章,并且已经获得的荣誉称号。虽然在图像分类方面的结果令人鼓舞,但是由于其低分辨率特性映射和复杂度随图像大小的二次增长,其结构不适合作为密集视觉任务或高分辨率输入图像的通过骨干网路。为了最佳的精度和速度的权衡,提出了Swin-Transformer结构。

走在深度学习前沿的小宋 8151

视觉Transformer实战 | Swin Transformer详解与实现

Swin Transformer 是基于 Transformer 的视觉骨干网络,其核心思想是通过分层特征映射和移位窗口 (Shifted Windows) 注意力机制设计,实现了更高的计算效率和更好的性能。本文将详细介绍 Swin Transformer 的技术原理,并使用 PyTorch 从零开始实现 Swin Transformer 模型。

盼小辉丶的博客 781

瑞芯微RK3506开发板DSM音频开发避坑指南:从硬件改接到内核配置全流程

本文详细解析了在瑞芯微RK3506开发板上进行DSM音频开发的完整流程与关键避坑点。内容涵盖从硬件改造(如电阻焊接)、内核驱动配置(DTS参数、补丁应用)到系统调试与波形分析的全过程,旨在帮助嵌入式开发者高效实现高信噪比、低成本的音频方案,避免常见错误。

weixin_29164091的博客 399

点云工具CloudCompare下载、安装与汉化

打开软件后,是英文界面,找到菜单栏【Display】-【Language Translation】,选择简体中文。进入官网后,点击菜单栏【Download】提示需要重启软件才能生效,点OK即可。重启软件后,已经是中文了。选择合适系统进行下载。常规软件安装流程即可。

sagima_sdu的博客 1万+

别再为模糊的3D重建头疼了!手把手教你用3DSlicer处理DICOM数据,搞定医学影像三维可视化

本文详细解析了医学影像三维重建中常见的模糊问题,并手把手教你使用3DSlicer处理DICOM数据,实现精准的三维可视化。从层厚设置到数据格式转换,再到重建算法选择和渲染参数微调,提供了一套完整的优化方案,特别适合临床医生和医学影像处理人员提升工作效率。

weixin_28693447的博客 241

STM32实战:如何快速移植野火PID调试助手协议到你的电机控制项目

本文详细解析了如何将野火PID调试助手协议快速移植到STM32电机控制项目中。通过深度剖析协议帧格式、数据解析逻辑及环形缓冲区应用,提供了从工程结构规划、核心函数适配到串口中断集成的完整移植步骤。文章还分享了协议健壮性增强、数据上报频率优化等高级调试技巧,帮助开发者构建稳定可靠的上位机调试通道,大幅提升PID参数整定效率。

weixin_29171129的博客 462

使用 Simulink Real-Time 搭建一个完整的实时信号采集与滤波系统模型

本文详细介绍了基于Simulink Real-Time构建实时信号采集与滤波系统的完整流程。主要内容包括:系统配置(模型创建与参数设置)、信号采集模块搭建(模拟信号源或真实硬件连接)、实时滤波器设计(浮点/定点)、输出可视化(Scope/ToWorkspace等)、模型编译与下载到目标机、外部模式在线调试及数据保存方法。系统可实现微秒级实时信号处理,适用于工业控制、航空航天等对时间确定性要求高的场景。文章还提供了优化建议(多速率建模、优先级调度等)和应用场景说明,帮助读者快速掌握实时系统开发的核心技能。

amy_mhd的博客 298

Android CCodec (四) Output Buffer流程分析

Android 多媒体架构 Codec2 Output Buffer

给大佬递杯卡布奇诺的博客 3258

16、SQL Server索引的创建与评估

本文详细介绍了SQL Server中索引的创建与评估方法,涵盖索引的基本概念、类型(聚集与非聚集)、唯一性设置以及如何判断索引的好坏。通过实际操作步骤、维护策略和常见问题解决方案,帮助数据库开发者合理设计索引,提升查询性能并控制维护开销。同时提供了索引创建与维护的决策流程图,便于理解和应用。

water的专栏 124

STM32入门教程:WiFi通信

第四步:初始化串口 在生成的代码中,您可以找到一个名为 "USARTx_Init" 的函数,其中 "x" 是您选择的串口号。然后,我们使用 "AT+CIPSEND" 命令发送UDP数据,接收到服务器的回复,并在终端上显示收到的数据。在配置向导中,您可以选择启用USART串口功能,并根据您的硬件连接,将串口设置为与WiFi模块连接的串口。在上述代码中,我们使用了 "HAL_UART_Receive" 函数来接收串口数据,并使用 printf 来在终端上显示收到的数据。如果有任何问题,请随时向我提问。

2401_85258012的博客 1068

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

上一篇: Patch Partition
下一篇: Transformer详解
一去不复返的通信er
博客等级 码龄8年 5231粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值