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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux磁盘及读写数据原理/Raid技术/硬软raid及企业案例/磁盘分区环境搭建/格式化磁盘系列-12213字

高薪思维: 怎么才能一直去坚持下去? 1.做这件事情的好处,对自己一直去放大。 2.不做的坏处,并放大 3.学习痛苦?还是去上班(餐饮、外卖痛苦?) 用比学习更痛苦的事情,去对抗…

Java后端中如何随意接收参数

目录 一、参数名相同 二、参数名不同,使用RequestParam注解 大概访问流程是:先访问test控制器,test控制器跳转到index页面(此时index页面收到了test控制器传来的数据),然后在index页面跳转到t5控制器&…

【YOLOv9】实战二:手把手教你使用TensorRT实现YOLOv9实时目标检测(含源码)

‍‍🏡博客主页: virobotics(仪酷智能):LabVIEW深度学习、人工智能博主 🎄所属专栏:『LabVIEW深度学习实战』 📑上期文章:『【YOLOv9】实战一:在 Windows 上使用LabVIEW OpenVINO工具…

Java代码基础算法练习-分段函数求值-2024.04.21

任务描述: 有一个函数,写一段程序,输入x,输出y。 任务要求: 代码示例: package April_2024;import java.util.Scanner;public class a240421 {public static void main(String[] args) {Scanner sc new S…

Print Conductor 文档批量打印工具 v9.0.2312

网盘下载 Print Conductor 是 Windows 上一款功能强大的文档批量打印工具,通过该软件可以快速的帮用户批量处理打印PDF文件、协议、文档、图纸、演示文稿、文本文件等,完美的支持PDF、DOC、JPG、PNG、SNP、PSD、MSG、WRI、WPS、RTF、TXT、XLS、PPT、PPS、…

spring高级篇(三)

1、Spring选择代理 1.1、Aspect和Advisor 在Spring框架中,"Aspect" 和 "Advisor" 是两个关键的概念,它们都与AOP(面向切面编程)密切相关: 如果要在Spring中定义一个Aop类,通常会&…

山与路远程控制 一个基于electron和golang实现的远控软件

山与路远程控制 🎥项目演示地址 还在制作… ♻️项目基本介绍 山与路远程控制是基于electron(vue3)和golang实现的远程控制软件(项目界面主要模仿向日葵远程软件,如有侵权请告知),代码可能有点臃肿毕竟只花了一周左右写的无聊项目,如果对其感兴趣的大佬可以fork自…

【Qt 学习笔记】Qt常用控件 | 显示类控件 | Label的使用及说明

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt常用控件 | 显示类控件 | Label的使用及说明 文章编号:Q…

根据表格该列数据的长度动态变化该列的宽度;

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、代码前言 在使用elementui的表格将数据展示出来时,我们想根据表格该列数据的长度动态变化该列的宽度; 1.看了一下elementui文档有一个 width 的属性,可用它来修改对应列。 2.那么我们需要拿到该列的所有数据去比较…

Go栈内存管理源码解读

基本介绍 栈内存一般是由Go编译器自动分配和释放,其中存储着函数的入参和局部变量,这些参数和变量随着函数调用而创建,当调用结束后也会随之被回收。通常开发者不需要关注内存是分配在堆上还是栈上,这部分由编译器在编译阶段通过…

使用Nexus搭建npm私服库

优质博文:IT-BLOG-CN 【1】下载nexus http://www.sonatype.com/download-oss-sonatype解压到本地即可; 【2】打开nexus-3.2.0-01-win64\nexus-3.2.0-01\bin;打开cmd(必须使用cmd) 执行nexus.exe /run;需要使…

数据结构 之 哈希表

🎉欢迎大家观看AUGENSTERN_dc的文章(o゜▽゜)o☆✨✨ 🎉感谢各位读者在百忙之中抽出时间来垂阅我的文章,我会尽我所能向的大家分享我的知识和经验📖 🎉希望我们在一篇篇的文章中能够共同进步!!&…

爆炸之linux-nacos2.0系列集群安装部署

一、环境配置 1、新建磁盘分区 fdisk /dev/vdb 2、创建文件系统 mkfs.xfs /dev/vdb13、创建挂载点: 在 / 目录下创建一个新的目录作为挂载点。/afc 目录 mkdir /afc4、挂载磁盘: 使用 mount 命令将磁盘挂载到新创建的目录。 mount /dev/vdb /afc5、…

2022年新华三杯决赛题目

2022年新华三杯决赛题目 拓扑图 请考生根据以上拓扑,自行在 HCL 中创建设备。 注意: 本拓扑图中的交换机与防火墙,所显示的接口标示比实际设备中的少了一位。如图中的 GE_0/1, 实际是 GE1/0/1。 配置需求 本网络模拟一个大型企业网络,需要使用 BGP/MPLS VPN 技术来隔离不同的 …

2024_GAMES101作业环境配置Mac(intel)_VSCode_Clion

目录 VSCodeClionCMakeList.txt VSCode brew install cmake 更换下载源为阿里云下载 opencv,不然会很慢 cd "$(brew --repo)" git remote -v cd "$(brew --repo)" git remote set-url origin https://mirrors.aliyun.com/homebrew/brew.git…

一举颠覆Transformer!最新Mamba结合方案刷新多个SOTA,单张GPU即可处理140k

还记得前段时间爆火的Jamba吗? Jamba是世界上第一个生产级的Mamba大模型,它将基于结构化状态空间模型 (SSM) 的 Mamba 模型与 transformer 架构相结合,取两种架构之长,达到模型质量和效率兼得的效果。 在吞吐量和效率等关键衡量指…

串联滞后校正及matlab实现

syms b_1 Z[]; P[0,-10,-5]; K1500; G_0zpk(Z,P,K); %G_0为校正前系统开环传递函数 [num,den]tfdata(G_0); %求解b,T [Gm,Pm,wg_0,wc_0]margin(G_0); %Pm为校正前的幅值裕度, gamma60; %确定校正后的相角裕度 Phi_c-6; %校正后的截止频率下Gc(s)的相角,一…

可视化看板有那么多应用场景,该如何快速搭建?可视化工具该如何选择?

在当今的信息化时代,数据已经成为了现代决策的核心。无论是企业战略规划、运营管理,还是个人生活决策,数据都扮演着至关重要的角色。随着数据分析技术和工具的不断进步,数据在决策中的作用将变得更加突出,对组织和个人…

IDEA中Docker相关操作的使用教程

一、引言 Docker作为当前最流行的容器化技术,极大地简化了应用的部署和管理。而IntelliJ IDEA作为一款强大的集成开发环境,也提供了对Docker的集成支持。本文将介绍如何在IDEA中配置和使用Docker,包括远程访问配置、服务连接、Dockerfile编写…