Transformer实战-系列教程7:SwinTransformer 算法原理 1

🚩🚩🚩Transformer实战-系列教程总目录

有任何问题欢迎在下面留言
本篇文章的代码运行界面均在Pycharm中进行
本篇文章配套的代码资源已经上传

1、SwinTransformer

  • SwinTransformer 可以看作为一个backbone
  • 用来做分类、检测、分割都是非常好的
  • 也可以直接套用在下游任务中
  • 不仅源码公开了,预训练模型也公开了
  • 预训练模型提供大中小三个版本

图像中的像素点太多了,如果需要更多的特征就必须构建很长的序列
很长的序列会导致效率问题
SwinTransformer 针对ViT使用了窗口和分层的方式来替代长序列进行改进
CNN经常提起感受野,怎样在Transformer中体现出来呢?进行分层

SwinTransformer 怎样进行分层呢?在ViT或者原始Transformer中,假如最开始是400个Token,在堆叠过程中,还是会有400个Token。
而SwinTransformer 将原本的400个Token进行了合并处理,在堆叠过程中400个Token会变成200、100

也就是说SwinTransformer 就是在堆叠Transformer过程中,Token数量会不断减少,每一层的特征提取效率就会更高

2、网络架构

在这里插入图片描述

  • 首先输入还是一张图像数据,2242243
  • 通过卷积得到多个特征图,把特征图分成每个Patch,和ViT一样
  • 堆叠Swin Transformer Block,与ViT 的Block不同的是,Swin Transformer
    Block在每次堆叠后长宽减半特征图翻倍,这与CNN的堆叠过程有点类似,特别像VGG
  • 减少序列的长度,同时增加模型每一层的特征通道数,可以看作为是一个下采样的操作,是Patch Merging完成的
  • Block最核心的部分是对Attention的计算方法做出了改进

3、Swin Transformer Block

在这里插入图片描述

  • W-MSA与SW-MSA是一个组合
  • W-MSA:基于窗口的注意力计算
  • SW-MSA:窗口滑动后重新计算注意力
  • 串联在一起就是一个Block

4、Patch Embbeding

  • 输入:图像数据(224,224,3)
  • 输出:(3136,96)相当于序列长度是3136个,每个的向量是96维特征
  • 通过卷积得到,Conv2d(3, 96, kernel_size=(4, 4), stride=(4, 4))
  • 3136也就是 (224/4) * (224/4)得到的,也可以根据需求更改卷积参数

5、window_partition

  • 输入:特征图(56,56,96)
  • 默认窗口大小为7,所以总共可以分成8*8个窗口
  • 输出:特征图(64,7,7,96)
  • 之前的单位是序列,现在的单位是窗口(共64个窗口)

56=224/4,5656分成每个都是77大小的窗口,一共可以的得到8*8的窗口,因此输出为(64,7,7,96),因此输入变成了64个窗口不再是序列了

6、W-MSA

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) 每个头都会得出每个窗口内的自注意力

原来有64个窗口,每个窗口都是77的大小,对每个窗口都进行Self Attention的计算
(3,64,3,49,32),第一个3表示的是QKV这3个,64代表64个窗口,第二个3表示的是多头注意力的头数,49就是7
7的大小,每头注意力机制对应32维的向量

attention权重矩阵维度(64,3,49,49),64表示64个窗口,3还是表示的是多头注意力的头数,49*49表示每一个窗口的49个特征之间的关系

7、window_reverse

  • 通过得到的attention计算得到新的特征(64,49,96)
  • 总共64个窗口,每个窗口7*7的大小,每个点对应96维向量
  • window_reverse就是通过reshape操作还原回去(56,56,96)
  • 这就得到了跟输入特征图一样的大小,但是其已经计算过了attention

attention权重与(3,64,3,49,32)乘积结果为(64,49,96),这是新的特征的维度,96还是表示每个向量的维度,这个时候的特征已经经过重构,96表示了在一个窗口的每个像素与每个像素之间的关系

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

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

相关文章

目标检测:3采用YOLOv8 API训练自己的模型

​ 目录 ​1.YOLOv8 的新特性 2.如何使用 YOLOv8? 3使用YOLOv8训练模型 4.验证训练集 5.测试训练集 6.测验其他图片 7 其他问题 参考: 1.YOLOv8 的新特性 Ultralytics 为 YOLO 模型发布了一个全新的存储库。它被构建为 用于训练对象检测、实例分割和图像分类模型的统…

什么是Vue样式穿透以及常用的实现方法

在Web前端开发中,样式穿透是一个重要的主题,它可以帮助我们更好地定制化组件样式,提升用户体验。本文将为您介绍Vue中样式穿透的概念,以及几种常用的实现方法,希望对您的前端开发工作有所帮助。 什么是样式穿透&#…

Java on Azure Tooling 2024年1月更新|Azure Key Vault 支持、示例项目创建支持及更多

作者:Jialuo Gan - Program Manager, Developer Division At Microsoft 排版:Alan Wang 大家好,欢迎来到 2024 年 Java on Azure 工具的首次更新。在本次更新中,我们将介绍对于 Azure Key Vault 支持、基于 Azure 示例项目的创建支…

JavaWeb之HTML-CSS --黑马笔记

什么是HTML ? 标记语言:由标签构成的语言。 注意:HTML标签都是预定义好的,HTML代码直接在浏览器中运行,HTML标签由浏览器解析。 什么是CSS ? 开发工具 VS Code --安装文档和安装包都在网盘中 链接:https://p…

服务器性能监控管理方法及工具

服务器是组织数据中心的主干,无论是优化的用户体验,还是管理良好的资源,服务器都能为您完成所有工作,保持服务器随时可用和可访问对于面向业务的应用程序和服务以最佳水平运行至关重要。 理想的服务器性能需要主动监控物理和虚拟…

Jvm FullGC 如何排查?

使用场景 我们在使用系统时,有时请求和响应会变得特别慢,系统也变得很卡。 有可能是FullGC的问题,可以逐步地进行排查。 使用jps和top确定进程号pid jps可以列出正在运行的jvm进程,并显示jvm执行主类名称( main()函数所在的类…

第5课 使用FFmpeg将rtmp流再转推到rtmp服务器

本课对应源文件下载链接: https://download.csdn.net/download/XiBuQiuChong/88801992 通过前面的学习,我们已经可以正常播放网络rtmp流及本地mp4文件。这节课,我们将在前面的基础上实现一个常用的转推功能:读取rtmp流或mp4文件并…

移动云ONAIR媒体云全解读!媒体内容数字化融合一站式解决方案

当下,传统媒体面临着诸多挑战,如何利用信息技术提升内容的质量、形式和分发效率,成为媒体行业的迫切需求。移动云作为数字中国建设的“主力军”, 立足于新兴媒体与云计算市场的变化与需求,推出了ONAIR 媒体云解决方案&…

计算机设计大赛 深度学习+opencv+python实现车道线检测 - 自动驾驶

文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络3.1卷积层3.2 池化层3.3 激活函数:3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 YOLOV56 数据集处理7 模型训练8 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 &am…

C++之强制转换

目录 static_cast const_cast 思维导图 类型转换有c风格的,当然还有c风格的。c风格的转换的格式很简单 TYPE a (TYPE)EXPRESSION; 但是c风格的类型转换有不少的缺点,有的时候用c风格的转换是不合适的,因为它可以在…

【复现】智慧园区综合管理平台文件上传漏洞_40

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一: 四.修复建议: 五. 搜索语法: 六.免责声明 一.概述 智慧园区管理平台基于GISBIM的云平台数据中心和物联网技术为核心,将各项基础设施连接成一个有机的整体,通…

Vector CANdb++ Editor和CANdb++ Admin的区别

目录 1 CANdb Editor和CANdb Admin的功能偏差 2 CANdb Program窗口 3 下载并安装CANdb Editor和CANdb Admin 3.1 安装CANdb Admin.J1939 3.0 SP27 优质博文推荐阅读(单击下方链接,即可跳转): Vector工具链 CAN Matrix DBC …

[Vue3]父子组件相互传值数据同步

简介 vue3中使用setup语法糖,父子组件之间相互传递数据及数据同步问题 文章目录 简介父传子props传递值 使用v-bind绑定props需要计算toRefcomputed emit传递方法 使用v-on绑定 子传父expose v-model总结 父传子 props传递值 使用v-bind绑定 父组件通过props给子…

代码生成器(新):mybatis-plus-generator使用指南

代码生成器(新)官网 后端代码:点击查看 LearnElementUiAndSpringBoot 提醒:LearnElementUiAndSpringBoot下载完后,在运行调试 Main.java里的main方法之前,除了utils包和Main.java文件,其他包需…

机器学习逻辑回归模型训练与超参数调优 ##3

文章目录 [TOC]基于Kaggle电信用户流失案例数据(可在官网进行下载)逻辑回归模型训练逻辑回归的超参数调优 基于Kaggle电信用户流失案例数据(可在官网进行下载) 数据预处理部分可见: 机器学习数据预处理方法&#xff0…

共享网盘系统PHP源码

新V5.0版本,支持上传视频、支持视频播放、支持共享,也可以自己用。 可以自动生成视频外链,下载地址,播放器代码,html代码,ubb代码等等。 使用方法: 源码上传到服务器,打开网站根据…

【自定义序列化器】⭐️通过继承JsonSerializer和实现WebMvcConfigurer类完成自定义序列化

目录 前言 解决方案 具体实现 一、自定义序列化器 二、两种方式指定作用域 1、注解 JsonSerialize() 2、实现自定义全局配置 WebMvcConfigurer 三、拓展 WebMvcConfigurer接口 章末 前言 小伙伴们大家好,上次做了自定义对象属性拷贝&#x…

LLM之RAG实战(二十三)| LlamaIndex高级检索(二):父文档检索

在上一篇文章中,我们介绍了基本RAG的构建,也探讨了RAG管道中从小到大检索技术的两种主要技术:父文档检索和句子窗口检索。 在本文,我们将深入探讨一下从小到大检索技术中的父文档检索。 一、块引用:较小的子块引用较大…

css浮动

CSS浮动 1. 浮动的简介 在最初,浮动是用来实现文字环绕图片效果的,现在浮动是主流的页面布局方式之一。 2. 元素浮动后的特点 脱离文档流。不管浮动前是什么元素,浮动后:默认宽与高都是被内容撑开(尽可能小&#x…

AI专题:冬渐去、春将来,待看,AI 开花,数据挂果,可控链潮起

今天分享的是AI 系列深度研究报告:《AI专题:冬渐去、春将来,待看,AI 开花,数据挂果,可控链潮起》。 (报告出品方:AVIC) 报告共计:36页 行业概览:2023年呈稳…