Swin Transformer 浅析

Swin Transformer 浅析

文章目录

  • Swin Transformer 浅析
    • 引言
    • Swin Transformer 的网络结构
    • W-MSA 窗口多头注意力机制
    • SW-MSA 滑动窗口多头注意力机制
    • Patch Merging 图块合并

引言

因为ViT无法实现CNN中的层次化构建以及局部信息,由此微软团队提出了Swin Transformer来解决该问题。

Swin Transformer 的网络结构

HiT-arch-v2_00

其中Swin Transformer的结构采用层级化设计,一共分为4个阶段。

设将一个图像 ( H , W , 3 ) (H,W,3) (H,W,3)输入到Patch Partition模块中进行分块,设每一个Patch为 4 × 4 4\times4 4×4的大小,则每一个Path的大小为16个像素,所以可以将一个大小为 ( H , W , 3 ) (H,W,3) (H,W,3)大小的图像转换为 ( H 4 , H 4 , 4 × 4 × 3 ) (\frac{H}{4},\frac{H}{4},4\times4\times3) (4H,4H,4×4×3),然后通过Linear Embeding层将一个 ( H 4 , H 4 , 48 ) (\frac{H}{4},\frac{H}{4},48) (4H,4H,48)的向量大小的Patch转化为 ( H 4 , H 4 , C ) (\frac{H}{4},\frac{H}{4},C) (4H,4H,C)的大小,其中Patch Partition和Linear Embeding可以直接通过一个卷积层实现的。也就是说以图像大小224×224×3为例,经过第一层后数据维度变为56×56×(4×4×3), 之后送入阶段1进行处理。

然后通过四个Stage构建不同大小的特征图,除了Stage1中先通过一个Linear Embeding层外,剩下三个stage都是先通过一个Patch Merging层进行下采样。

其中Swin Transformer采用了窗口内自注意力(W-MSA),在阶段1中,数据从线性嵌入层出来之后,维度大小变为3136×96,这对于 Transformer块来说过大,因此需采用窗口内自注意力计算减小计算复杂度。

其中Swin-T block的结构如图所示

image-20240418203541859

W-MSA 窗口多头注意力机制

Swin-T将特征图划分为多个窗口,然后对每一个窗口进行自注意力的计算,这可以有效的的减少计算量。

image-20240418193244738

具体来说,自注意力计算流程如下图所示。向量与三个系数矩阵相乘后分别得到Q、K和V。然后Q与K相乘得到自注意力A,A再与V相乘,然 后经过投射层得到最终结果。

image-20240418193333930

普通的自注意力计算复杂度为 Ω ( M S A ) = 4 h w C 2 + 2 ( h w ) 2 C \Omega(MSA)=4hwC^2+2(hw)^2C Ω(MSA)=4hwC2+2(hw)2C,而窗口内自注意力计算复杂度为 Ω ( W − M S A ) = 4 h w C 2 + 2 M 2 C \Omega(W-MSA)=4hwC^2+2M^2C Ω(WMSA)=4hwC2+2M2C​。

SW-MSA 滑动窗口多头注意力机制

Swin Transformer使用窗口内自注意力计算,虽然可以大大减小计算复杂度,但是也让不同像素块缺少与其他像素块之间的联系。为了增加感受野,变相达到全局建模的能力,于是作者提出了滑动窗口机制。

如下图所示,红色正方形围住的部分是窗口,每个窗口内灰色的正方形为像素块。每次滑动时,窗口都向右下方向移动2个像素块。于是Layer l+1的第2个窗口(从1开始计算)综合了layer l的第1个和第2个窗口的信息,Layer l+1的第5个窗口(从1开始计算)综合了layer l的所有窗口的信息,所以可以综合获得全局信息。

teaser_v4

如图所示设窗口大小为 4 × 4 4\times4 4×4。窗口的移动步长为 2 × 2 2\times2 2×2左上角从第0行第0列移动到第2行第2列由此产生了9个大小不一致的窗口,为了降低计算了,作者通过移动窗口的方式重新和合并成4个 4 × 4 4\times4 4×4的窗口。如下图所示。

HiT-layer2_00

但是在这样得到的新窗口内可能存在两个本来相距很远的像素块,它们本 来不应该放在一起计算,因此使用掩码多头自注意力解决,通过设置蒙板来隔绝不同区域的信息。在计算完毕后,再将其复原,否则该图就不断往右下方向循环下去了。

Patch Merging 图块合并

从阶段2开始,之后的每一阶段都是一个像素块合并层和Swin Transforme块,其中像素块合并层类似于卷积神经网络中的池化层,经过像素块合并层之后,数据的宽和高为原先的1/2,通道数为原先的2倍。

Patch Merging structure diagram. | Download Scientific Diagram

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/825652.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言(二维数组)

Hi~!这里是奋斗的小羊,很荣幸各位能阅读我的文章,诚请评论指点,关注收藏,欢迎欢迎~~ 💥个人主页:小羊在奋斗 💥所属专栏:C语言 本系列文章为个人学习笔记&#x…

15.7 2011年42题真题讲解

2,4,6,8,11,13,15,17,19,20 可以推出题目的一个隐含条件:偶数个元素的中位数是靠前的那一个 应试技巧:如果实在想不出高效的算法,那…

Linux下跟踪某个进程的内核处理时延消耗情况

1.利用系统自动的trace功能,编辑如下脚本,vim trace_process.sh #!/bin/sh cd /sys/kernel/debug/tracing/ #清空原有跟踪信息 echo > trace echo nop > current_tracer #设置要跟踪的进程 echo "pid281255" echo 281255 > set_ftra…

基于springboot+vue+Mysql的房产销售平台

开发语言:Java框架:springcloudJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包&#xff1a…

【详细讲解CentOS常用的命令】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

SQLite FTS5 扩展(三十)

返回:SQLite—系列文章目录 上一篇:SQLite的知名用户(二十九) 下一篇:SQLite—系列文章目录 1. FTS5概述 FTS5 是一个 SQLite 虚拟表模块,它为数据库应用程序提供全文搜索功能。在最基本的形式中, 全文搜索引擎允许用户有…

Dinov2 + Faiss 图片检索

MetaAI 通过开源 DINOv2,在计算机视觉领域取得了一个显着的里程碑,这是一个在包含1.42 亿张图像的令人印象深刻的数据集上训练的模型。产生适用于图像级视觉任务(图像分类、实例检索、视频理解)以及像素级视觉任务(深度…

【leetcode面试经典150题】57. 环形链表(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主,题解使用C语言。(若有使用其他语言的同学也可了解题解思路,本质上语法内容一致&…

服务的状态

1、服务的状态 有状态的服务: 即服务器保存服务有关的个性化参数。 比如客户登陆后,将 客户的权限信息 保存在服务器,每次拿到客户请求后,服务器从自身的数据存储中取出客户角色信息。判断是否响应客户请求。 无状态的服务&…

c++string简单使用

sting下标从0开始 子字符串 substr(pos, len) 得到从 p o s pos pos开始长 l e n len len的字符串。 string s "bcdefg";cout<<s.substr(2, 4); // out: defg插入 insert(pos, str_t) 在字符串 p o s pos pos前插入字符串str_t。 string s "bcdefg…

vivado 使用 JTAG-to-AXI Master 调试核进行硬件系统通信

使用 JTAG-to-AXI Master 调试核进行硬件系统通信 JTAG-to-AXI Master 调试核为可自定义核 &#xff0c; 可在运行时生成 AXI 传输事务并驱动 FPGA 内部的 AXI 信号。该核支持所 有存储器映射型 AXI 接口和 AXI4-Lite 接口 &#xff0c; 并且可支持位宽为 32 或 64 …

免费的数据恢复软件有哪些?推荐10款免费的数据恢复软件!

通过使用功能强大的免费和最好的数据恢复软件&#xff0c;您可以取消删除重要文件和文档。丢失文件是每个人在许多情况下面临的常见问题&#xff0c;这些数据恢复程序可以充当完美的救星。 我们编制了 2024年的最佳软件列表。这些工具易于使用&#xff0c;您可以通过如何在 PC…

GBase 8s 中的关键字(表达式)

GBase 8s中有一些特殊的关键字&#xff0c;比如rowid,rownum这样的&#xff0c;可以直接在查询语句中直接使用&#xff0c;表示特定的含义。 这种类型的关键字&#xff0c;在使用到表上时需要特别小心&#xff0c;否则可能得非预想要的结果。 如&#xff1a; select * from ta…

Spring Boot 目前还是最先进的吗?

当谈到现代Java开发框架时&#xff0c;Spring Boot一直处于领先地位。它目前不仅是最先进的&#xff0c;而且在Java生态系统中拥有着巨大的影响力。 1. 什么是Spring Boot&#xff1f; Spring Boot是由Spring团队开发的开源框架&#xff0c;旨在简化基于Spring的应用程序的开…

机器学习之时序差分学习(Temporal Different Learning)

时序差分学习(Temporal Difference Learning)是一种强化学习算法,常用于解决序列决策问题。它结合了动态规划和蒙特卡洛方法的优点,在未来奖励和当前估计之间进行自举式更新。 该算法的核心思想是通过不断地估计状态值或动作值的更新来学习。具体来说,它通过比较当前状态…

#LLM入门|AI测试# 3.6_创建测试集,人工/LLM评估

评估是确保语言模型&#xff08;LLM&#xff09;问答系统质量的重要步骤&#xff0c;它有助于检测模型在不同文档上的表现&#xff0c;发现不足之处&#xff0c;并通过比较不同模型选择最优方案。定期评估还能监测模型性能是否下降。 评估目的包括确认LLM是否满足验收标准&…

接收区块链的CCF会议--ICSOC 2024 截止7.24

ICSOC是CCF B类会议&#xff08;软件工程/系统软件/程序设计语言&#xff09; 2023年长文短文录用率22% Focus Area 4: Emerging Technologies Quantum Service Computing Digital Twins 3D Printing/additive Manufacturing Techniques Blockchain Robotic Process Autom…

N元语言模型

第1关&#xff1a;预测句子概率 任务描述 本关任务&#xff1a;利用二元语言模型计算句子的概率 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1.条件概率计算方式。 2.二元语言模型相关知识。 条件概率计算公式 条件概率是指事件A在事件B发生的条件下发…

代码随想录-哈希表 | 242 有效的字母异位词

代码随想录-哈希表 | 242 有效的字母异位词 LeetCode 242-有效的字母异位词解题思路代码复杂度难点总结 LeetCode 242-有效的字母异位词 题目链接 题目描述 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每…

【队列的算法题记录】239. 滑动窗口最大值

239. 滑动窗口最大值 题目链接 思路 提到滑动窗口就不难不想到队列&#xff0c;这题是要获得滑动窗口每一步的最大值&#xff0c;所以我们可以通过保证队列的单调性&#xff08;即单调递减&#xff0c;使得最大值永远处在队列前端&#xff09;来实现&#xff1a; class MyQ…