关于SAM中decomposed Relative Positional Embeddings的理解
关于SAM中decomposed Relative Positional Embeddings的理解。
relative positional embedding的一种实现方式是:先计算q和k的相对位置坐标,然后依据相对位置坐标从给定的table中取值。以q和k都是7×7为例,每个相对位置有两个索引对应x和y两个方向,每个索引值的取值范围是[-6,6]。(第0行相对第6行,x索引相对值为-6;第6行相对第0行,x索引相对值为6;所以索引取值范围是[-6,6])。这个时候可以构建一个shape为[13,13, head_dim]的table,则当相对位置为(i,j)时,position embedding=table[i, j]。(i,j的取值范围都是[0, 12])具体可参考:有关swin transformer相对位置编码的理解
decomposed Relative Positional Embeddings的思想在于,分别计算x和y两个方向上计算相对位置坐标,并分别从两个table中取出对应的位置编码,再将两个方向的编码相加作为最终的编码。
以q为4×4和k是4×4为例,在x和y方向上,每个索引值的取值范围是[-3,3],所以需要构建两个shape为[7, head_dim]的table:
if use_rel_pos:assert (input_size is not None), "Input size must be provided if using relative positional encoding."# initialize relative positional embeddingsrel_pos_h = nn.Parameter(torch.zeros(2 * input_size[0] - 1, head_dim))rel_pos_w = nn.Parameter(torch.zeros(2 * input_size[1] - 1, head_dim))
然后依据q和k的shape来计算每个方向上对应的相对位置编码:
def get_rel_pos(q_size: int, k_size: int, rel_pos: torch.Tensor) -> torch.Tensor:# q_size和k_size分别为当前方向上,q和k的个数, rel_pos为当前方向上定义的tableq_coords = torch.arange(q_size)[:, None] # shape: [4, 1],给当前方向上每个q编号k_coords = torch.arange(k_size)[None, :] # shape:[1, 4],给当前方向上每个k编号relative_coords = (q_coords - k_coords) + (k_size - 1) # q_coords - k_coords就是当前方向上每个q相对于k的位置,加上k_size - 1是为了让相对位置非负return rel_pos[relative_coords.long()] # 依据相对位置从预定义好的table中取值
依据q和每个方向上对应的位置编码来计算最终的编码:
q_h, q_w = q_sizek_h, k_w = k_sizeRh = get_rel_pos(q_h, k_h, rel_pos_h) # 获取h方向的位置编码,shape:[4, 4, head_dim]Rw = get_rel_pos(q_w, k_w, rel_pos_w) # 获取w方向的位置编码,shape:[4, 4, head_dim]B, _, dim = q.shaper_q = q.reshape(B, q_h, q_w, dim)rel_h = torch.einsum("bhwc,hkc->bhwk", r_q, Rh) # r_q与Rh在h方向矩阵乘rel_w = torch.einsum("bhwc,wkc->bhwk", r_q, Rw)# attn是自注意力机制计算得到的注意力图attn = attn.view(B, q_h, q_w, k_h, k_w) + rel_h[:, :, :, :, None] + rel_w[:, :, :, None, :]).view(B, q_h * q_w, k_h * k_w)return attn
相关文章:
关于SAM中decomposed Relative Positional Embeddings的理解
关于SAM中decomposed Relative Positional Embeddings的理解。 relative positional embedding的一种实现方式是:先计算q和k的相对位置坐标,然后依据相对位置坐标从给定的table中取值。以q和k都是77为例,每个相对位置有两个索引对应x和y两个…...

1、Spring是什么?
Spring 是一款主流的 Java EE 轻量级开源框架 。 框架 你可以理解为是一个程序的半成品,它帮我们实现了一部分功能,用这个框架我们可以减少代码的实现和功能的开发。 开源 也就是说,它开放源代码。通过源代码,你可以看到它是如何…...
【华为OD机试python】阿里巴巴找黄金宝箱(IV)【2023 B卷|200分】
题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地, 藏宝地有编号从0-N的箱子,每个箱子上面有一个数字,箱子排列成一个环, 编号最大的箱子的下一个是编号为0的箱子。 请输出每个箱子贴的数字之后的第一个比它大的数,如果不存在则输出-1。 输入…...

操作系统复习总结5
操作系统复习总结,仅供笔者复习使用,参考教材: 《操作系统原理》 - 何静媛编著. 西安电子科技大学出版社《操作系统考研复习指导》2024年 - 王道论坛组编. 电子工业出版社 本文主要内容为:输入输出管理; 计算机系统…...
【LeetCode】406.根据身高重建队列
题目 假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。 请你重新构造并返回输入数组…...

渗透测试漏洞原理之---【任意文件包含漏洞】
文章目录 1、文件包含概述1.1 文件包含语句1.1.1、相关配置 1.2、动态包含1.2.1、示例代码1.2.2、本地文件包含1.2.3、远程文件包含 1.3、漏洞原理1.3.1、特点 2、文件包含攻防2.1、利用方法2.1.1、包含图片木马2.1.2、读取敏感文件2.1.3、读取PHP文件源码2.1.4、执行PHP命令2.…...

day28 异常
to{}catch{} try{}catch{}的流传输 try {fis new FileInputStream("file-APP\\fos.txt");fos new FileOutputStream("fos.txt");int a ;while ((a fis.read())! -1){fos.write(a);}System.out.println(a); } catch (IOException e) {e.printStackTrace()…...

Pico使用C/C++选择使用哪个I2C控制器,以及SDA和SCL针脚
本文一开始讲述了解决方案,后面是我做的笔记,用来讲述我的发现流程和探究的 Pico I2C 代码结构。 前提知识 首先要说明一点:Pico 有两个 I2C,也就是两套 SDA 和 SCL。这点你可以在针脚图中名字看出,比如下图的 Pin 4…...
C++动态内存管理
动态内存 在C/C程序中(线程)栈空间是有限的,大部分变量使用的都是动态分配来的堆内存,这些动态申请来的堆内存是需要开发者通过代码去自行管理的。如何管理好这些动态申请来的内存,是C/C开发中的一个重点难点问题。 m…...

SpringBoot—日志
目录 日志使用日志日志级别设置日志级别设置分组指定日志文件路径日志切割归档使用第三方日志框架log4j2配置文件【分级存储】logback配置文件【分级存储】 实例代码 日志 使用日志 给controller添加日志信息 要给controller类上添加Slf4j注解,然后使用log.info(…...

如何在,Linux中安装Luajit2.*
1.文件下载The LuaJIT Project 2.将下载文件上传到对应的服务器:例如/opt 3.进入对应的文件夹 4.make PREFIX/usr/local,设置安装路径 5.make install,编译安装 6.进入安装目录,cd /usr/local/include/luajit-2.0 7.luajit -v…...

单片机-如何让数码管动态显示
数码管硬件图 1、数码管 连接 74HC245 芯片 单片机IO口输出难稳定,需要数码管与单片机连接需要增加驱动电路, 使用 74HC245 abcdefgDP并联导出 74HC245 对数码管进行驱动,P0 是输出电流 来驱动各个段的 驱动芯片 增加电阻 是为了防止电流…...

在Visual Studio 2017上配置并使用OpenGL
1 在Visual Studio 2017上配置并使用OpenGL 在GLUT - The OpenGL Utility Toolkit:GLUT - The OpenGL Utility Toolkit中点击“GLUT for Microsoft Windows 95 & NT users”,选择“If you want just the GLUT header file, the .LIB, and .DLL file…...

【C++】多态学习
多态 多态的概念与定义多态的概念构成多态的两个条件虚函数与重写重写的两个特例 final 和 override重载、重写(覆盖)、重定义(隐藏)的对比抽象类多态的原理静态绑定与动态绑定 单继承与多继承关系下的虚函数表(派生类)单继承中的虚函数表查看多继承中的虚函数表查看 菱形继承与…...

大数据之Maven
一、Maven的作用 作用一:下载对应的jar包 避免jar包重复下载配置,保证多个工程共用一份jar包。Maven有一个本地仓库,可以通过pom.xml文件来记录jar所在的位置。Maven会自动从远程仓库下载jar包,并且会下载所依赖的其他jar包&…...
自制centos7.9的wsl发行版
自制centos7.9的wsl发行版 参考:https://zhuanlan.zhihu.com/p/482538727 Windows10提供了一个wsl工具用于直接在windows上运行Linux子系统。 CentOS国内镜像下载:https://mirrors.aliyun.com/centos/ 这里选择了7.9.2009版本:https://mirr…...
使用VisualStudio制作上位机(五)
文章目录 使用VisualStudio制作上位机(五)第四部分:GUI界面数据显示使用VisualStudio制作上位机(五) Author:YAL 第四部分:GUI界面数据显示 这一部分,主要实现GUI的界面显示。 上一文已经实现了CAN数据的接收,并将数据更新到数组里。所以在做界面的显示时,只需要在…...

ChatGPT在医疗领域可应用于改善与患者的沟通
注意:本信息仅供参考,发布该内容旨在传递更多信息的目的,并不意味着赞同其观点或证实其说法。 自从ChatGPT在2022年末对公众开放以来,OpenAI的这款生成式AI聊天机器人在医疗领域展示出了巨大潜力。它已经通过了美国医学执照考试&a…...

直播预告|博睿学院第四季即将开讲:博睿数据资深运维团队现身说法!
博睿学院第四季开讲啦!本季博睿学院的课程将于本周四(8月31日)16点正式启动。本季我们邀请到了博睿数据平台支撑中心的四位资深运维专家现身说法,来为我们分享一体化智能可观测平台Bonree ONE的实践干货。 他们,见多识…...

端到端自动驾驶综述
End-to-end Autonomous Driving: Challenges and Frontiers 文章脉路 Introduction 从经典的模块化的方法到端到端方法的一个对比, 讲了各自的优缺点, 模块化的好处是各个模块都有自己明确的优化的目标, 可解释性较强, 且容易debug, 缺点是各个模块优化的目标并不是最终的驾…...

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...

Python训练营-Day26-函数专题1:函数定义与参数
题目1:计算圆的面积 任务: 编写一个名为 calculate_circle_area 的函数,该函数接收圆的半径 radius 作为参数,并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求:函数接收一个位置参数 radi…...