首页 > 其他分享 >Swin-Transformer白话详解

Swin-Transformer白话详解

时间:2024-06-03 14:02:32浏览次数:14  
标签:map Transformer Swin 窗口 feature Patch 详解 像素 MSA

Swin-Transformer得益于其窗口注意力和偏移窗口注意力机制,平衡了感受野和计算效率,逐渐替代Vit成为了很多视觉网络的Backbone。下面将尽可能的清晰地解释其各个模块!

参考文献
nsformer网络结构详解

文章目录

1. SwinTransformer的创新点

在这里插入图片描述
从NLP转换为CV,Transformer存在两大难点:
(1)CV的尺度变化大,Transformer感受野有限,无法像CNN一样容纳多个尺度;
(2)CV的图像分辨率高,Transformer计算复杂度高。

基于以上难点,SwinTransformer分别通过以下方法进行改善:
(1)针对transformer感受野有限的难点
Swin Transformer 用 Hierarchical(分层级)的方式解决尺度变化大的难点,针对不同的尺度,每个stage设置了不一样的感受野,随着 stage 逐渐变大,感受野也逐渐变大。

(2)针对计算复杂度高的难点
Swin Transformer 使用分组方式(Windows-MSA)降低计算复杂度,而采用Shifted-windows进行组与组的信息交互。

2. Patch Partition和Linear Embeding

(1)Patch Partition
首先将图片输入到Patch Partition模块中进行分块,即每4x4相邻的像素为一个Patch,然后在channel方向展平(flatten)。假设输入的是RGB三通道图片,那么每个patch就有4x4=16个像素,然后每个像素有R、G、B三个值所以展平后是16x3=48,所以通过Patch Partition后图像shape由 [H, W, 3]变成了 [H/4, W/4, 48]。

(2)Linear Embedding
然后在通过Linear Embeding层对每个像素的channel数据做线性变换,由48变成C,即图像shape再由 [H/4, W/4, 48]变成了 [H/4, W/4, C]。其实在源码中Patch Partition和Linear Embeding就是直接通过一个卷积层实现的,和之前Vision Transformer中讲的 Embedding层结构一模一样。
在这里插入图片描述
流程如上图所示。

3. PatchMerging

上面有说,在每个Stage中首先要通过一个Patch Merging层进行下采样(Stage1除外)。如下图所示,假设输入Patch Merging的是一个4x4大小的单通道特征图(feature map),Patch Merging会将每个2x2的相邻像素划分为一个patch,然后将每个patch中相同位置(同一颜色)像素给拼在一起就得到了4个feature map。接着将这四个feature map在深度方向进行concat拼接,然后在通过一个LayerNorm层。最后通过一个全连接层在feature map的深度方向做线性变化,将feature map的深度由C变成C/2。通过这个简单的例子可以看出,通过Patch Merging层后,feature map的高和宽会减半,深度会翻倍,如下图所示:
在这里插入图片描述

4. W-MSA(窗口多头注意力机制) in TransformerBlocks

引入Windows Multi-head Self-Attention(W-MSA)模块是为了减少计算量。如下图所示,左侧使用的是普通的Multi-head Self-Attention(MSA)模块,对于feature map中的每个像素(或称作token,patch)在Self-Attention计算过程中需要和所有的像素去计算。但在图右侧,在使用Windows Multi-head Self-Attention(W-MSA)模块时,首先将feature map按照MxM(例子中的M=2)大小划分成一个个Windows,然后单独对每个Windows内部进行Self-Attention。
在这里插入图片描述
采用W-MSA模块时,只会在每个窗口内进行自注意力计算,所以窗口与窗口之间是无法进行信息传递的。

5. SW-MSA(偏移窗口多头注意力机制)

前面有说,采用W-MSA模块时,只会在每个窗口内进行自注意力计算,所以窗口与窗口之间是无法进行信息传递的。为了解决这个问题,作者引入了Shifted Windows Multi-Head Self-Attention(SW-MSA)模块,即进行偏移的W-MSA。如下图所示,左侧使用的是刚刚讲的W-MSA(假设是第L层),那么根据之前介绍的W-MSA和SW-MSA是成对使用的,那么第L+1层使用的就是SW-MSA(右侧图)。根据左右两幅图对比能够发现窗口(Windows)发生了偏移(可以理解成窗口从左上角分别向右侧和下方各偏移了⌊M /2⌋个像素)。看下偏移后的窗口(右侧图),比如对于第一行第2列的2x4的窗口,它能够使第L层的第一排的两个窗口信息进行交流。再比如,第二行第二列的4x4的窗口,他能够使第L层的四个窗口信息进行交流,其他的同理。那么这就解决了不同窗口之间无法进行信息交流的问题。
在这里插入图片描述
根据上图,可以发现通过将窗口进行偏移后,由原来的4个窗口变成9个窗口了。后面又要对每个窗口内部进行MSA,这样做感觉又变麻烦了。为了解决这个麻烦,作者又提出而了Efficient batch computation for shifted configuration,一种更加高效的计算方法。下面是原论文给的示意图。
在这里插入图片描述
然后计算的时候对非原区域的进行mask处理。

6. Relative position bias

在计算Attention时,swin-transformer的公式里新增了一个相对位置偏执B,如下:
在这里插入图片描述
相对位置索引计算:https://blog.csdn.net/weixin_40723264/article/details/127632545

先计算出相对位置索引,feature map的size确定了,索引的位置就是固定的。然后训练一个relative position bias table。所以最终训练的是relative position bias table里的值。
在这里插入图片描述
完结,撒花!

标签:map,Transformer,Swin,窗口,feature,Patch,详解,像素,MSA
From: https://blog.csdn.net/qq_41915623/article/details/139412685

相关文章

  • 【Java数据结构】详解Stack与Queue(一)
    ......
  • Content Security Policy 参数 值 详解
    例子:Content-Security-Policy:default-src'self';script-src'self'https://example.com;img-src'self'data:;style-src'self''unsafe-inline';font-src'self'https://example.com;这个CSP规......
  • 【代码+详解】算法题 : 菲波那契数列
    ❗❗❗必看:下列题我全部都使用Java语言写的,并且均可以提交成功,获得Accepted结果的.如果代码和详解看了之后,对答案有任何疑问,都可以在评论区提出来,我都会一个一个回答.❗❗❗感谢大家的支持,如果喜欢我的博客,关注点赞收藏评论一波,非常感谢!!!文章目录......
  • RabbitMQ的详解和使用
    一、什么是MQ?1、MQ的概念MQ全称MessageQueue(消息队列),是在消息的传输过程中保存消息的容器。多用于系统之间的异步通信。下面用图来理解异步通信,并阐明与同步通信的区别。同步通信:甲乙两人面对面交流,你一句我一句必须同步进行,两人除此之外不做任何事情 异步通信:异步通信......
  • AVL 树详解
    1AVL树的概念二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。因此,两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962年发明了一种解决上述问题的方法:当向二叉搜索树中插入新结点后,......
  • 适合技术小白学习的项目1840java swing社团管理系统myeclipse开发Mysql数据库CS结构ja
    一、源码特点   javaswing社团管理系统是一套完善的窗体设计系统,对理解SWINGjava编程开发语言有帮助,系统具有完整的源代码和数据库,,系统主要采用C/S模式开发。应用技术:java+mysql开发工具:Myeclipse8.5、jdk。二、功能介绍社团管理系统要满足以下几个方面的功能需求......
  • JS-11-es6常用知识-Promise(6K字超级详解!!)
    文章目录1回调地狱2 Promise函数基本用法3 Promise函数实现多层回调 4Promise传参5 Promise错误处理5.1两种错误处理方式5.2catch捕获错误5.3多层异步种使用catch6使用Promise的优势1回调地狱1)为什么要有promise?  解决(回调地狱)的问题 2)什......
  • 【Flutter】路由详解
    ......
  • [AIGC] 广度优先搜索(Breadth-First Search,BFS)详解
    广度优先搜索(Breadth-FirstSearch,简称BFS)是一种用于图或者树的搜索算法,它的特点是按照“广度”进行搜索,即在扩展搜索路线的时候,BFS会先考虑当前节点的所有邻近节点,也就是说,它逐层地进行搜索。文章目录基本原理实现方法应用场景总结基本原理广度优先搜索的基本......
  • 详解C语言system()函数,一个函数让初学者的代码有趣(一)
    一.为什么一定要学习system()函数             对于绝大多数初学者来说,我们在学习C语言的过程中,所写出来的内容大多都只能展现在冰冷的黑白程序框中,所实现的功能也是千篇一律,如果只是完成学习任务,那就够了,但是对于一个希望写出来一点高级东西的程序员,那是远......