Swin-Transformer详解

在传统的CNN网络中,存在一些缺陷,当堆叠的卷积核太少时候,网络的感受野会比较小,不能表达全局信息,Attebtion能够让我们去关注前景忽略背景,Swin-Transformer的提出最早是为了减小运算量,适应图像分割等问题,在论文中,有patch和token两个概念,我认为当特征存在H和W维度的时候,他就是patch,当H和W相乘时候就是token,当然,他们都是指的的同一组特征,所以很多地方把他们通用。以上为Swin-Transformer的总体流程,下面本文将对网络中每一个结构做详尽介绍:

 1.Patch Partition(图像块分割)+Linear Embeding(线性嵌入)

两个过程的实现为使用一个二维卷积(Conv2d),输入通道数:3,输出通道数:C=96(在这里不是48=3*4*4,因为在代码中Patch Partition和Linear Embeding通过一个二维卷积实现,在这里是使用了96个卷积核,根据网络大小不同还可以128、192),卷积核大小和步长都为4。然后进行了归一化(Layer Norm)

 2.Patch Merging(图像块合并)

 图来源

 上图为Patch Merging的一个样例,取一个通道的特征进行讲解,用一个2×2的窗口在特征图上步长为2滑动,每个窗口会被分成四个区域,根据区域不同把一张特征图分为四份,然后在通道深度方向进行拼接,拼接后在通道方向进行归一化(LayerNorm),然后使用全连接使深度变为2。与原图相比高和宽变为原来一半,深度变为原来的二倍。全连接如下:

nn.Linear(4 * dim, 2 * dim, bias=False)

 为了提高模型的表征能力,随着网络的加深,通过Patch Merging来减少token(Patch)的数量

3.W-MSA & SW-MSA

上图中,左面是一个MSA模块,其中有多个patch,每一个patch都会与其他的patch进行沟通(q,k)计算,在右面,是swin-Transformer中的W-SMA他会把特征图分割为多个window(窗口),窗口中的每个patch只会和窗口内的patch进行self-attention计算。 

目的:减少计算量

缺点:窗口之间无法进行信息交流

为了解决上面窗口之间无法进行信息交流的缺点,通过cyclic shift 把窗口进行移动,这样就可以聚合不同窗口之间的信息。

Shift Window的使用可以实现不同Window之间的信息交互。

Shift Window的过程指的是将window窗口向右和向下移动一定的距离,一般是两个patch的距离,移动之后,特征图的边缘会存在一些多余的突出特征和一些空白的部分,我们把突出特征补充到空白处,可以生成可被窗口分割的特征图,但是补充而来的特征图会与其周围特征形成一个新的窗口,窗口之间的patch会进行self-attention计算,这是我们不想看到的,所有我们使用一个masked MSA(蒙版),防止拼接window不同区域之间的计算。

 如图,区域5和区域3两个区域拼接到了一个window里,我们在进行QK相乘,然后除每个Head的维度(dim)开方,再加上mask蒙版(nw, Mn*Mw, Mn*Mw)中的值,给我们不想看到的数据加上一个-100,这样就会在让这个值在进行softmax之后的值为0,进而和V的乘积也会是零

4. Window Attention

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Transformer在许多NLP(自然语言处理)任务中取得了最先进的成果。 Swin Transformer是在ViT基础上发展而来,是Transformer应用于CV(计算机视觉)领域又一里程碑式的工作。它可以作为通用的骨干网络,用于图片分类的CV任务,以及下游的CV任务,如目标检测、实例分割、语义分割等,并取得了SOTA的成果。Swin Transformer获得了ICCV 2021的最佳论文奖。本课程对Swin Transformer的原理与PyTorch实现代码进行精讲,来帮助大家掌握其详细原理和具体实现;并且使用Swin Transformer对17个类别花朵数据集进行图片分类的项目实战。  Ÿ   原理精讲部分包括:Transformer的架构概述、Transformer的EncoderTransformer的Decoder、Swin Transformer的网络架构、Patch Merging、SW-MSA、Relative Position Bias、MSA与W-MSA计算量分析、实验结果及性能。 Ÿ   项目实战部分包括:安装软件环境和PyTorch、安装Swin-Transformer、数据集自动划分、修改配置文件、训练数据集、测试训练出的网络模型。Ÿ   代码精讲部分使用PyCharm对Swin Transformer的PyTorch代码进行逐行解读,包括:PatchEmbed、SwinTransformerBlock、PatchMerging、推理过程和训练过程实现代码解读。 相关课程:Transformer原理与代码精讲(PyTorch)https://edu.csdn.net/course/detail/36697Transformer原理与代码精讲(TensorFlow)https://edu.csdn.net/course/detail/36699ViT(Vision Transformer)原理与代码精讲 https://edu.csdn.net/course/detail/36719DETR原理与代码精讲 https://edu.csdn.net/course/detail/36768Swin Transformer实战目标检测:训练自己的数据集 https://edu.csdn.net/course/detail/36585Swin Transformer实战实例分割:训练自己的数据集 https://edu.csdn.net/course/detail/36586 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值