iis服务器助手广告广告
返回顶部
首页 > 资讯 > 操作系统 >decomposed Relative Positional Embeddings的理解
  • 886
分享到

decomposed Relative Positional Embeddings的理解

计算机视觉sam深度学习图像处理位置编码 2023-08-30 10:08:34 886人浏览 独家记忆
摘要

文章目录 正文文献来源 正文 relative positional embedding的一种实现方式是:先计算q和k的相对位置坐标,然后依据相对位置坐标从给定的table中取值。 以q和k都是7×7为例,每个相对位置有两个索引

文章目录

正文

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 embeddings    rel_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为当前方向上定义的table    q_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_size    k_h, k_w = k_size    Rh = 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.shape    r_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

文献来源

https://blog.csdn.net/weixin_42364196/article/details/132477924

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

来源地址:https://blog.csdn.net/JishuFengyang/article/details/132556772

--结束END--

本文标题: decomposed Relative Positional Embeddings的理解

本文链接: https://www.lsjlt.com/news/382607.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • decomposed Relative Positional Embeddings的理解
    文章目录 正文文献来源 正文 relative positional embedding的一种实现方式是:先计算q和k的相对位置坐标,然后依据相对位置坐标从给定的table中取值。 以q和k都是7×7为例,每个相对位置有两个索引...
    99+
    2023-08-30
    计算机视觉 sam 深度学习 图像处理 位置编码
  • 如何理解CSS position属性中absolute和relative的应用
    这期内容当中小编将会给大家带来有关如何理解CSS position属性中absolute和relative的应用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望...
    99+
    2024-04-02
  • CSS中的position属性详解:relative和absolute定位的区别
    CSS中的position属性详解:relative和absolute定位的区别,需要具体代码示例在CSS中,position属性用于控制元素的定位方式。其中,relative和absolute是两种常见的定位方式。它们各自具有不同的特点和...
    99+
    2023-12-27
    position属性 relative定位 absolute定位
  • InitialContext()的理解
    InitialContext()是Java命名和目录接口(JNDI)提供的一个类,它用于创建一个初始上下文(initial cont...
    99+
    2023-09-23
    理解
  • DataTable.AcceptChanges的理解
    `DataTable.AcceptChanges`方法用于接受对`DataTable`所做的所有更改。当调用该方法时,`DataTa...
    99+
    2023-09-15
    理解
  • 理解python的generator
    一句话总结generator:generator允许循环得到一串数据,且如何得到数据的过程可以自定义   以下对于generator的描述都是正确的: 1)generator以对计算资源的消耗取代了对内存的消耗 2)generator有用...
    99+
    2023-01-31
    python generator
  • 理解 Python 的 LEGB
    理解 Python 的 LEGB 名字空间 Python 的名字空间是 Python 一个非常核心的内容。 其他语言中如 C 中,变量名是内存地址的别名,而在 Python 中,名字是一个字符串对象,它与他指向的对象构成一个{name:...
    99+
    2023-01-31
    Python LEGB
  • 怎么理解I/O的原理
    这期内容当中小编将会给大家带来有关 怎么理解I/O的原理,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.IO 软件原理I/O 软件目标设备独立性现在让我们转向对 I/O 软件的研究,I/O 软件设计一个...
    99+
    2023-06-16
  • 解密ASP基础:理解ASP的基本原理
    ASP(Active Server Pages)是一种服务器端脚本语言,常用于创建动态的交互式网页。它允许开发人员在网页中嵌入代码,从而使网页能够根据用户输入生成动态内容。ASP由微软公司开发,并广泛用于创建基于Windows平台的网站...
    99+
    2024-02-05
    ASP 编程语言 网站开发 基本原理 语法
  • Python中的strip()的理解
    在看到Python中strip的时候产生了疑问 strip() 用于移除字符串头尾指定的字符(默认为空格) 开始测试: >>> s = 'ncy_123.python' >>> s.strip('123'...
    99+
    2023-01-31
    Python strip
  • CSS的原理解析
    这篇文章主要介绍“CSS的原理解析”,在日常操作中,相信很多人在CSS的原理解析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”CSS的原理解析”的疑惑有所帮助!接下来,请跟着...
    99+
    2024-04-02
  • 理解Python中的__builtin_
    以Python 2.7为例,__builtin__模块和__builtins__模块的作用在很多情况下是相同的。 但是,在Python 3+中,__builtin__模块被命名为builtins。 所以,在3中python需要将2中的名称...
    99+
    2023-01-30
    Python
  • Linux权限的理解
    主要分为两类讲解:1.对人操作 2.对角色和文件操作 目录 Linux权限管理 文件类型和访问权限(事物属性) 基本权限 文件访问者的分类 文件权限值的表示方法 文件访问权限的设置方法 目录权限 umask 粘滞位 1.对人: Lin...
    99+
    2023-09-03
    linux 运维 服务器
  • 怎么理解spring5的@Indexed解密
    这篇文章主要介绍“怎么理解spring5的@Indexed解密”,在日常操作中,相信很多人在怎么理解spring5的@Indexed解密问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么理解spring5的@...
    99+
    2023-06-25
  • 理解Ruby中的类
    live with scope 序言 源起于Python开发者'公众号转载的深刻理解Python中的元类一文, 回忆着自己看过的 Ruby元编程 一书, 参照写个相应的Ruby版. Python和Ruby在很多方面都非常相像, 特别是Ru...
    99+
    2023-01-31
    Ruby
  • C# 中MethodInvoker的理解
    MethodInvoker 是一个委托类型,用于在 C# 中执行方法。它是一个无参数无返回值的委托,可以用来封装需要在特定线程上执行...
    99+
    2023-09-14
    C#
  • 理解Python3中的__main__
    描述 Python3 中以双下划线开头且结尾变量被称为 内置变量,如 init,name.该变量的具体值由该模块被调用的方式决定。1、当该模块被直接调用时,值为'main'2、当此模块被import,在母模块中调用时,则返回为子模块名称 看...
    99+
    2023-01-31
  • python 多态的理解
    1 class Human(object): # 父类 :创建“人”类 2 3 def __init__(self): 4 5 print('Ill pound the code and...
    99+
    2023-01-30
    多态 python
  • Kubernetes中的网络原理解析该怎么理解
    这篇文章给大家介绍Kubernetes中的网络原理解析该怎么理解,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。01 覆盖网络覆盖⽹络(overlay network)是将TCP数据包装在另⼀种⽹络包⾥⾯进⾏路由转发和通...
    99+
    2023-06-04
  • Java的代理模式怎么理解
    这篇文章主要介绍“Java的代理模式怎么理解”,在日常操作中,相信很多人在Java的代理模式怎么理解问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java的代理模式怎么理解”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作