【论文笔记】:Swin transformer(转载)

在这里插入图片描述

&Summary

作者单位:微软亚洲研究院

  1. 目标检测刷到58.7 AP(目前第一)!
  2. 实例分割刷到51.1 Mask AP(目前第一)!
  3. 语义分割在ADE20K上刷到53.5 mIoU(目前第一)!
  4. 性能优于DeiT、ViT和EfficientNet等主干网络

本文介绍了一种称为Swin Transformer的新型视觉Transformer,它可以用作计算机视觉的通用backbone。在两个领域之间的差异,例如视觉实体尺度的巨大差异以及与文字中的单词相比,图像中像素的高分辨率,带来了使Transformer从语言适应视觉方面的挑战。

为了解决这些差异,我们提出了一个分层的Transformer,其表示是通过移动窗口来计算的。通过将自注意力计算限制为不重叠的局部窗口,同时允许跨窗口连接,移位的窗口方案(通过将self-attention计算限制在非重叠的局部窗口上,同时允许跨窗口连接,从而提高了效率)带来了更高的效率。这种分层体系结构具有在各种尺度上建模的灵活性,并且相对于图像大小具有线性计算复杂性。

Transformer是为序列建模和转换任务而设计的,因为它关注数据中的长期依赖性建模。它在语言领域的巨大成功促使研究人员研究它对计算机视觉的适应性,最近它在某些任务上显示了不错的结果,特别是图像分类和联合视觉语言建模。

显示了基于Transformer的模型作为视觉支柱的潜力。

存在许多视觉任务,如语义分割,需要在像素级进行dense的预测,这对于高分辨率图像上的Transformer来说是很困难的,因为它self-attention的计算复杂度是图像大小的二次方。提出的Swin-Transformer,它构造了层次化的特征映射,并且计算复杂度与图像大小成线性关系。

&Methods

在这里插入图片描述

如上图所示,Swin-Transformer通过从小尺寸的面片(用灰色表示)开始,逐渐合并更深层次的Transformer层中的相邻面片来构造层次表示。有了这些分层特征映射,Swin-Transformer模型可以方便地利用高级技术进行dense预测,如特征金字塔网络(FPN)或U-Net。线性计算复杂度是通过在分割图像的非重叠窗口(红色轮廓)内局部计算自我注意来实现的。每个窗口中的面片数是固定的,因此复杂度与图像大小成线性关系。

这些优点使得Swin-Transformer适合作为各种视觉任务的通用主干,与以前基于Transformer的体系结构形成对比,后者产生单一分辨率的特征图,并且具有二次复杂性。

Swin Transformer的一个关键设计元素是它在连续的self-attention之间的窗口分区的移动,如下图所示:
在这里插入图片描述
移动的窗口桥接了前一层的窗口,提供了它们之间的连接,显著增强了建模能力。这种策略对于真实世界的延迟也是有效的:一个窗口中的所有query patches都共享相同的key set,这有助于硬件中的内存访问。

相比之下,早期的基于滑动窗口的self-attention方法由于不同query像素的key集合不同,在一般硬件上的延迟较低。实验结果表明,所提出的shifted window方法比传统方法具有更低的延迟。

所提出的Swin Transformer在图像分类、目标检测和语义分割等识别任务上取得了很好的效果。在这三个任务上,它的延迟时间与ViT/DeiT和ResNe(X)t模型相似,显著优于ViT/DeiT和ResNe(X)t模型。

整体架构

在这里插入图片描述

Stage1

首先通过像ViT一样的分片模块将输入的RGB图像分片成不重叠的patch。每个patch被视为一个“token”,其特征被设置为原始像素RGB值的串联。

在我们的实现中,我们使用了4×4的面片大小,因此每个面片的特征维数为4×4×3=48。在这个原始值特征上应用一个线性嵌入层,将其投影到任意维(表示为C)。变化过的self-attention(Swin Transformer blocks)被应用到这些patch token上。Transformer block保留了token的个数()并且使用了线性的Embedding。

Stage2

为了生成一个层次化的表示,当网络变得更深,token的数量会通过patches合并层而减少。第一块拼接层连接了每组2×2相邻的patch的特征,并在维级联特征上应用线性层。这将token的数量减少了2×2=4的倍数(分辨率的2×降采样),并且输出维度设置为2C。之后应用Swin Transformer block进行特征变换,分辨率保持在。

Stage3&4

将该过程重复两次,输出分辨率分别为和。这些阶段共同产生一个层次表示,具有与典型卷积网络相同的特征图分辨率,例如VGG和ResNet。因此,所提出的架构可以方便地取代现有方法中的主干网来执行各种视觉任务。

Swin transformer block

Swin Transformer是将Transformer模块中的标准multi-head self-attention(MSA)模块替换为基于移动窗口,其它层保持不变。Swin Transformer由一个基于移位窗口的MSA模块组成,然后是一个介于GELU非线性之间的2层MLP。在每个MSA模块和每个MLP之前应用LayerNorm(LN)层,在每个模块之后应用剩余连接。

基于shifted window 的self-attention

标准Transformer体系结构及其对图像分类的自适应都进行global self-attention,其中计算了一个token和所有其他token之间的关系。全局计算导致token数量的二次复杂度,这使得它不适用于许多需要大量令牌进行密集预测或表示高分辨率图像的视觉问题。

  1. Self-attention in non-overlapped windows
  2. Shifted window partitioning in successive blocks
    基于窗口的自self-attention模块缺乏跨窗口的连接,这限制了它的建模能力。为了在保持非重叠窗口计算效率的同时引入跨窗口连接,我们提出了一种移位窗口划分方法,该方法在连续的Swin Transformer块中交替使用两种划分配置。如上图所示,第一个模块使用了一个从左上角像素开始的规则窗口划分策略,第一个模块采用将8×8 特征map平均划分为2×2个4×4(M=4)的窗口。然后,下一模块采用从上一层的窗口配置偏移的窗口配置,通过将窗口从规则分区的窗口置换像素。利用移位窗口划分方法,连续的swin transformer块被计算为:
    • W-MSA:使用regular窗口分区配置的基于window的multi-head self-attention
    • SW-MSA:使用移动的窗口分区配置的基于window的multi-head self-attention
      移位窗口分割方法引入了前一层相邻非重叠窗口之间的连接,被发现在图像分类、目标检测和语义分割上是非常有效的。
architecture variants

我们建立了与ViTB/DeiT-B相似计算复杂度的模型Swin-B,并介绍了Swin-T、Swin-S和Swin-L,它们分别是模型大小和计算复杂度的0.25倍、0.5倍和2倍。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
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 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值