Swin Transformer对CNN的降维打击(1)

一张图告诉你Transformer现在是多么的强!几乎包揽了ADE20K语义分割的前几名!

在这里插入图片描述

该文章详细解读Swin-transformer的相关内容以及高明之处。看完学不会,你在评论区打我!CNN已然在计算机视觉领域取得了革命性的成果,拥有着不可撼动的地位。Transformer最初用于NLP领域,但Transformer凭借其强大的特征表征能力,已经在cv领域杀出了一条血路。

paper链接:https://arxiv.org/pdf/2103.14030.pdf

代码链接:[https://github.com/microsoft/Swin-Transformer

]( )

二、Swin Transformer


2.1 背景

Transformer最开始用于NLP领域,但其强大的表征能力让cv领域的研究人员垂涎欲滴。然而从NLP转为cv领域,存在两个天然的问题。

  • 1.相较于文本,图像中像素的分辨率更高

  • 2.图像的视觉实体尺寸之间差异很大

传统Transformer(例如transformer、ViT等)尽管有强大的特征表达能力,但其巨大计算量的问题让人望而却步。与传统Transformer不同的是,Swin-Transformer解决了Transformer一直饱受诟病的计算量问题。那么,Swin-Transformer是如何解决的计算量问题呢?让我们继续往下看吧。

2.2 Architecture概况

学习swin transformer之前,我们首先需要熟知以下几个概念:

  • Resolution:假设一张图像的分辨率为224x224,这里所说的224就是像素。

  • Patch:所谓的Patch就是由多少个像素点构成的,假设一个patch的size为4x4,则这个patch包含16个像素点。

  • Window:window的size是由patch决定的,而不是由像素点,假设window的size为7x7,则该window包含49个patch,而不是49个像素点。

在对swin-transformer网络进行讲解之前,我们首先需要明确一点:无论是transformer还是swin-transformer结构,都不会改变输入的形状,换句话说,输入是什么样,经过transformer或swin-transformer后,输出跟输入的形状是相同的。

一般而言,我拿到一篇论文之后,会首先分析每个块的输入输出是怎样的,先从整体上对网络结构把握,然后在慢慢的细化。我们首先来梳理一下swin-transformer每个块的输入输出。

在这里插入图片描述

| stage | Layer | size |

| — | — | — |

| | input image | 224x224x3 |

| | patch partition | 224/4 x 224/4 x 4x4x3 |

| 1 | linear embedding | 224/4 x 224/4 x 96 |

| 1 | swin transformer | 224/4 x 224/4 x 96 |

| 2 | patch merging | 224/8 x 224/8 x 192 |

| 2 | swin transformer | 224/8 x 224/8 x 192 |

| 3 | patch merging | 224/16 x 224/16 x 192 |

| 3 | swin transformer | 224/16 x 224/16 x 192 |

| 4 | patch merging | 224/32 x 224/32 x 384 |

| 4 | swin transformer | 224/32 x 224/32 x 384 |

从结构图中可以看到,swin-transformer网络结构主要包括以下层:

  • 1.Patch Partition:将输入图像划分为若干个patch

  • 2.Linear Embedding:将输入图像映射要任意维度(论文中记为C,即C=96)

  • 3.Patch Merging:降低分辨率,扩大感受野,获得多层次的特征信息,类似于CNN中的pool层

  • 4.swin transformer:特征提取及特征表征

2.3 swin-transformer结构解析

到这里我们已经大致了解swin-transformer网络的基本结构,接下来,跟着我一块揭开Swin-transformer的真面目吧。一个swin-transformer block由两个连续的swin-transformer结构组成,两个结构不同之处在于:第一个结构中使用的是在一个window中计算self-attention,记为W-MSA;第二个结构中使用的是shifted window技术,记为SW-MSA。 在这一章节中,我们重点介绍swin-transformer是如何在一个window中进行self-attention计算的。

在这里插入图片描述

假设我们将window size设置为4,则一个window中包含4x4个Patch,如下图中的Layer l的不重叠窗口划分结果。但只在window中进行self-attention计算,使得各个windows之间缺乏信息的交互,这限制了swin-transformer的特征表达能力。

为此,swin-transformer的作者提出了top-left的窗口移位方式,如下图中Layer l+1所示。但这样的window移位方式增加了window的数量(从2x2->3x3),增加了2.25倍,且window之间的size也不尽相同,这导致无法进行并行计算。

在这里插入图片描述

基于上述两个原因,作者提出了shifted window技术,这也是整篇文章的核心所在。那么shifted window的过程是怎样的呢?

2.4 shifted window

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

Kafka实战笔记

关于这份笔记,为了不影响大家的阅读体验,我只能在文章中展示部分的章节内容和核心截图

image.png

  • Kafka入门
  • 为什么选择Kafka
  • Karka的安装、管理和配置

image.png

  • Kafka的集群
  • 第一个Kafka程序
  • image.png

afka的生产者

image.png

  • Kafka的消费者
  • 深入理解Kafka
  • 可靠的数据传递

image.png

image.png

  • Spring和Kalka的整合
  • Sprinboot和Kafka的整合
  • Kafka实战之削峰填谷
  • 数据管道和流式处理(了解即可)

image.png

  • Kafka实战之削峰填谷

image.png

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • Kafka实战之削峰填谷

[外链图片转存中…(img-iXCE46za-1713343922645)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 20
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值