swin Transformer

news2024/11/18 4:29:18

文章目录

    • swin Transformer
      • 创新点:
      • 网络架构:
        • Patch Partition
        • linear Embedding
        • Swin Transformer
        • Patch Merging
      • 总结

swin Transformer

论文:https://arxiv.org/pdf/2103.14030.pdf

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

本文参考:swin Transformer讲解视频

创新点:

  • Swin Transformer使用了类似CNN中的层次化构建方法(Hierarchical feature maps),这样的方法有利于提取到多层次的特征,方便分割等下游任务。
  • 划分了更小的patch,就必然会带来更大的计算量,所以Swin Transformer使用了Windows Multi-Head Self-Attention(W-MSA),在每个窗口进行注意力计算,这样做可以大大减少计算量。但是这样做在减少了计算量的同时也会隔绝不同窗口之间的信息传递,所以作者又提出了Shifted Windows Multi-Head Self-Attention(SW-MSA),使信息在相邻的窗口传递

image-20221202153530258

网络架构:

网络框架图如下:

image-20221202120112900

整个过程如下:

Patch Partition

假设我们输入图像为224x224x3,那么首先过一个Patch Partition

就是把图像划分为4x4的patch,每一个patch大小为4x4x3,将其拉直就是48大小,我们将其当作一个token

那么处理后大小就变成56x56x48

(56是224/4得到的,48是4x4x3)

代码的做法是使用卷积实现的)

linear Embedding

stage1部分,进来先是一个linear Embedding,线性映射

将56x56展平,得到3136x48的token,经过线性映射将其变为3136xC,(不同版本的C大小不同)

线性映射层的目的就是为了改变通道数,改变为Transformer可以接受的长度。还会过一个Layer_Norm。

(其实这个linear Embedding和上面的Patch Partition,在代码中是合在一起用一次卷积实现的,输入通道数=3,输出通道数=C,stride=4,卷积核大小=4,然后展平,得到3136xC的二维矩阵。这个就相当于ViT的PatchEmbed)

Swin Transformer

得到3136xC,显然不能输入道Transformer里面,这尺寸太长了。所以这里使用的是Windows Multi-head Self-Attention(W-MSA)

我们将原来的图片56x56xC划分为一个个没有重叠的小窗口,窗口大小是7x7,然后在每个小窗口里面做自注意力,这个计算量就大大降低了

56x56xC划分后就得到了8x8个窗口。这种方法与原来的方法复杂度对比:

具体可以去看视频讲解:https://www.bilibili.com/video/BV13L4y1475U/?vd_source=20756f1667908eb0bfec8057bec3fb85

在这里插入图片描述

这么做有一个问题,每个窗口都独立的去做注意力,那么窗口与窗口之间就没有信息交换了,也无法达到全局建模了。

所以下面引入了移动窗口的概念:Shifted Windows Multi-Head Self-Attention(SW-MSA)

加入原来的窗口如图蓝色框所示,我们就往右下方移动一半,(原来4x4,下移2格,右移2格)

image-20221202164738793

就得到了如下图所示的效果:

image-20221202164917504

在右移后的窗口上再做一次多头注意力

每次都是两个连着:先在窗口上做一次MSA,再在移动后的窗口上做一次MSA。这样就实现了窗口间的通信。

所以可以看到每个stage里面的层数安排都是偶数,因为这两层是一起用的。

  • 作者为了提高移动窗口多头自注意力的计算效率,还提出了一种掩码计算方式
  • 本文采用相对位置编码而非绝对位置编码

掩码计算参看老师的视频讲解就行,讲的很清楚:

https://www.bilibili.com/video/BV13L4y1475U/?vd_source=20756f1667908eb0bfec8057bec3fb85

Patch Merging

经过stage1,输出和输出尺寸是一样的,输出还是3136xC

那么想要实现多尺度的特征,就要将图像patch合并,类似CNN里面的池化操作。

合并操作的做法如图,比如我们要上采样两倍,那我们就会间隔一个的取,然后把第一张图中所有标1的位置,标2的位置,拿出来放一起

然后将得到的这四个2x2xC的块cat起来,就得到了 H / 2 , W / 2 , 4 C H/2 ,W/2, 4C H/2,W/2,4C的大小,我们也模仿CNN里面的操作(上采样一次,通道数让他翻倍)

这里通道数翻了4倍,所以我们再使用一个1x1的卷积,将其通道数降为2C。

这就是整个Patch Merging操作 ,我们可以将原来为 H , W , C H,W,C H,W,C的张量,变为 H / 2 , W / 2 , 2 C H/2,W/2,2C H/2,W/2,2C大小的张量

image-20221202160412636

总结

整个swin Transformer就是这样分阶段的堆叠Block,从而达到提取多层次特征的效果。

image-20221202171128941

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

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

相关文章

基于FDB方法的供给需求优化算法改进——基于工程设计问题的综合研究

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

校园网页设计成品 学校班级网页制作模板 dreamweaver网页作业 简单网页课程成品 大学生静态HTML网页源码

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

ArangoDB简单入门

一、安装与启动 1、进入到某个目录 cd /home/neunhoef/ 2 获取包 wget https://download.arangodb.com/arangodb34/Community/Linux/arangodb3-linux-3.4.1.tar.gz 3、解压 tar xzvf arangodb3-linux-3.4.1.tar.gz 4、将使用的命令放到path中 export PATH"/home/neunhoef…

Ajax学习:原生jsonp实践

输入内容:丧失焦点 向服务器发送请求 对用户名做是否存在的检测 并且改变框的颜色 服务端: const {json } require(express); const express require(express)const app express(); app.get(/home, function(requset, response) {//设置响应头 名称…

分布式全局唯一ID (学习总结---从入门到深化)

目录 分布式全局唯一ID 何为 ID 为什么需要分布式ID 分布式全局唯一ID解决方案 UUID 依靠数据库自增字段生成 号段模式 Redis自增key方案 雪花算法(SnowFlake) 分布式全局唯一ID_什么是雪花算法SonwFlake 雪花算法作用 SnowFlake算法优点 SnowFlake…

【flutter-mobx】Flutter 状态管理- 使用 MobX实现计数器

实践flutter mobx: 提示:对下面这篇掘金文章的实践,通过flutter结合 mobx 实现计数器,过程中也添加了一些处理和注释,代码放在feat/mobx下 https://juejin.cn/post/6954523549386162213 https://github.com/ThinkerW…

论算法是如何优化的:四数之和

论算法是如何优化的:四数之和 心路历程 闲来无事,刷刷力扣,突然看到一道题目叫做四数之和,难度中等,心想,这不就是我大显身手的时候了吗???我直接就是一个点击进入&…

2022 CMU15-445 Project 1 Buffer Pool

通过截图 Task #1 - Extendible Hash Table 该 task 的知识点名为 可扩展动态散列 https://cloud.tencent.com/developer/article/1020586 这个部分要实现一个 extendible 哈希表,内部不可以用 built-in 的哈希表,比如 unordered_map。这个哈希表在 Buf…

Open-Dis的C++版本编译(CMake-gpu 3.21.4)以及SDL2和SDL_net库的配置使用

目录Open-DisOpen-Dis简介分布式交互仿真更多资料Open-Dis下载CMake编译教程SDL2和SDL_netSDL介绍下载SDL配置SDL2下载SDL_net配置SDL_net工程编译Open-DisOpen-Dis Open-Dis简介 Dis是国防部,北约和联合国实时/虚拟世界建模和仿真中使用最广泛的协议之一。 Open-…

关于二进制

关于二进制 读《程序是怎样跑起来的》 用二进制表示计算机信息的原因 计算机内部是由IC(集成电路)这种电子部件构成的。CPU和内存也是IC的一种,IC有几种不同的形状,有的像一条黑色的蜈蚣,在其两侧有数个乃至数百个引脚…

智慧水务:数字孪生污水处理厂,3D可视化一键管控

近年来,智慧水务、数字水务成为水务行业的热点领域。对于污水处理领域,如何贯彻落实双碳战略,积极推进智慧水厂建设,显得尤为关键。 可视化技术结合视频融合、BIM、5G、物联网、云计算及大数据等先进技术,围绕水质达标…

用DIV+CSS技术制作个人博客网站(web前端网页制作课期末作业)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

【Docker】搭建MySQL主从复制,详细的图文展示

Docker是基于Go语言实现的云开源项目。Docker的主要目标是**“Build,Ship and Run Any App,Anywhere”**。也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运…

[附源码]JAVA毕业设计计算机散件报价系统(系统+LW)

[附源码]JAVA毕业设计计算机散件报价系统(系统LW) 目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技…

技巧 | Python绘制2022年卡塔尔世界杯决赛圈预测图

文章目录🏳️‍🌈 1. 世界杯三十二强🏳️‍🌈 2. 世界杯十六强🏳️‍🌈 3. 世界杯八强🏳️‍🌈 4. 世界杯四强🏳️‍🌈 5. 决赛圈🏳️‍&#x1f…

技术内幕 | 阿里云EMR StarRocks 极速数据湖分析

作者:阿里云智能技术专家 周康,StarRocks Active Contributor 郑志铨(本文为作者在 StarRocks Summit Asia 2022 上的分享) 为了能够满足更多用户对于极速分析数据的需求,同时让 StarRocks 强大的分析能力应用在更加广…

【温故而知新】构建高可用Linux服务器(三)

时间:2022年12月02日 作者:小蒋聊技术 邮箱:wei_wei10163.com 微信:wei_wei10 前言 大家好,欢迎来到小蒋聊技术。小蒋准备和大家一起聊聊技术的那些事。 今天小蒋继续坚持“温故而知新”的落地实践,继续…

[附源码]计算机毕业设计影院管理系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【单片机基础】C51语言基础

文章目录1、使用C/C开发单片机的优点2、C51中的基本数据类型3、C51数据类型扩展定义4、C51中的运算符与基础语句5、二进制与十六进制转换1、使用C/C开发单片机的优点 C/C语言作为一种非常方便的语言得到了广泛的支持,如STC、STM32、arduino、乐鑫科技的单片机都支持…

【目标搜索】基于matlab运动编码粒子群算法优化 (MPSO) 无人机搜索丢失目标【含Matlab源码 2254期】

⛄一、运动编码粒子群算法简介 1 粒子群算法 PSO算法是一种基于群体智能的随机优化方法。在PSO中,粒子群模拟鸟群行为在搜索空间中探索(全局搜索)和开发(局部搜索),最终找到全局最优解。粒子的速度和位置更…