两种Deformable Attention的区别

2023-11-22 05:01

本文主要是介绍两种Deformable Attention的区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

先分别写一下流程

Deformable DETR(2020)的Deformable Attention

请添加图片描述
解释:
Deformable Attention如下图所示K=3, M=3K是指每个zq会和K个offset算attention,M是指M个head, z q z_q zq有N=HW个:

参考点:reference points,各个特征层上的点,(0.5,0.5)x 4,(0.5,1.5)x 4,…(H-0.5,W-0.5)x 4 ,再除以H或W进行归一化;
偏移量:offsets,网络自己学习的偏移量;
采样点:reference points + offsets,每个特征点都会学习得到4个采样点,然后只计算这个特征点和这四个采样点的相似度即可,不需要学习和所有特征点的相似度;
reference point确定方法为用了torch.meshgrid方法,调用函数(get_reference_points)。 对于每一层feature map初始化每个参考点中心横纵坐标,加减0.5是确保每个初始点是在每个pixel的中心,例如[0.5,1.5,2.5, …]
在Decoder中,参考点的获取方法为object queries通过一个nn.Linear得到每个对应的reference point。
初始的采样点位置相当于会分布在参考点3x3、5x5、7x7、9x9方形邻域

  • Z Z Z :输入特征 ,[HW,C]
  • z q z_q zq :query ,N个[1,C]
  • p q p_q pq :参考点Reference Point,就是zq在特征图x上的坐标,是2d向量( P q x , P q y Pqx,Pqy PqxPqy(0和1之间)
  • ▲ P m q k ▲Pmqk Pmqk :offsets,由每个 query z q z_q zq经过一个Linear得到,每个head会生成K个offset,一共M个head,即,在每个head中采样K个位置
  • W ′ m x W'm_x Wmx :Transformation Matrix,就是过一个Linear
  • (query z q z_q zq送进通道数为3MK的Linear,前2MK个通道编码 ▲ P m q k ▲Pmqk Pmqk,剩下的MK过softmax得到对应的 A m q k Amqk Amqk
  • Values : p q p_q pq+ ▲ P m q k ▲Pmqk Pmqk获取在特征图上的值,通常是小数,因此从特征图上索引特征时采用双线性插值的方式,之后乘上 W ′ m x W'm_x Wmx
  • A m q k Amqk Amqk :Attention Weights,也一样,直接由query
  • z q z_q zq经过linear和softmax得到,也是每个head生成K个Attention weight,和(因此,在DeformableDETR的Deformable Attention里,没有真的key query乘积计算,更像DCN)

DAT(2022)的的Deformable Attention

请添加图片描述
文章可视化画的是针对最重要的key,我现在见过对attention map,query做可视化的,想怎么解释就怎么解释

流程:

  1. 特征图 x x x [H,W,C]
  2. 根据feature map生成参考点reference point,这里不是网格中心而是网格的交接点(整){(0, 0), . . . , (HG − 1, WG − 1)}
  3. 将reference point norm到(-1,1)之间,坐标(-1,-1)代表左上角,坐标(1,1)代表右下角
  4. Δ P ΔP ΔP由以query为输入的offset Network得到,并将得到的 Δ P ΔP ΔP与reference points的坐标相加,从而得到偏移后位置信息。 Δ P ΔP ΔP幅度受超参数s控制防止过大。
  5. 对变形后的reference points使用双线性插值方法进行采样从而得到x:sampled features
  6. 过两个线性层分别得到v和k
  7. bias offset:我们计算归一化范围[−1,+1]中的相对位移,然后通过连续相对位移在参数化偏置表ˆB∈R(2H−1)×(2W−1)中插值φ(ˆB;R),以覆盖所有可能的偏移值。
    8.多头输出:在这里插入图片描述

总的来说在小地方进行了修改,offset network这么设计只说了要和transformer保持相同大小的感受野,但至少证明了deformable attention 是通用的。

为什么DAT要在stage3 stage4才使用deformable attention?

因为stage1 和 stage2 基本上是在提取局部信息,deformable attention 效果不如swin attention。而且前两个stage中,key和value对太多了,会大大增大因为点积和双线性插值带来的计算复杂度。
在这里插入图片描述

这篇关于两种Deformable Attention的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/407705

相关文章

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

Vue和React受控组件的区别小结

《Vue和React受控组件的区别小结》本文主要介绍了Vue和React受控组件的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录背景React 的实现vue3 的实现写法一:直接修改事件参数写法二:通过ref引用 DOMVu

Go之errors.New和fmt.Errorf 的区别小结

《Go之errors.New和fmt.Errorf的区别小结》本文主要介绍了Go之errors.New和fmt.Errorf的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考... 目录error的基本用法1. 获取错误信息2. 在条件判断中使用基本区别1.函数签名2.使用场景详细对

Redis中哨兵机制和集群的区别及说明

《Redis中哨兵机制和集群的区别及说明》Redis哨兵通过主从复制实现高可用,适用于中小规模数据;集群采用分布式分片,支持动态扩展,适合大规模数据,哨兵管理简单但扩展性弱,集群性能更强但架构复杂,根... 目录一、架构设计与节点角色1. 哨兵机制(Sentinel)2. 集群(Cluster)二、数据分片

一文带你迅速搞懂路由器/交换机/光猫三者概念区别

《一文带你迅速搞懂路由器/交换机/光猫三者概念区别》讨论网络设备时,常提及路由器、交换机及光猫等词汇,日常生活、工作中,这些设备至关重要,居家上网、企业内部沟通乃至互联网冲浪皆无法脱离其影响力,本文将... 当谈论网络设备时,我们常常会听到路由器、交换机和光猫这几个名词。它们是构建现代网络基础设施的关键组成

redis和redission分布式锁原理及区别说明

《redis和redission分布式锁原理及区别说明》文章对比了synchronized、乐观锁、Redis分布式锁及Redission锁的原理与区别,指出在集群环境下synchronized失效,... 目录Redis和redission分布式锁原理及区别1、有的同伴想到了synchronized关键字

MyBatis流式查询两种实现方式

《MyBatis流式查询两种实现方式》本文详解MyBatis流式查询,通过ResultHandler和Cursor实现边读边处理,避免内存溢出,ResultHandler逐条回调,Cursor支持迭代... 目录MyBATis 流式查询详解:ResultHandler 与 Cursor1. 什么是流式查询?

Python安装Pandas库的两种方法

《Python安装Pandas库的两种方法》本文介绍了三种安装PythonPandas库的方法,通过cmd命令行安装并解决版本冲突,手动下载whl文件安装,更换国内镜像源加速下载,最后建议用pipli... 目录方法一:cmd命令行执行pip install pandas方法二:找到pandas下载库,然后

JAVA覆盖和重写的区别及说明

《JAVA覆盖和重写的区别及说明》非静态方法的覆盖即重写,具有多态性;静态方法无法被覆盖,但可被重写(仅通过类名调用),二者区别在于绑定时机与引用类型关联性... 目录Java覆盖和重写的区别经常听到两种话认真读完上面两份代码JAVA覆盖和重写的区别经常听到两种话1.覆盖=重写。2.静态方法可andro

C++中全局变量和局部变量的区别

《C++中全局变量和局部变量的区别》本文主要介绍了C++中全局变量和局部变量的区别,全局变量和局部变量在作用域和生命周期上有显著的区别,下面就来介绍一下,感兴趣的可以了解一下... 目录一、全局变量定义生命周期存储位置代码示例输出二、局部变量定义生命周期存储位置代码示例输出三、全局变量和局部变量的区别作用域