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个数

  • 1
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Swin Transformer是一种基于Transformer架构的视觉识别模型,它的主要特点是将图像分成若干个小的块,然后通过交叉连接的方式在这些块之间进行信息交换,从而达到更好的特征提取和分类效果。Swin Transformer包括以下几个模块: 1. Patch Partition:将输入的图像分成若干个小的块,称为patch,每个patch包含若干个像素点,这样可以使得模型可以处理更大的输入图像,并且可以减少计算量。 2. Shifted Window:在Patch Partition的基础上,Swin Transformer使用Shifted Window的方式来计算每个patch的特征,这种方式可以使得每个patch的特征都包含上下文信息,从而提高模型的准确率。 3. Swin Transformer Block:这是Swin Transformer的核心模块,它包含若干个Transformer Block,每个Transformer Block包含多头自注意力机制、多头交叉注意力机制和全连接层,这些模块共同作用,实现对输入特征的处理和转换。 4. Layered Architecture:Swin Transformer使用分层的结构,使得模型可以处理不同分辨率的特征,从而可以提高模型的鲁棒性和泛化能力。 5. Feature Fusion:为了使得模型可以融合不同层次的特征信息,Swin Transformer使用了特征融合的方式,将不同分辨率的特征进行融合,从而提高模型的分类能力。 总之,Swin Transformer通过分块、分层、特征融合等多种方式,实现了对图像特征的高效提取和分类,是一种非常有效的视觉识别模型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

liiiiiiiiiiiiike

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

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

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

打赏作者

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

抵扣说明:

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

余额充值