Swin Transformer原理详解篇

🍊作者简介:秃头小苏,致力于用最通俗的语言描述问题

🍊往期回顾:CV攻城狮入门VIT(vision transformer)之旅——近年超火的Transformer你再不了解就晚了! CV攻城狮入门VIT(vision transformer)之旅——VIT原理详解篇 CV攻城狮入门VIT(vision transformer)之旅——VIT代码实战篇

🍊近期目标:写好专栏的每一篇文章

🍊支持小苏:点赞👍🏼、收藏⭐、留言📩

 

 

Swin Transformer原理详解篇

写在前面

​  在前面我们已经很系统的介绍了Transformer的相关知识,从NLP中的Transformer开始讲起,然后以此为基础详细的介绍了CV邻域VIT模型的原理和代码,对此部分不了解的可先点击下述链接了解详情:

  1. CV攻城狮入门VIT(vision transformer)之旅——近年超火的Transformer你再不了解就晚了! 🍁🍁🍁
  2. CV攻城狮入门VIT(vision transformer)之旅——VIT原理详解篇 🍁🍁🍁
  3. CV攻城狮入门VIT(vision transformer)之旅——VIT代码实战篇 🍁🍁🍁

​  那么这篇文章将为大家来讲讲Swin Transformer模型,在叙述这个模型之前大家可以去这个网站https://paperswithcode.com 看看这几年各项任务的sota,几乎都采用了swin Transformer模型,这足以彰显此模型的强大之处!!!【注意这个网站的paper后有个s喔,否则你可能会进入什么奇怪的网站😥这奇怪网站的域名起的可太无语了…🤐】

​  准备好了嘛,我们这就发车。🚖🚖🚖

 

网络整体框架

​  在谈及网络的框架之前,我们先来看看这篇Swin Transformer和我们之前所介绍的VIT模型有什么区别,论文中给出了下图:

image-20220819162819591

​  从直观上来看,左图(a)貌似比较复杂,相应的右图(b)就显得简单多了。再看的仔细点,可以发现(a)可以用于classification(分类)、segmentation(分割)、detection(检测)等一系列下游任务,而(b)就只用于classification,也就是说此篇Swin Transformer是视觉领域中一个通用的方案,可以应用于多种任务。🌼🌼🌼

​  我们再来看看上图中的一些细节,很容易发现,在(b)中图片一直都是采用16倍的下采样,【要是你了解VIT的原理这里肯定就明白,在图像输入的时候会用一个卷积对原图进行16倍的下采样,后面尺寸一直没变】 而在(a)中先是进行4倍下采样,然后是8倍,接着是16倍,一直这样下去,直到达到你想要的下采样倍数。这里特征图尺寸不断变小,是不是感觉和卷积非常像呢,其实这里和卷积的思想是一样的,采用这种层次化的构建方法有利于实现检测和分割任务。这里是怎么进行下采样的我们后文回详细讲解,大家现在其实就完全可以理解为卷积】 🌼🌼🌼

​  上图还体现了Swin Transformer很重要的一点,那就是窗口(windows)的概念。可以看到,(a)图中的特征图都被划分成了一个个的小窗口,Swin Transformer会将这些小窗口送入到Transformer模型中,这样做的好处是可以大幅减小计算量。【这部分是Swin Transformer的难点,也是重点,后文我也会详细的为大家介绍】🌼🌼🌼

​  介绍了Swin Transformer和ViT的一些区别,下面我们就来看看Swin Transformer的整体框架,如下图所示:

image-20220819171441397

​  图(a)为Swin Transformer的结构, 这里我们不解释每个结构的细节,而是看看经过这些结构维度的变化。首先假设输入图片尺寸为H×W×3,首先经过patch Partion将图片分成一个个patch,patch大小为4×4,则经过此步后一共会有Swin Transformer原理详解篇个patch,因图片有三个通道,故每个patch的尺寸为Swin Transformer原理详解篇 ,即我们通过Patch Partion结构得到特征图尺寸为Swin Transformer原理详解篇。接着我们会通过Linera Embedding层,这就是一个全连接层,会将刚刚Swin Transformer原理详解篇的特征图映射为Swin Transformer原理详解篇【如果你对ViT模型熟悉的话就会发现,这里基本是一样的。在ViT代码中这步操作是直接通过卷积实现的,Swin Transformer这部分代码同样是由一个卷积实现】

​  现在我们得到的是Swin Transformer原理详解篇的特征图,下面会通过Swin Transformer Block结构,这里我们可以先将其理解为ViT中的Transformer Encoder结构,经过这个结构后输出尺寸仍然为Swin Transformer原理详解篇。我们注意到这个结构下面写了一个×2,表示我们会重复这个结构两次。图(b)中表示的就是重复两次的Swin Transformer Block结构,这两次结构是有一些区别的且总是成对出现,因此后面的Swin Transformer Block重复的次数总是2的倍数。【注意上文所输入Swin Transformer Bolok的尺寸为Swin Transformer原理详解篇,但其实输入Transformer中的尺寸应是二维的向量,所以代码中我们会将前两个维度放一起,即维度变为Swin Transformer原理详解篇,之后将其送入Transformer中。同样输出也是二维的向量,我们得到后再将其展开即好。这些都是在阅读代码后才能知道的细节,大家稍加注意一点就好】

​  通过第一个Swin Transformer Block后,尺寸为Swin Transformer原理详解篇,会将其送入Patch Merging。这层实现了将特征图分辨率减半,通道数翻倍的操作,是不是很像CNN中的卷积呢,其实这里实现的功能是和卷积一模一样的,但是实现的方式有所不同,后文会详细解释。通过这层后,输出的特征图尺寸变为了Swin Transformer原理详解篇

​  接下来都是一些重复的结构了,相信大家通过我上文的描述也能理解了。那么下面就要为大家详细的介绍某些结构的细节了,接着往下看吧!!!🌻🌻🌻

网络结构细节🧨🧨🧨

Patch partition+Linear Embedding

​  为了保证网络结构的完整性,关于这个结构我再简单的提一下。其实在上文我也大概叙述了Patch partition+Linear Embedding是干什么的了,而且也说了在代码中是怎么实现的——通过一个卷积操作即可完成这两步。这里我不想再唠叨了,如果你还想知道更详细的信息,在我的VIT原理详解篇有关于此部分的详细描述,感兴趣的自己去看看吧!!!🥂🥂🥂

Patch Merging

​  按网络结构流程来讲,这部分应该是介绍Swin Transformer Block结构,但这是整篇文章最核心、最难理解也是内容最多的,所以我打算放在最后一节叙述,这样由易到难进行介绍大家可能会更好的接收。

​  其实啊,我上文已经说了经过Patch Merging会达到怎样的效果——特征图分辨率减半,通道数翻倍。那么Patch Merging具体做了什么呢?我们可以来看一下下图:

Swin Transformer原理详解篇

​  假设我们的输入是4×4大小单通道的特征图,首先我们会隔一个取一个小Patch组合在一起,最后4×4的特征图会行成4个2×2的特征图。【这部分看上图是很好理解的,但是在代码部分对Pathon语法不熟悉的可能觉得有点难理解,我会再下一篇代码解读中为大家详细讲讲代码是怎么实现的】接下来将4个Patch进行拼接,现在得到的特征图尺寸为2×2×4。然后会经过一个LN层,这里当然会改变特征图的值,我改变了一些颜色象征性的表示了一下,LN层后特征图尺寸不会改变,仍为2×2×4。最后会经过一个全连接层,将特征图尺寸由2×2×4变为2×2×2。到这里,就把Patch Merging的原理给介绍完了,大家可以看一下输入和输出的结果是不是实现了特征图分辨率减半,通道数翻倍呢?🏵🏵🏵

Swin Transformer Block✨✨✨

​这部分的结构如下图所示:

image-20220822104440562

​我们再来看一下ViT中的encoder结构,如下图所示:

image-20220822105029811

​  对照这两个图,你可能会发现结构基本是一样的。主要区别只在一个地方,即ViT Encoder绿框中的Multi-Head Attention和Swin Transformer Block紫框中的W-MSA(Windows Multi-Head Attention) \SW-MSA(Shifted Windows Multi-Head Attention)。Swin Transformer Block中的两个结构的区别也只在这里有所不同,下面我就重点来为大家讲讲W-MSA和SW-MSA。

W-MSA

​  下面先来看看W-MSA。何为W-MSA,即Windows Multi-Head Attention,它也是一个多头的自注意机制。它和传统的 Multi-Head Attention的区别就在于W-MSA会先将特征图分成一个个Windows,然后对每个Windows执行Multi-Head Attention操作,如下图所示:

Swin Transformer原理详解篇

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2023年2月25日 上午11:17
下一篇 2023年2月25日 上午11:21

相关推荐