可变形注意力(Deformable Attention)及其拓展

文章目录

  • 一、补充知识
    • (一)可变形卷积(Deformable Convolution)
    • (二)多头注意力机制
  • 二、可变形注意力模块
  • 三、可变形自注意力模块
    • (一)偏移模块:
    • (二)注意力模块
  • 三、多尺度可变形注意力:
  • 四、常规注意力模块与可变形注意力模块的不同


一、补充知识

(一)可变形卷积(Deformable Convolution)

可变形卷积将固定形状的卷积过程改造成了能适应物体形状的可变的卷积过程,从而使结构适应物体形变的能力更强。

实现方式: 对感受野上的每一个点加一个偏移量 ,偏移的大小是通过学习得到的 ,偏移后感受野不再是个正方形,而是和物体的实际形状相匹配。这么做的好处就是无论物体怎么形变,卷积的区域始终覆盖在物体形状的周围。如下图所示:

  • a 为原始感受野范围
  • b ~ d 是对感受野上的添加偏移量后的感受野范围,可以看到叠加偏移量的过程可以模拟出目标移动、尺寸缩放、旋转等各种形变

实验效果 : 左侧的传统卷积单个目标共覆盖了5 x 5=25个采样点,感受野始终是固定不变的方形;右侧的可变形卷积因为感受野的每一个点都有偏移量,造成卷积核在图片上滑动时对应的感受野的点不会重复选择,这意味着会采样9 x 9=81个采样点,比传统卷积更多。

传统卷积核在卷积过程中由于会存在重叠,最终输出后的感受野范围小,而可变性卷积中因为有偏移,不会有重叠,从而感受野范围更大

(二)多头注意力机制

多头注意力机制的基本步骤:

  • 线性变换:对输入序列 X X X进行多次线性变换,得到多组查询 Q i Q_i Qi、键 K i K_i Ki和值 V i V_i Vi
  • 注意力计算:对每组查询、键和值分别进行注意力计算,得到多组注意力加权的输出表示;
  • 将多组注意力加权的输出拼接在一起, 并通过另一个可以学习的线性投影进行变换,得到最终输出。

公式表示如下。其中, m m m代表多头注意力机制中的第m个注意力头, x x x为Key和Value输入特征, z z z为Query输入特征, W m ′ W'_m Wm是输入特征到Value的转移矩阵,用于将 x k x_k xk变换成value, W m W_m Wm是对注意力施加在value后的结果进行线性变换从而得到不同头部的输出结果,标量 A m q k A_{mqk} Amqk是注意力权重。

二、可变形注意力模块

可变形注意力(Deformable Attention)是一种用于神经网络中的注意力机制。在传统的注意力机制中,权重是通过对位置固定的注意力模型进行计算得到的。而在可变形注意力中,可以动态地调整注意力模型的形状和大小,以更好地适应不同任务和输入数据的特点。

大体流程如下:

  1. 给定特征图 x ∈ R H × W × C x\in \mathbb{R}^{H\times W\times C} xRH×W×C,生成一个点 p ∈ R H G × W G × 2 p\in \mathbb{R}^{H_G \times W_G \times 2} pRHG×WG×2的统一网格作为参考;
  2. 将特征映射线性投影到query token q = x W q q=xW_q q=xWq,然后输入一个轻量子网络 θ o f f s e t \theta_{offset} θoffset,生成偏移量 Δ θ o f f s e t ( q ) \Delta \theta_{offset(q)} Δθoffset(q)
  3. 在变形点的位置采样,作为key和value,与query一同传入多头注意力机制中;
  4. 每个头部的特征连接在一起,通过 W 0 W_0 W0投影得到最终输出 z z z
    在这里插入图片描述

单尺度可变形注意力用公式表达如下。其中, A m q k A_{mqk} Amqk不是由Query和Key矩阵做内积得到,而是由输入特征 z q z_q zq直接通过全连接层得到的; p q p_q pq代表 z q z_q zq的位置(理解成坐标即可),是2D向量,作者称其为参考点; Δ p m q k \Delta p_{mqk} Δpmqk表示第m个注意力头第k个采样点相对于参考点的位置偏移; K K K是采样的key总数。

可以看到,每个query在每个头部中采样K个位置,只需和这些位置的特征交互( x ( p q + Δ q m q k ) x(p_q+\Delta q_{mqk}) x(pq+Δqmqk))。

在这里插入图片描述

三、可变形自注意力模块

在groundingdino的模型框架中,对于图像特征的增强就采用了Deformable Self-Attention模块,具体可以参考Grounding DINO:开放集目标检测,将基于Transformer的检测器DINO与真值预训练相结合。

变形自注意力模块主要由两个组成部分构成:偏移模块和注意力模块。 大致流程如下图所示:

  1. 将输入向量转换成特征图,然后生成Query向量,同时考虑参考点的坐标;
  2. 将输入特征图在线性变换后与Query向量一同输入到偏移模块中
  3. 将偏移模块产出的结果与Query向量输入到注意力模块中得到最终结果。
    在这里插入图片描述

(一)偏移模块:

偏移模块对Query向量应用线性变换,得到偏移 Δ p q \Delta p_q Δpq;然后根据参考点的偏移确定每个参考点的感兴趣点(采样点),并使用双线性插值实现每个点的输出 o f s e t v a l u e ofset_{value} ofsetvalue

每个Query向量具有H个注意力头,每个注意力头与K个偏移点相关联。

(二)注意力模块

注意力模块的过程:

  1. 开始于对输入Query向量的线性变换,并且使用softmax函数生成每个偏移的权重向量。
  2. 将offset模块中确定的每个偏移的输出与相应的权重向量相乘并汇总,得到 S a m p l e v a l u e Sample_{value} Samplevalue
  3. 之后,再将每个参考点对应的注意力头连接起来,得到最终的向量,称为 S a m p l e o u t p u t Sample_{output} Sampleoutput
  4. 最后,对采用后的输出向量进行线性变换,得到最终的输出值。

三、多尺度可变形注意力:

多尺度可变形注意力与单尺度可变形注意力的计算公式相比,多出了 { x l } l = 1 l \{x^l\}^l_{l=1} {xl}l=1l ϕ l ( ) \phi _l() ϕl() { x l } l = 1 l \{x^l\}^l_{l=1} {xl}l=1l是输入的多尺度特征图集合, p ^ q \hat{p}_q p^q表示归一化, ϕ l ( ) \phi _l() ϕl()用于将归一化的坐标映射到各个特征层去

ϕ l ( ) \phi _l() ϕl()使得每个参考点在所有特征层都会有一个对应的归一化坐标,方便计算在不同特征层进行采样的点的位置

在这里插入图片描述

四、常规注意力模块与可变形注意力模块的不同

  1. 常规注意力模块中, k ∈ Ω k k\in \Omega _k kΩk,即考虑所有的key;而可变形注意力模块中 k ∈ [ 1 , K ] k \in [1,K] k[1,K],即只需要考虑一部分的key。
  2. 常规注意力模块中,分别取 N k N_k Nk x k x_k xk,然后把结果作加权求和;而可变形注意力模块中 x ∈ C × H × W x\in C\times H \times W xC×H×W,设 p q p_q pq是2D空间上任意一点,先与一个2D实数值 Δ p m q k \Delta p_{mqk} Δpmqk相加,然后通过双线性插值得到新的feature map的一点。
  3. Deformable的Attention不是用Query和Key矩阵做内积得到的,而是由输入特征直接通过Lienear Transformation得到的。

参考:
Deformable DETR
CVPR 2022 | 清华开源DAT:具有可变形注意力的视觉Transformer
MFDS-DETR开源 | HS-FPN多级特征融合+Deformable Self-Attention,再续DETR传奇
详解可变形注意力模块(Deformable Attention Module)

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

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

相关文章

“比特币暴涨讯号显现”!减半牛市来临前还有一次震撼回撤?“52000美元保卫战”已经打响!

虽然比特币在20日一度冲高至近5.3万美元大关,创下自2021年11月来新高,但随后开始回落,在51000美元至52000美元之间反复窄幅波动,甚至在21日晚一度跌至50625美元。比特币的未来走势,已牵动不少投资者的心。 自1月底比特…

华为OD机试真题-来自异国的客人-2023年OD统一考试(C卷)--Python3--开源

题目: 考察内容: 10进制转为任何进制 代码: """ 题目分析:输入: k --物品价值;n 幸运数字;m 进制 输出: 幸运数字的个数 异常;0 eg; 10 2 4思路&…

STM32—触摸键

目录 1 、 电路构成及原理图 2 、编写实现代码 3、代码讲解 4、烧录到开发板调试、验证代码 5、检验效果 此笔记基于朗峰 STM32F103 系列全集成开发板的记录。 1 、 电路构成及原理图 触摸键简单的了解就是一次电容的充放电过程。从原理图可以看出,触摸键 …

代码随想录算法训练营第21天—回溯算法01 | ● 理论基础 ● *77. 组合

理论基础 回溯是一种纯暴力搜索的方法,它和递归相辅相成,通常是执行完递归之后紧接着执行回溯相较于以往使用的for循环暴力搜索,回溯能解决更为复杂的问题,如以下的应用场景应用场景 组合问题 如一个集合{1,2,3,4},找…

Linux 权限详解

目录 一、权限的概念 二、权限管理 三、文件访问权限的相关设置方法 3.1chmod 3.2chmod ax /home/abc.txt 一、权限的概念 Linux 下有两种用户:超级用户( root )、普通用户。 超级用户:可以再linux系统下做任何事情&#xff…

Vant轮播多个div结合二维数组的运用

需求说明 在开发H5的时候,结合Vant组件的轮播组件Swipe实现如下功能。我们查阅vant组件库官方文档可以得知,每个SwipeItem组件代表一个卡片,实现的是每屏展示单张图片或者单个div轮播方式,具体可以查阅:Vant 2 - 轻量、…

如何计算点、线、面关系

从公众号转载,关注微信公众号掌握更多技术动态 --------------------------------------------------------------- 普遍有三种方式 面积和判别法:判断目标点与多边形的每条边组成的三角形面积和是否等于该多边形,相等则在多边形内部。 夹角…

c#程序,oracle使用Devart驱动解决第第三方库是us7ascii,数据乱码的问题

最近做项目,要跟对方系统的库进行读写,结果发现对方采用的是oracle的us7ascii编码,我们系统默认采用的是ZHS16GBK,导致我们客户端读取和写入对方库的数据都是乱码,搜索网上,发现需要采用独立的oracle驱动去…

网络知识

目录 IP地址(Internet protocol address) —— 互联网协议地址 子网掩码 网关 路由 DNS(Domain Name Server) —— 域名服务器 IP地址(Internet protocol address) —— 互联网协议地址 子网掩码 作用:划分网段 网络部分相同的IP地址&a…

简介高效的 CV 入门指南: 100 行实现 InceptionResNet 图像分类

简介高效的 CV 入门指南: 100 行实现 InceptionResNet 图像分类 概述InceptionResNetInception 网络基本原理关键特征 ResNet 网络深度学习早期问题残差学习 InceptionResNet 网络InceptionResNet v1InceptionResNet v2改进的 Inception 模块更有效的残差连接设计 100 行实现 I…

C 标准库 - <errno.h>

在C语言编程中&#xff0c;<errno.h> 头文件扮演着至关重要的角色&#xff0c;它提供了一个全局变量 errno 以及一系列预定义宏&#xff0c;用于指示系统调用或库函数执行过程中发生的错误。这些宏有助于程序员诊断和处理运行时错误。 errno 变量 extern int errno;err…

【软芯民用】基于数字孪生平台的智慧灌区信息化管理系统

本文介绍了一种基于数字孪生平台的智慧综合管理系统&#xff0c;旨在实现数字化转型和精细化管理。该系统以提高用水效率为核心&#xff0c;以严格的水资源管理制度为保障&#xff0c;通过数据汇集平台监控分析数据、精准测算&#xff0c;为水量调度、精准灌溉、水权交易提供科…

时域系统到频域响应的直观解析及数学推导

课本里经常有已知系统时域的差分方程&#xff0c;求系统的频率响应这样的题&#xff0c;老师会讲怎么带公式进去解决&#xff0c;怎么查表解决&#xff0c;但我们总时无法直观地理解这两种转换的特殊关联在哪里&#xff0c;这篇文章以FIR滤波器为例&#xff0c;不仅列出了课本里…

2024年高项第4版之成本管理(附思维导图)

文章目录 简介一、成本失控原因二、相关术语三、成本类型四、项目成本管理过程1.规划成本管理2.估算成本3.制定预算4.控制成本挣值计算公式 附思维导图 简介 项目成本管理师为了项目在批准的预算内完成&#xff0c;对成本进行规划、估算、预算、融资、筹资、管理和控制的过程。…

yolov9来了,附官方源码地址,蓝奏云国内下载代码

不得不说&#xff0c;yolo的更新是真TMD的勤&#xff0c;v8还没熟悉透&#xff0c;结果V9就来了。 官方地址&#xff1a;https://github.com/WongKinYiu/yolov9/ 如果访问不了github的朋友们&#xff0c;可以下载微智启软件工作室准备好的国内蓝奏云网盘&#xff0c;内容是一样…

代码随想录算法训练营第四十天 | 整数拆分、不同的二叉搜索树

目录 整数拆分不同的二叉搜索树 LeetCode 343. 整数拆分 LeetCode 96.不同的二叉搜索树 整数拆分 dp[i]&#xff1a;分拆数字i&#xff0c;可以得到的最大乘积为dp[i]。dp[i] max(dp[i], max((i - j) * j, dp[i - j] * j)); j是从1开始遍历j * (i - j) 是单纯的把整数拆分为…

UE5 骨骼重定向

1.通过 VRoidStudio 1.26.0 软件创建模型 导出 2.下载ue插件 https://github.com/ruyo/VRM4U/releases 安装 重启 3.拖入创建的模型 到指定文件夹 4.为模型创建 IK绑定&#xff0c;重定向骨骼根 新增链条 5.创建IK 重定向&#xff0c;指定源 和 目标 IK绑定 6.

子查询

Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645 子查询 前面我们学过了利用 group by子句可以实现分组的操作&#xff0c;主要的统计函数有&#xff1a;COUNT()、AVG()、SUM()、MAX()、MIN() 并且介绍了分组统计查询的若干限制以及在…

ElementUI组件的安装和使用

Element UI 是一款基于 Vue 2.0 的桌面端组件库&#xff0c;主要用于快速构建网站的前端部分。它提供了丰富的组件&#xff0c;如按钮、输入框、表格、标签页等&#xff0c;以及一些布局元素&#xff0c;如布局容器、分割线等。Element UI 的设计风格简洁&#xff0c;易于上手&…

Three.js加载PLY文件

这是官方的例子 three.js webgl - PLY 我在Vue3中使用&#xff0c;测试了好久始终不显示点云数据。在网上查询后发现ply文件要放置在public目录下才行 <el-row><el-button type"primary" class"el-btn" click"IniThree1">PLY</…