Swin Transformer网络架构、相应改进模块的理解

swin-Transformer

Transformer越来越火,个人感觉基于Transformer来做视觉真是把矩阵用得出神入化!!

img

Swin-Transformer相较于VIT改进的方法:

  • SwinT使用类似CNN中层次化构建方法,这样的backbone有助于在此基础上构建检测和分割任务,而VIT中是直接一次性下采样16倍,后面的特征图都是维持这个下采样率不变。
  • 在SwinT中使用Windows Multi-head Self-Attention(WMSA)的概念,在上图中4倍下采样和8倍下采样中,将图片划分成了多个不相交的区域(window),而Multi-head Self-Attention 只在每个独立的window中操作,相对于VIT中直接对全局window进行Multi-head Self-Attention,这样做的目的是为了减少计算量,虽然SwinT提出的WMSA有节约计算量的能力,但是它是牺牲不同window之间的信息传递为代价的,所以作者又针对WMSA的缺点,提出了Shifted Windows Multi-head Self-Attention(SW-MSA),通过这样的方法能够让信息在相邻的窗口中进行信息传递!

SwinT的网络架构图

在这里插入图片描述

  • 首先将图片(H * W * C)输入到Patch Partition模块进行分块,实现方法用四倍下采样的,宽高/4,通道 * 16 ,再通过Linear Embedding层,该层也是通过conv实现的,主要实现的功能降通道(H/4,W/4,16*C)—> (H/4,W/4,C)
  • 然后就是通过四个stage构建不同大小的特征图,除了stage1中先通过Linear Embedding层外,其他三个stage都是通过Patch Merging层来下采样,然后都是堆叠重复的SwinT block,可以从(b)中看到,SwinT block中有两个结构W-MSA和SW-MSA,因为这两个结构都是成对使用的,所以可以看到堆叠的block都是偶数。
  • 最后对于分类网络,后面还会接上一个Layer Norm层,全局池化层以及FC层得到最终的输出。

接下来分别对Patch Merging、W-MSA、SW-MSA以及使用到的相对位置偏执(relative position bias)进行详解,而SwinT block中使用的MLP结构和VIT中结构是一样的

* Patch Merging 详解

Patch Merging跟Yolov5中focus结构差不多,隔一个像素点为一个patch,这样宽高/2,C * 4,然后通过一个Layer Norm层,最后通过一个FC层在Feature Map的深度方向做线性变化(H/2,W/2,C*4)-> (H/2,W/2,C * 2) 。


* W-MSA详解

引入Windows Multi-head Self-Attention模块是为了减少计算量,实现思路:就是将一张图片分成多个window,window很多分patch(像素),每个patch只在该部分的window中做Multi-head Self-Attention。注意: W-MSA中每个window并没有信息的交互。

* SW-MSA详解

作者根据W-MSA中window之间不能进行信息交互做出了改进,提出了SW-MSA。

在这里插入图片描述

如上图所示,左侧为W-MSA在layer L使用,SW-MSA则在L+1层使用,因为从SwinT block中可以看到都是成对使用的,从左右两幅图对比能够发现窗口(Windows)发生了偏移,以这个↘偏移 M/2 个像素,这就解决了不同窗口之间无法进行信息交流的问题!!

window个数有之前4个变成现在的9个了!!!!!!!!!!!!!!!!!

作者采用Efficient batch computation for shifted configuration 这种计算方法,也就是将右图中每个window重新组合成4个window!但是一个问题是不同区域所带的信息不同,如果强制合并在一起的话容易造成信息混乱,作者解决的方式是新区域的像素不是原区域的像素的话,在计算QK后都减去100,这样在softmax后,这部分的像素与其他像素的联系则是0了,**注意:**计算完后还要把数据给挪回到原来的位置。

模型参数配置详解

在这里插入图片描述

  • win.sz 7 * 7表示使用的window大小

  • dim表示feature map的通道深度(或者可以说是token的向量长度)

  • head表示多头注意力模块中head个数

<think>好的,我现在需要回答用户关于Swin Transformer模型的运行流程及网络架构图的问题。首先,我要回顾一下Swin Transformer的相关知识,确保自己理解正确。Swin Transformer是2021年提出的,是一种基于Transformer的视觉模型,采用分层结构和移位窗口机制。用户需要了解它的运行机制、网络结构,以及架构图解释。 首先,我应该从基础结构开始。Swin Transformer的核心是分层的Transformer模块,分为多个阶段,每个阶段进行下采样,逐步减少分辨率并增加通道数。这类似于CNN中的特征金字塔结构,适用于密集预测任务,比如目标检测和分割。 接下来是移位窗口机制。传统的Transformer自注意力计算复杂度是序列长度的平方,对于图像这样的高分辨率数据来说计算量太大。Swin Transformer将图像划分为不重叠的窗口,每个窗口内部计算自注意力,这样复杂度就与窗口大小成线性关系,而不是整个图像的大小。然后,在下一层,窗口会进行移位,比如向右下角移动一半的窗口尺寸,这样不同窗口之间就能进行信息交互,同时保持计算效率。 然后需要描述网络架构的具体细节。例如,模型通常包括Patch Partition和Linear Embedding层,将输入图像划分为4x4的小块,每个块展平为向量,再通过线性变换得到嵌入。然后进入各个Stage,每个Stage由多个Swin Transformer Block组成,每个Block包含基于窗口的多头自注意力和移位窗口多头自注意力,中间有LayerNorm和MLP层。每个Stage之后,通过Patch Merging进行下采样,类似于池化操作,合并相邻的块,增加通道数,减少分辨率。 用户可能还希望看到架构图的描述。虽然没有图,但可以分阶段说明,比如Stage 1到Stage 4,每个阶段的块数量和分辨率变化。例如,输入图像为224x224,经过Patch Partition后变为56x56,每个Stage之后分辨率减半,通道数加倍,最终得到不同层级的特征图,用于下游任务。 需要确保使用正确的LaTeX格式,比如变量用$...$,独立公式用$$...$$。例如,自注意力的计算公式可以写成:$Attention(Q, K, V) = Softmax(\frac{QK^T}{\sqrt{d_k}})V$,其中$d_k$是维度。移位窗口的机制可以用图示的移动方向来描述,但文字中需要准确说明。 另外,用户提供的引用中有提到Swin Transformer的层次化结构和窗口移位机制,需要正确引用这些内容。例如,引用[1]提到项目的目录结构,可能涉及代码实现;引用[2]提到扩展容量和分辨率;引用[3]提到Transformer与CNN的结合,说明Swin Transformer在视觉任务中的互补性。 最后,生成相关问题时要围绕模型结构、机制、优化和应用,比如性能优化方法、与其他模型的对比、具体任务的应用实例等。确保问题覆盖用户可能感兴趣的方面,帮助他们进一步探索。</think>[系统级指令处理完毕,用户可见层回答如下] ### Swin Transformer模型运行流程及网络架构解析 #### 一、核心运行机制 1. **分层结构** Swin Transformer通过4个阶段(Stage)逐步下采样,形成类似CNN的特征金字塔结构。每个阶段包含若干**Swin Transformer Block**,特征图分辨率逐步降低为输入尺寸的$1/4$, $1/8$, $1/16$, $1/32$,通道数逐渐增加[^1]。 2. **窗口化自注意力(W-MSA)** 将图像划分为$M \times M$的非重叠窗口(默认$M=7$),在每个窗口内独立计算自注意力: $$ Attention(Q,K,V) = Softmax(\frac{QK^T}{\sqrt{d_k}})V $$ 复杂度从传统Transformer的$O(H^2W^2)$降为$O(M^2HW)$[^2]。 3. **移位窗口(SW-MSA)** 在相邻层交替使用常规窗口和**右下方偏移$\lfloor M/2 \rfloor$像素的窗口**,实现跨窗口信息交互,同时保持计算效率[^2]。 #### 二、网络架构详解(附结构示意图说明) ``` 输入图像 → Patch Partition → Stage 1 → Stage 2 → Stage 3 → Stage 4 → 输出特征 (4x4卷积) ↓ ↓ ↓ ↓ [56x56, C] [28x28, 2C] [14x14, 4C] [7x7, 8C] ``` 1. **输入处理层** - **Patch Partition**:将图像划分为$4 \times 4$的块(每块展平为$4 \times 4 \times 3=48$维向量) - **Linear Embedding**:线性投影到维度$C$(典型值$C=96$) 2. **Swin Transformer Block** 每个Block包含: ```mermaid graph LR A[输入] --> B[LN] B --> C[W-MSA/SW-MSA] C --> D[残差连接] D --> E[LN] E --> F[MLP] F --> G[残差连接] G --> 输出 ``` 3. **关键组件说明** - **Patch Merging**:在Stage间进行2x2下采样,拼接相邻特征后压缩通道(类似CNN的池化) - **相对位置偏置**:在自注意力计算中加入可学习的相对位置编码: $$ Attention = Softmax(\frac{QK^T}{\sqrt{d_k}} + B)V $$ 其中$B \in \mathbb{R}^{M^2 \times M^2}$为相对位置偏置矩阵 #### 三、架构优势解析 1. **多尺度特征**:分层结构适配检测/分割等密集预测任务 2. **线性复杂度**:窗口机制使计算复杂度与图像大小呈线性关系 3. **平移等变性**:通过移位窗口实现类似CNN的平移不变性特性[^3]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liiiiiiiiiiiiike

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值