DAB-DETR

news2024/12/23 10:11:30

DAB-DETR(2022ICLR)

DAB:Dynamic Anchor Boxes

在这里插入图片描述

贡献:

  1. 明确了不是由于learnable queries导致的收敛缓慢

  2. 4D anchor

  3. Anchor Update

  4. Width & Height Modulated

  5. Temperature Tuning

前半部分:Why a positional prior could speedup training?

为什么位置先验可以加速DETR训练?

img

(a)图像feature+pos embedding

(b)初始的/decoder输出+object query

两个可能原因导致收敛缓慢:

  1. 优化挑战,object query难以学习
  2. learned object queries中的位置信息的编码方式与用于图像特征的正弦位置编码方式不同(原来的detr是embedding,position embedding不一样)

实验1:把学好的object query给未训练的DETR,只在前半epoch稍微高一点,因此并不是query难以学习

在这里插入图片描述

实验2:self attentionquery挑选感兴趣的信息,关心某种图像的区域或大小

如果思考为一种位置约束,有不好的属性(之前的可是画图):

  1. 关注了多种模式的物体(一个slot小目标,横的,竖的)
  2. 查某种物体权重相似

img

图(a)coco数据集目标如果刚好上面和下面都有GT,存在多个物体就很难定位

图(a)底部关注太大或太小的区域,不能在提取过程中注入有用的位置信息

图(b)相比于detr关注某一物体,但忽略了物体的尺度信息(圈圈看起来都是一样大小的)

模型

在这里插入图片描述

具体结构看:https://img-blog.csdnimg.cn/c7bf7283aca94942b55606c667861bef.png

贡献

4D-Anchors:Aq=(xq,yq,wq,hq)(使用方式来自于conditional detr)

q是第q个锚点的意思
P q = M L P ( P E ( A q ) ) P_q={\mathrm{MLP}}\left(\mathrm{PE}\left(A_q\right)\right) Pq=MLP(PE(Aq))
anchor变成4d,经过位置编码,MLP获得query的positional embed
P E ( A ) . = P E ( x q , y q , w q , h q ) = C a t ( P E ( x q ) , P E ( y q ) , P E ( w q ) , P E ( h q ) ) {\mathrm{PE}\left(A\right)}_{.}=\mathrm{PE}\left(x_{q},y_{q},w_{q},h_{q}\right)=\mathrm{Cat}\left(\mathrm{PE}\left(x_{q}\right),\mathrm{PE}\left(y_{q}\right),\mathrm{PE}\left(w_{q}\right),\mathrm{PE}\left(h_{q}\right)\right) PE(A).=PE(xq,yq,wq,hq)=Cat(PE(xq),PE(yq),PE(wq),PE(hq))
PE输入是四维信息,cat所有4个分量,编码为128维,cat后为512,mlp变回256
Self-Attn: Q q = C q + P q , K q = C q + P q , V q = C q \text{Self-Attn:}\quad Q_q=C_q+{P_q},\quad K_q=C_q+{P_q},\quad{V_q=C_q} Self-Attn:Qq=Cq+Pq,Kq=Cq+Pq,Vq=Cq
self-attention没什么更改
Cross-Attn: Q q = Cat ( C q , PE ( x q , y q ) ⋅ MLP ( csq ) ( C q ) ) , K x , y = Cat ( F x , y , PE ( x , y ) ) , V x , y = F x , y , \begin{aligned}\text{Cross-Attn:}\quad&Q_q=\text{Cat}\left(C_q,\text{PE}(x_q,y_q)\cdot\text{MLP}^{(\text{csq})}\left(C_q\right)\right),\\&K_{x,y}=\text{Cat}\left(F_{x,y},\text{PE}(x,y)\right),\quad V_{x,y}=F_{x,y},\end{aligned} Cross-Attn:Qq=Cat(Cq,PE(xq,yq)MLP(csq)(Cq)),Kx,y=Cat(Fx,y,PE(x,y)),Vx,y=Fx,y,
cross-attention

Q_q:其中C_q:上一个self-attention的输出,后面是conditional detr的做法

k:Memory+posembedding

v:v不变

Anchor Update(deformable box refine):

Width & Height Modulated:

传统的位置注意映射被用作类似高斯先验,其假设具有固定大小
但先验是简单地假设所有对象都是各向同性的和固定大小的,忽略了它们的比例信息(宽度和高度)
在这里插入图片描述

上面是原来的标准的attention

修正positional attention map通过分别 m单独分离出相关anchor的 width 和height 从它的 x part and y part to smooth the Gaussian prior to better match with objects of different scales

wq和hq是anchor Aq的宽和高,wqref和hqref由MLP得到

Temperature Tuning(提点的):

Transformer中位置编码是使用正余弦函数进行编码的,公式如下

pos代表句子中词的位置,2i或者2i+1代表位置编码向量的一个分量,2i代表偶数,2i+1代表奇数,由此可见某个词的位置编码是一个向量不是一个值,它由词的位置,以及分量位置两个共同决定的。

img

def GetPosEncodingMatrix(max_len, d_emb):
    # 位置编码
    pos_enc = np.array([
        [pos / np.power(10000, 2 * (j // 2) / d_emb) for j in range(d_emb)]
        if pos != 0 else np.zeros(d_emb)
        for pos in range(max_len)
    ])
    pos_enc[1:, 0::2] = np.sin(pos_enc[1:, 0::2])  # dim 2i
    pos_enc[1:, 1::2] = np.cos(pos_enc[1:, 1::2])  # dim 2i+1
    return pos_enc
            
设置max_len为每个句子的最大长度为50,d_emb为每个词的embedding的维度为256,最终得到一个[50, 256]的位置编码矩阵,每一行代表一个位置的位置编码结果,每一列代表某个词在某个位置编码分量上的值。所有句子共享这个位置编码矩阵,也就是说所有句子相同位置的字/词的位置编码结果是一致的,

PE ⁡ ( x ) 2 i = sin ⁡ ( x T 2 i / D ) , PE ⁡ ( x ) 2 i + 1 = cos ⁡ ( x T 2 i / D ) \operatorname{PE}(x)_{2 i}=\sin \left(\frac{x}{T^{2 i / D}}\right), \quad \operatorname{PE}(x)_{2 i+1}=\cos \left(\frac{x}{T^{2 i / D}}\right) PE(x)2i=sin(T2i/Dx),PE(x)2i+1=cos(T2i/Dx)
温度参数:原始NLP是10000,在DETR中不适合

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

每日一题~将有序数组转换为二叉搜索树

原题链接:108. 将有序数组转换为二叉搜索树 - 力扣(LeetCode) 题目描述: 思路分析: 今天这道题比较简单,我们看一下数组和树之间的联系很容易就能发现规律。 通过简单观察我们发现,位于数组中…

CSDN博客去水印方法

直接在 创作中心->博客 设置这里关了好像就行了,之前方法是找图片链接?后面的一大串字符给去掉。

Java由浅入深理解线程池设计和原理

目录 1 线程1.1 什么是线程?什么是进程?1.2 java中线程的实现方式有几种?1.3 线程的生命周期是什么? 2 线程存在的问题2.1 一个线程只能执行一个任务2.2 线程执行完后销毁,无法复用2.3 线程过多,导致JVM宕机 3 初识线程池3.1 了解J.U.C3.2 线…

计网第五章(运输层)(六)(TCP可靠传输的实现)

目录 一、基本概述 二、具体实现 1.前后沿: 2.利用指针描述发送窗口的状态 3.有差错情况 之前在数据链路层时已经讨论过可靠传输(计网第三章(数据链路层)(二)(可靠传输)&#x…

电表智能管理系统-实现智能化、数字化的电力管理

随着信息技术的发展,智能电表已经成为了现代电力管理的重要组成部分。智能电表能够实时监测和记录用电量,自动控制用电,从而实现更加智能、高效的电力管理。 智能电表是一种能够自动监测和记录用电量,并能够自动控制用电的设备…

IDEA中取消双击shift全局搜索

设置如图步骤: 取消双击shift之后,如果想再次使用全局搜索,可以通过: ctrlshifA

Vue与relation-graph:高效打造关系图的秘诀

产品提需求啦,有一个需求就是实现一个功能:展现各个文件之间的调用关系,通过关系图的形式进行展示出来。 之前考虑使用antv x6实现此功能,但是考虑到只是展示的功能,也不需要进行交互,所以放弃使用antv x6&…

【操作系统笔记十二】Linux常用基础命令

Linux 常用快捷键 Tab 命令或路径等的补全键,特别常用的快捷键Ctrl insert 复制命令行内容(常用可提高效率)Shift insert 粘贴命令行内容(常用可提高效率)Ctrl C 中断当前任务(退出)Ctrl Z…

Java笔记:看清类加载过程

1 类加载的过程 1.1 加载 “加载”是“类加载”(Class Loading)过程的第一步。这个加载过程主要就是靠类器实现的,包括用户自定义类加载器。 加载的过程 在加载的过程中,JVM主要做3件事情 1)通过一个类的全限定名来获取定义此类的二进制字节…

【Linux网络编程】日志与守护进程

日志是网络服务器程序在后台以守护进程的形式运行时,处理情况的描述被打印到了日志文件里面,方便维护人员查看。 1.前台进程与后台进程 左边会话输入命令 sleep 10000 & 代表进程后台运行,右边会话输入命令 sleep 20000可以看到命令行解…

珠海建筑模板厂家-能强优品木业:为您提供优质建筑模板解决方案

在珠海这座美丽的沿海城市,建筑行业蓬勃发展,对于高质量的建筑模板需求也日益增加。在这里,有一家备受赞誉的建筑模板厂家,那就是能强优品木业。作为一家专业的建筑模板供应商,他们以优质的产品和卓越的服务在业界享有…

联合查询

1.条件 2.步骤 1.判断列数 2.判断回显 3.重要 在回显位置写 查看字段名字 使用工具 hackbar

C语言while循环嵌套-动态字母

1、题目 使用C语言实现对字母动态移动(根据用户输入的字符将字符从屏幕的坐标移动屏幕的右边)。 2、分析 字符的移动核心是在显示的字母前面补上对应的空格字符内容,配合上延时就可以实现字符从屏幕左边移动到屏幕右侧的效果,实现…

【全网最全】2023华为杯研究生数学建模B题完整思路+python代码+20页超详细启发式算法+FFT(后续会更新)

目录 点击资料获取入口 DFT在通信等领域的重要应用,以及目前采用FFT计算DFT的硬件开销大的问题。提出了将DFT矩阵分解为整数矩阵乘积逼近的方法来降低硬件复杂度。 建模目标是对给定的DFT矩阵F_N,找到一组K个矩阵A,使F_N和A的乘积在Frobenius范数意义下尽可能接近,即最小化目标…

开源负载测试神器K6

简介:K6是一个强大的开源负载和性能测试工具,用于测试软件系统的性能和可靠性。K6的使用主要是编写测试脚本并运行,这些脚本主要用JavaScript编写,可以使用HTTP,WebSocket等多种协议进行测试。并且易于安装和运行&…

Java Web框架,如Spring MVC,是一种用于构建Web应用程序的软件框架:学生考试Web应用程序

文章目录 什么是Java Web框架?MVC模式在Spring MVC中的应用简单的学生考试Web应用程序设置Spring MVC项目创建实体类创建考试实体类创建控制器创建服务层创建数据库创建视图配置Spring MVC实现功能运行应用程序运行应用程序 🎈个人主页:程序员…

MySQL学习笔记3

MySQL的源码编译安装: 1、参考MySQL的源码安装官方文档: 2、源码安装定制选项: 3、源码安装三部曲:配置、编译、安装。 4、软件安装包: mysql-boost-5.7.43.tar.gz 5、安装需求: 安装需求具体配置安装目…

安装gpu版本的paddle和paddleclas

安装gpu版本的paddle python -m pip install paddlepaddle-gpu2.3.2.post111 -f https://www.paddlepaddle.org.cn/whl/windows/mkl/avx/stable.html以上支持cuda11.1版本 其他需求可查阅文档在这里 安装paddleclas 1 在虚拟环境中安装所需的Python库: pip inst…

Cortex-M3/M4堆栈

一、Cortex-M3/M4堆栈操作 Cortex-M3/M4 使用的是“向下生长的满栈”模型。堆栈指针 SP 指向最后一个被压入堆栈的 32 位数值。在下一次压栈时, SP 先自减 4, 再存入新的数值,如图所示为堆栈的PUSH操作。 POP 操作刚好相反:先从 …

电子信息工程专业课复习知识点总结:(五)通信原理

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 第一章通信系统概述——通信系统的构成、各部分性质、性能指标1.通信系统的组成?2.通信系统的分类?3.调制、解调是什么?有什么用…