SwinTransformer

patch embedding

        (b,3,224,224)->(b,N,96) N:patch数量

        为每个stage中的每个Swin Transformer block设置drop_rate,根据设置[2,2,6,2],每个Swin Transformer block的drop_path为0~0.1等间距采样的12个小数,参数0.1也可以更改。还有个drop参数设为了0.,注意二者的用处。drop是MLP层以及注意力层的drop概率,drop_path是用于一个drop层的;还有个attn_drop是用于注意力层的。

参数分解

        已知embed_dim是96,stage1维持embed_dim=96,从stage1到stage4的dim分别是[96,192,384,768],原图尺寸是224,经过patch embedding长宽各下降4倍,[56,56,96]这是二维表示法,还有[56*56,96]这种token表示法,很多时候,我们操作的张量都是同一个,只不过进行的处理不同,经过的网络层类型(比如卷积和全连接层对输入数据形式的要求就不同)不同,对数据的形式要求不同,但是数据还是同一份数据。贯穿stage1到stage4数据分别是(56,56,96)、(28,28,192)、(14,14,384)、(7,7,768),这些数据的变化由PatchMerging层引起,包括尺寸的*2下采样和通道数的*2增加;对于每一个stage中的所有Swin Transformer block中的MSA都用相同头数,4个stage分别是[3,6,12,24],window_size和mlp_ratio分别恒定设为7和4.,恒定的意思是不会随着stage而改变,总共有3个PatchMerging层嵌入在stage和stage之间,stage中的操作是不会改变数据的尺寸的。

Swin Transformer block

        对输入feature map的分辨率和window_size做了比较,如果分辨率<window_size,那么就设置shift_size=0并且window_size分辨率的最小值(比如window_size=7,如果分辨率是[5,6]那么window_size就会被强制为5);shift_size必须小于window_size,最小值为0;Swin Transformer block包含这些层:Layer Norm层、注意力层、droppath层、Layer Norm层、MLP层,共5层。

注意力层

        head_dim是根据每个stage设置的dim和头数决定的,比如stage1,dim=96,heads=3,那么head_dim=96//3=32,这里是整除;scale就是注意力计算公式的分母部分:根号d;

relative_position_bias_table相对位置偏置表

        初始化为符合截断分布的数据,形状为((2*window_sizeh-1)*(2*window_sizew-1),num_heads),比如我的window_size=7,那么相对位置偏置表的形状为(169,3),以stage1三头注意力为例;torch.meshgrid([coords_h, coords_w])是将第一个序列数据coords_h中的每个元素横向重复,比如coords_h=[1,2],则结果为[1 1

                          2 2],将coords_w每个元素纵向重复,结果为[1 2

                                                                                                   1 2];torch.stack默认dim=0,并且是增加维度的stack操作;torch.flattern(input,start_dim,end_dim),比如我有张量(1,2,3,4,5,6),执行torch.flatten(x,start_dim=2,end_dim=3),结果为[1, 2, 12, 5, 6],也就是start_dim和end_dim都包含,并且相乘的维度就是flatten的维度,其余保持不变,这个可以改变形状,也可以改变维度,但张量还是哪个张量;我们知道每个stage为了保持dim不变,q/k/v的dim都应该和该层的stage保持一致,所以用一个线性层将dim扩大3倍,得到3*dim长度的token,其中每个dim分别代表q/k/v;比如我的输入是(56,56,96)经过这个线性层后变为了(56,56,288),q=k=v=(56,56,96),由于是三头注意力,将dim按照头数再划分,再经过reshape、permute操作q=k=v=(b,3,56*56,32)(注意这个维度顺序的表示非常重要,因为矩阵乘法和维度的关系很大),q和k的转置相乘得到attn=(b , 3 , 56*56 , 56*56),attn做个放缩再和v相乘,得到(b , 3 , 56*56 , 32)。

单头注意力和多头注意力分析

假如是单头注意力,那么q=k=v=(b,56*56,96),其实四维还是三维不影响矩阵乘法啊,因为矩阵乘法只考虑了最后两维,前面的保持不变。attn=(b , 56*56 , 56*56),最终得到(b,56*56 , 96),注意两个attn的区分,多头的有多套权重,而单头的只有一套,这有什么影响呢?就是一套权重可能是不准确的,我用多套权重,同时为了保持最后的dim和原始的dim一致,每套权重只作用于部分dim,这里就是dim // num_heads了。总而言之,头数影响的只是权重表的个数。

我们来看看引入到注意力里面的相对位置偏置是怎么做的

1.初始化相对位置偏置表

形状为((2*window_sizeh-1)*(2*window_sizew-1),num_heads)

2.生成相对位置索引

形状为(window_sizeh*window_sizew,window_sizeh*window_sizew),值在0~13*13-1之间,纵向找不出规律,横向就是从第一个数开始以1递减 

3.生成相对位置偏置

形状为(num_heads,window_sizeh*window_sizew,window_sizeh*window_sizew)

反正最终的(49,49)个相对位置编码是从截断分布中取出的,会有重复

           

        

      

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

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

相关文章

网络安全红队常用的攻击方法及路径

一、信息收集 收集的内容包括目标系统的组织架构、IT资产、敏感信息泄露、供应商信息等各个方面&#xff0c;通过对收集的信息进行梳理&#xff0c;定位到安全薄弱点&#xff0c;从而实施下一步的攻击行为。 域名收集 1.备案查询 天眼查爱企查官方ICP备案查询 通过以上三个…

数据矩阵集成可提高印刷电路板识别的准确性

在复杂的印刷电路板 (PCB) 世界中&#xff0c;准确的电路板元件识别对于简化故障排除至关重要。它确保电子设备高效运行。 本文将探讨数据矩阵码在提高 PCB 零件识别效率方面的作用。数据矩阵码提供了一种简单的解决方案来编码和解码与 PCB 组件相关的信息&#xff0c;在简化识…

安卓Android Studioy读写NXP ICODE2 15693标签源码

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?spma1z10.5-c-s.w4002-21818769070.11.4391789eCLwm3t&id615391857885 <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xm…

『C++成长记』日期类的实现

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;C &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、日期类的实现 &#x1f4d2;1.1日期类功能 &#x1f4d2;1.2拷贝日期 &#…

C++面试宝典第13题:计算餐厅账单

题目 假如你是一家餐厅的收银员,需要编写一个程序来计算顾客的账单。程序应该能够接受顾客点的菜品和数量,并根据菜品的单价计算出总价。另外,程序还应该能够处理折扣和优惠券,并输出最终的账单金额。 解析 这道题主要考察应聘者使用面向对象的设计方法来解决实际问题的能力…

基于旗鱼算法优化的Elman神经网络数据预测 - 附代码

基于旗鱼算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于旗鱼算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于旗鱼优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针…

Pandas DataFrame中将True/False映射到1/0

在本文中&#xff0c;我们将看到如何在Pandas DataFrame中将True/False映射到1/0。True/False到1/0的转换在执行计算时至关重要&#xff0c;并且可以轻松分析数据。 1. replace方法 在这个例子中&#xff0c;我们使用Pandas replace()方法将True/False映射到1/0。在这里&…

网络知识-以太网技术的发展及网络设备

目 录 一、背景介绍 &#xff08;一&#xff09;网络技术的时代 &#xff08;二&#xff09;以太网技术脱颖而出 二、以太网的工作原理 &#xff08;一&#xff09;、载波侦听多路访问&#xff08;CSMA/CD&#xff09; 1、数据发送流程 2、发送过程解析 3、…

Mathtype7.4安装与嵌入WPS

文章目录 Mathtype安装教程&#xff08;7.4&#xff09;Mathtype简介Mathtype下载安装软件下载软件安装运行MathType.exe运行注册表 Mathtype嵌入wps Mathtype安装教程&#xff08;7.4&#xff09; Mathtype简介 MathType是一款强大的数学公式编辑器&#xff0c;适用于教育教…

【Sublime Text】| 01——下载安装注册

系列文章目录 【Sublime Text】| 01——下载软件安装并注册 【Sublime Text】| 02——常用插件安装及配置 失败了也挺可爱&#xff0c;成功了就超帅。 文章目录 前言1. 下载2. 安装3. 注册3.1 通过修改应用程序注册3.2 通过替换应用程序注册 感谢 前言 轻量代码编辑器有很多 之…

Python课程设计基于python的人脸识别佩戴口罩系统设计

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;python口罩 获取完整论文报告源码源文件 1 研究背景与意义 新型冠状病毒展现出全球化流行和蔓延的趋势&#xff0c;这提醒我们&#xff1a;传染病防治在今后相当长时间内仍是疾病预测控制工作的重点。戴口罩是预防呼吸道…

Linux|服务器|简单记录备忘VMware虚拟机开启桌面失败报错:VMware: No 3D enabled (0, Success).的解决

一&#xff0c; VMware虚拟机 Linux操作系统&#xff0c;centos7版本&#xff0c;安装完桌面后&#xff0c;执行startx 命令后 &#xff0c;报错&#xff1a;VMware: No 3D enabled (0, Success). 桌面没有启动成功 完整日志输出如下&#xff1a; [rootnode4 ~]# startx x…

超实用的测试万能法则 —— 帕累托分析!

20/80原则来源于意大利经济学家维弗雷多•帕累托&#xff08;Villefredo Pareto&#xff09;提出的财富占比帕累托原则&#xff1a;80%的财富是掌握在20%的人手中的&#xff0c;而余下的80%的人只占那剩余的20%财富&#xff0c;而后这个理论延伸为&#xff1a;至关重要的少数和…

uniapp 创建组件组件

组件&#xff1a;用于将某个功能的 HTML、CSS、JS 封装到一个文件中&#xff0c;提高代码的复用性和可维护性。 创建组件 一、在根目录中创建 components 文件夹&#xff0c;右键点击新建组件。 二、输入组件名称、选择默认模板、点击创建组件。 三、在组件中正常编写内容即可…

数据结构OJ实验6-二叉树的遍历以及应用

A. DS二叉树—二叉树构建与遍历&#xff08;不含框架&#xff09; 题目描述 给定一颗二叉树的逻辑结构如下图&#xff0c;&#xff08;先序遍历的结果&#xff0c;空树用字符‘#’表示&#xff0c;例如AB#C##D##&#xff09;&#xff0c;建立该二叉树的二叉链式存储结构&…

H266/VVC多样化视频编码工具概述

全景视频编码 全景视频&#xff1a; 具有360度全包围视角的球面视频。 全景视频编码&#xff1a; 包括H266在内的视频编码算法都是以平面视频为对象的&#xff0c;为了采用传统的视频编码编码算法&#xff0c;全景视频需要转换为平面视频&#xff0c;其中经纬图等角映射&#…

适用于 Windows 的免费U盘数据恢复方法详解

笔式驱动器&#xff08;Pen Drive&#xff09;是一种方便、小巧、便于携带的数据存储设备&#xff0c;也称为U盘、拇指驱动器、U盘等。“笔式驱动器”的名称来源于其外观&#xff0c;即体积小、体积小、方便携带。与传统笔相似&#xff0c;尽管它实际上并不能书写。 有几个功能…

如何把硬盘(分区)一分为二?重装系统的小伙伴不可不看

注意事项&#xff1a;本教程操作不当会导致数据丢失 请谨慎操作 请谨慎操作 请谨慎操作 前言 相信各位小伙伴都会切土豆吧&#xff0c;本教程就是教大家如何切土豆切得好的教程。 啊哈哈哈&#xff0c;开玩笑的。 比如你有一个D盘是200GB&#xff0c;想要把它变成两个100G…

3D空间漫游技术的日趋成熟,让博物馆数字化大放异彩!

随着科技的飞速发展&#xff0c;互联网已经成为人们生活中不可或缺的一部分。在这个数字化时代&#xff0c;博物馆也紧跟时代潮流&#xff0c;将传统的实体博物馆与现代科技相结合&#xff0c;诞生了一种全新的博物馆形式——3D线上博物馆。这种新型博物馆凭借其独特的魅力&…

vue组件scoped的作用 目的: 解决多个组件样式名相同, 冲突问题

在style上加入scoped属性, 就会在此组件的标签上加上一个随机生成的data-v开头的属性&#xff0c;下面一起来看一下&#xff0c;希望对大家有帮助。 vue组件-scoped作用 需求: p标签名选择器, 设置背景色 问题: 发现组件里的p和外面的p都生效了 解决: 给Pannel.vue组件里sty…