Transformer系列专题(四)——Swintransformer

文章目录

  • 九、SwinTransformer
    • 9.1 整体网络架构
    • 9.2 Transformer Blocks
    • 9.3 Patch Embedding(将图像切割成小块(Patch))
    • 9.4 window_partition
    • 9.5 W-MSA(Window Multi-head Self Attention)
    • 9.6 window_reverse
    • 9.7 SW-MSA(Shifted Window)
    • 9.8 PatchMerging(下采样)


九、SwinTransformer

解决了哪些问题呢?

  • 图像中像素点太多了,如果需要更多的特征就必须构建很长的序列
  • 越长的序列算起注意力肯定越慢,这就导致了效率问题
  • 能否用窗口和分层的形式来替代长序列的方法呢?这就是本质
  • CNN中经常提到感受野,Transformer中该如何体现呢?(答案就是分层)

9.1 整体网络架构

  1. 得到个Pathch特征构建序列;
  2. 分层计算attention(逐步下采样过程)
  3. 其中Block是最核心的,对attention的计算方法进行了改进

image-20240717202504516

9.2 Transformer Blocks

  • W-MSA:基于窗口的注意力机制
  • SW-MSA:窗口滑动后重新计算注意力
  • 上面两个串联在一起就是一个block

image-20240717203154304

9.3 Patch Embedding(将图像切割成小块(Patch))

输入:图像数据(224,224,3)

输出:(3196,96)相当于序列长度是3136个,每个的向量是96维特征

3196也就是(224/4)*(224/4)得到的,也可以根据需求更改卷积参数

9.4 window_partition

输入:特征图(56,56,96)

默认窗口大小为7,所以总共可以分成8*8个窗口

输出:特征图(64,7,7,96)

之前的单位是序列,现在的单位是窗口(共64个窗口)

9.5 W-MSA(Window Multi-head Self Attention)

对得到的窗口,计算各个窗口自己的自注意力得分

qkv三个矩阵放在一起了:(3,64,3,49,32)

3个矩阵,64个窗口,heads为3,窗口大小7*7=49,每个head特征96/3=32

attention结果为:(64,3,49,49)每个头都会得出每个窗口内的自注意力

9.6 window_reverse

通过得到的attention计算得到新的特征(64,49,96)

总共64个窗口,每个窗口7*7的大小,每个点对应96维向量

window_reverse就是通过reshape操作还原回去(56,56,96)

这就得到了跟输入特征图一样的大小,但是其已经计算过了attention

9.7 SW-MSA(Shifted Window)

为什么要shift?原来的window都是算自己内部的

这样就会导致只有内部计算,没有它们之间的关系

容易让模型局限在自己的小领地,可以通过shift操作来改善

image-20240717214848958

  • 位移中的细节

    1. 位移就是像素点挪一下位置:

    image-20240717220313613

      	2. 窗口移动后,还有点小问题,例如原来4个,现在9个了,计算量怎么解决呢?
    

    image-20240717220424342

    首先得到新窗口,并对其做位移操作

    image-20240717220552286

    在计算时,只需要计算自己窗口的,其他的都是无关的

    image-20240717220633676


    只需要设置好上面不需要的结果对应的位置的mask让其值为负无穷即可(softmax)

    输出结果同样为(56,56,96)

    不要忘记,计算完特征后需要对图像进行还原,也就是还原平移

    这两组合就是SwinTransformer中的核心计算模块

9.8 PatchMerging(下采样)

image-20240717221555136

image-20240717221607627

分层计算:

一次下采样后(3176 -> 784也就是56*56 -> 28*28)

然后继续执行SwinTransformer Block

最后根据任务来选择合适的head层即可(分类,分割,检测等)

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

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

相关文章

Redis-应用

目录 应用 缓存雪崩、击穿、穿透和解决办法? 布隆过滤器是怎么工作的? 缓存的数据一致性怎么保证 Redis和Mysql消息一致性 业务一致性要求高怎么办? 数据库与缓存的一致性问题 数据库和缓存的一致性如何保证 如何保证本地缓存和分布式缓存的一致? 如果在…

【Pytorch】一文向您详细介绍 `tensor.max(1, keepdims=True)`

【🔥Pytorch】一文向您详细介绍 tensor.max(1, keepdimsTrue) 下滑即可查看博客内容 🌈 欢迎莅临我的个人主页 👈这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地!🎇 🎓 博主简介&#xff…

(一)原生js案例之图片轮播

原生js实现的两种播放效果 效果一 循环播放&#xff0c;单一的效果 代码实现 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-sc…

昇思学习打卡-20-生成式/GAN图像生成

文章目录 网络介绍生成器和判别器的博弈过程数据集可视化模型细节训练过程网络优缺点优点缺点 网络介绍 GAN通过设计生成模型和判别模型这两个模块&#xff0c;使其互相博弈学习产生了相当好的输出。 GAN模型的核心在于提出了通过对抗过程来估计生成模型这一全新框架。在这个…

RK3568笔记三十九:多个LED驱动开发测试(设备树)

若该文为原创文章&#xff0c;转载请注明原文出处。 通过设备树配置一个节点下两个子节点控制两个IO口&#xff0c;一个板载LED&#xff0c;一个外接LED。 一、介绍 通过学习设备树控制GPIO&#xff0c;发现有多种方式 一、直接通过寄存器控制 二、通过设备树&#xff0c;但…

基于STC89C52RC单片机的大棚温控系统(含文档、源码与proteus仿真,以及系统详细介绍)

本篇文章论述的是基于STC89C52RC单片机的大棚温控系统的详情介绍&#xff0c;如果对您有帮助的话&#xff0c;还请关注一下哦&#xff0c;如果有资源方面的需要可以联系我。 目录 摘要 原理图 仿真图 系统总体设计图 代码 系统论文 参考文献 资源下载 摘要 本文介绍的…

CSA笔记3-文件管理命令(补充)+vim+打包解包压缩解压缩命令

grep(-i -n -v -w) [rootxxx ~]# grep root anaconda-ks.cfg #匹配关键字所在的行 [rootxxx ~]# grep -i root anaconda-ks.cfg #-i 忽略大小写 [rootxxx ~]# grep -n root anaconda-ks.cfg #显示匹配到的行号 [rootxxx ~]# grep -v root anaconda-ks.cfg #-v 不匹配有…

甄选范文“论软件维护方法及其应用”软考高级论文,系统架构设计师论文

论文真题 软件维护是指在软件交付使用后,直至软件被淘汰的整个时间范围内,为了改正错误或满足 新的需求而修改软件的活动。在软件系统运行过程中,软件需要维护的原因是多种多样的, 根据维护的原因不同,可以将软件维护分为改正性维护、适应性维护、完善性维护和预防性 维护…

Linux 上 TTY 的起源

注&#xff1a;机翻&#xff0c;未校对。 What is a TTY on Linux? (and How to Use the tty Command) What does the tty command do? It prints the name of the terminal you’re using. TTY stands for “teletypewriter.” What’s the story behind the name of the co…

debian 实现离线批量安装软件包

前言 实现在线缓冲需要的软件和对应依赖的包&#xff0c;离线进行安装 &#xff0c;用于软件封装。 测试下载一个gcc和依赖环境&#xff0c;关闭默认在线源&#xff0c;测试离线安装gcc和依赖环境 兼容 debian ubuntu/test 测试下载安装包到目录 vim /repo_download.sh #!…

【数据结构】算法复杂度

算法复杂度 数据结构算法复杂度 大o渐进表示法空间复杂度 数据结构 数据结构&#xff1a;是计算机存储和组织数据的方式。 比如打开一个网页&#xff0c;我们看到的文字就是数据&#xff0c;这些数据需要用一个结构来把他管理起来&#xff0c;我们称之为&#xff1a;数据结构 …

基于springboot3实现单点登录(一): 单点登录及其相关概念介绍

引言 应网友要求&#xff0c;从本文开始我们将实现一套基于springboot3springsecurity的单点登录认证系统。 单点登录的实现方式有多种&#xff0c;接下来我们会以oauth2为例来介绍和实现。 单点登录介绍 单点登录&#xff08;Single Sign-On&#xff0c;简称SSO&#xff0…

nftables(7)集合(SETS)

简介 在nftables中&#xff0c;集合&#xff08;sets&#xff09;是一个非常有用的特性&#xff0c;它允许你以集合的形式管理IP地址、端口号等网络元素&#xff0c;从而简化规则的配置和管理。 nftables提供了两种类型的集合&#xff1a;匿名集合和命名集合。 匿名集合&…

使用base64通用文件上传

编写一个上传文件的组件 tuku,点击图片上传后使用FileReader异步读取文件的内容&#xff0c;读取完成后获得文件名和base64码&#xff0c;调用后端uploadApi,传入姓名和base64文件信息&#xff0c;后端存入nginx中&#xff0c;用于访问 tuku.ts组件代码&#xff1a; <templa…

系统测试-白盒测试学习

目录 1、语句覆盖法&#xff1a; 2、判定覆盖法&#xff1a; 3、条件覆盖法&#xff1a; 4、判定条件覆盖&#xff1a; 5、条件组合的覆盖&#xff1a; 6、路径覆盖&#xff1a; 黑盒&#xff1a;需求 白盒&#xff1a;主要用于单元测试 1、语句覆盖法&#xff1a; 程序…

OSU!题解(概率dp)

题目&#xff1a;OSU! - 洛谷 思路&#xff1a; 设E()表示截止到i所获得的分数&#xff1b; 对于到i点的每一个l&#xff0c;如果第i1点为1&#xff0c;那么会新增分数3*l^23*l1; 就有递推公式方程&#xff1a; E()E()p[i1]p*(3*l^23*l1);(p代表截止到i获得长度l的概率)&a…

怎样在 PostgreSQL 中优化对多表关联的连接条件选择?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01;&#x1f4da;领书&#xff1a;PostgreSQL 入门到精通.pdf 文章目录 怎样在 PostgreSQL 中优化对多表关联的连接条件选择一、理解多表关联的基本概念二、选择合适的连接条件…

【C++】拷贝构造函数及析构函数

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…

dbeaver连接mysql8异常

部署了mysql8&#xff0c;尝试用dbeaver 24.1.2连接它。结果配置完成后测试连接时报错&#xff1a;Public Key Retrieval is not allowed. 按照提示修改驱动属性&#xff1a; allowPublicKeyRetrievaltrue

【BUG】已解决:ValueError: Expected 2D array, got 1D array instead

已解决&#xff1a;ValueError: Expected 2D array, got 1D array instead 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;武汉…