[ICLR‘22] DAB-DETR: Dynamic Anchor Boxes Are Better Queries for DETR
- paper: https://arxiv.org/pdf/2201.12329.pdf
- code: GitHub - IDEA-Research/DAB-DETR: [ICLR 2022] DAB-DETR: Dynamic Anchor Boxes are Better Queries for DETR

- 将位置相关性计算显式的引入到decoder中,通过box坐标(x, y, w, h) 影响Q和K的相关性计算。
- 特征图要有对应的位置编码,同时,编码方式和作为query的4D box坐标应该一致,这样相似度分数才高,才能起到pooling的作用。
probe and pool features
the key insight behind this formulation is that xx
目录
摘要
引言
Why A Positional Prior Could Speedup Training?
DAB-DETR
Learning Anchor Boxes Directly
Width & Height-Modulated Gaussian Kernel
Temperature Tuning
实验
Main results
Ablation Study
摘要
- 本文的两个贡献:1)针对DETR,提出一种全新query范式:dynamic anchor boxes;2)深入分析DETR中query的作用。
- 使用4D box 坐标有两个作用,很像soft ROI Pooling:1)明确的位置先验,可以提高query-to-feature相似度,减缓训练收敛慢的问题;2)可以基于box的宽高建模positional attention map;
- 在ResNet50-DC5作为backbone的情况下,训练50-epochs,可以取得45.7% AP。
引言
- DETR使用100个learnable query从图像中probe and pool features,但目前query的设计是低效的,会导致训练收敛慢,通常需要500-epochs才能收敛。
- 对于DETR query的改进方法,主要是使query关联某个特别的空间位置,而不是多个位置,例如:Conditional DETR、Efficient DETR、Anchor DETR、Deformable DETR。但是上述工作,仅借助了2D位置作为anchor points,而没有考虑目标大小。
- 提出一种新范式。在Transformer的cross-attention模块中,本文使用4D box coordinates (x, y, w, h) 作为queries。这种全新的query范式,通过同时考虑anchor box的位置和大小,为cross-attention引入了更好的空间先验。
- 深入分析DETR中query的作用。每个query可以看作两个部分:content part (decoder中self-attention的输出) 和 positional part (DETR中的learnable queries)。Cross-attention,是计算每个query和key的相似度分数,而key也是由两个部分组成:content part (encoded image feature) 和 positional part (位置编码)。因此,Cross-attention其实可以认为是根据query和key相似度,从特征图中pool特征,而相似度同时考虑了内容和位置信息。内容相似度可以认为是在找语义相近的特征,位置相似度则是某种位置限制,用于从特定位置pooling特征。因此,新范式中的中心位置 (x, y)可以提供pooling位置,box大小 (w, h)可以建模cross-attention map。同时,由于在query中显示的引入了box,因此,box可以在每层中动态更新。

Why A Positional Prior Could Speedup Training?
- 前人工作将decoder去除,实现了快速收敛,说明问题收敛慢是由decoder导致的;
- 如上图,比较encoder和decoder,唯一差异是decoder中的Q是learnable query,说明问题出在query上;
- query初始化为0,会导致query-to-feature similarity相同,pooling到相同图片特征。

- query有两个可能的原因导致收敛慢:1)优化问题;2)query中的位置编码和图片的位置编码不一致,导致相似性不好学习。

- 上图(a)中,将query替换为学习好的query,并固定住,发现效果并没有提升,这说明不是优化问题。

- 进一步,本文可视化了图片位置编码和query之间的位置注意力图,可以发现DETR中的query存在:1)有多个注意力中心;2)注意力中心和目标大小不一致。在引入DAB后,DAB-DETR的位置注意力图就变得好很多,同时如图2(b)所示,收敛也快了。
DAB-DETR

如图5所示,修改集中在DETR的decoder中。
Learning Anchor Boxes Directly
对于第q个anchor A_q = (x_q, y_q, w_q, h_q),其positional query P_q = MLP(PE(A_q)),其中,PE是positonal encoding,将R映射为R^(D/2),MLP则将R^(2D)映射为R^(D),MLP包含两个Linear + ReLU,其中第一个用于降维。
![]()
Self-attention:
Cross-Attention,其中MLP^(csq)是conditional spatial query,是一个MLP,将D维数据映射到D维,F_(x, y) 是位于(x, y)的图片特征,维度为D。

Width & Height-Modulated Gaussian Kernel

原有的positional attention map是:
![]()
本文提出的受box宽高影响的positional attention map是:
其中w_(q,ref)和h_(q, ref)计算如下:
![]()
Temperature Tuning

如下式所示,T为超参数,会影响位置先验的大小,本文设置为20。

实验
Main results

Ablation Study

相关文章:
[ICLR‘22] DAB-DETR: Dynamic Anchor Boxes Are Better Queries for DETR
paper: https://arxiv.org/pdf/2201.12329.pdfcode: GitHub - IDEA-Research/DAB-DETR: [ICLR 2022] DAB-DETR: Dynamic Anchor Boxes are Better Queries for DETR将位置相关性计算显式的引入到decoder中,通过box坐标(x, y, w, h) 影响Q和K的相关性计算。特征图要有…...
双周赛99(贪心、数学、区间合并计算、换根DP)
文章目录双周赛99[6312. 最小和分割](https://leetcode.cn/problems/split-with-minimum-sum/)贪心[6311. 统计染色格子数](https://leetcode.cn/problems/count-total-number-of-colored-cells/)找规律[6313. 统计将重叠区间合并成组的方案数](https://leetcode.cn/problems/c…...
OpenText Exceed TurboX(ETX) 客户案例——弗吉尼亚理工大学
弗吉尼亚理工大学简化了高性能计算的使用。OpenText Exceed TurboX 提供高性能图形远程应用程序访问,提高工作效率 挑战 图形界面响应缓慢,影响用户使用; 对复制应用程序输出文件进行本地分析时,影响带宽和速度; 使用…...
【Python】torch.norm()用法解析
【Python】torch.norm()用法解析 文章目录【Python】torch.norm()用法解析1. 介绍1.1 p-范数1.2 Frobenius 范数1.3 核范数2. API3. 示例1. 介绍 torch.norm()是对输入的tensor求对应的范数。tensor的范数有以下三种: 1.1 p-范数 1.2 Frobenius 范数 即ÿ…...
C++核心编程<内存分区模型>(1)
C核心编程<内存分区模型>1.内存分区模型1.1内存分区模型概述1.2内存分区的意义1.3程序允许前1.3.1代码区1.3.2全局区1.3.2.1全局区的演示1.4程序运行后1.4.1栈区1.4.1.1栈区演示1.4.2堆区1.4.2.1堆区演示1.5new操作符1.5.1new操作的概述1.内存分区模型 1.1内存分区模型概…...
电路基础(1)电路模型和电路定律
电路中的电压、电流之间具有两种约束,一种是由电路元件决定的元件约束;另一种是元件间连接而引入的几何约束(就是拓扑约束),后者由基尔霍夫定律来表达。基尔霍夫定律是集总参数电路的基本定律。 1.电路和电路模型电源又…...
pytest 基础
pytest安装 安装 pip install -U pytest 验证安装 pytest --version 约束: 所有的测试文件名都需要满足test_ *.py格式或* _test.py格式。 测试文件中的测试类以Test_开头,并且不能带有 init 方法。 测试类中可以包含一个或多个test_开头的函数。 步骤…...
软测入门(七)python操作数据文件(Json、yaml、csv、excel、xml)
python操作文件 txt文件 read() : 读取所有readline() : 读取一行readlines() : 读取所有,且以行为单位,放入list列表中 file open(r"F:\abc.txt", "r", encoding"utf-8") # 以utf-8格式读取文件 # 读取所有 # print…...
【小程序】django学习笔记1
网页能用,不知道小程序能不能用。应该能吧。。。。。创建django程序文件包,xxx处是给该文件夹起个名django-admin startproject xxx一个project是由很多个app(小应用)组成的在文件夹目录下创建一个app,xxx处给该app起个…...
MySQL常用函数整理
MySQL常用函数整理sql函数分类一、流程控制1、判断值为null或空字符串2、IF函数3、IFNULL函数4、CASE函数(1) 相当于switch case的作用(2) 相当于if elseif的作用5、COALESCE函数二、字符串类(GBT答案)1、用于select、insert等子句中2、用于where子句中其…...
设计模式—“组件协作”
现代软件专业分工之后的第一个结果是“框架与应用程序的划分”,“组件协作”模式通过晚期绑定,来实现框架与应用程序之间的松耦合,是二者之间协作时常用的模式。 典型模式有:Template Method、Observer、Strategy 一、Template Method 动机 在软件构建过程中,对于某一…...
vue里使用driver.js实现项目功能向导指引
介绍 https://github.com/kamranahmedse/driver.js driver.js 是一个轻量级、无依赖的原生JavaScript引擎,在整个页面中驱动用户的注意力,强大的、高度可定制的原生JavaScript引擎,无外部依赖,支持所有主流浏览器。 安装 npm …...
详解JAVA类加载
目录 1.概述 2.双亲委派 3.ServiceClassLoader 4.URLClassLoader 5.加载冲突 1.概述 概念: 类加载器(Class Loader)是Java虚拟机(JVM)的一个重要组件,负责加载Java类到内存中并使其可以被JVM执行。类…...
高斯分布、高斯混合模型、EM算法详细介绍及其原理详解
相关文章 K近邻算法和KD树详细介绍及其原理详解朴素贝叶斯算法和拉普拉斯平滑详细介绍及其原理详解决策树算法和CART决策树算法详细介绍及其原理详解线性回归算法和逻辑斯谛回归算法详细介绍及其原理详解硬间隔支持向量机算法、软间隔支持向量机算法、非线性支持向量机算法详细…...
[Linux入门篇]一篇博客解决C/C++/Linux System Call文件操作接口的使用
目录 0.前言 1.C / C ->文件操作 1.1 C语言文件操作 1.1.1 C语言文件打开/关闭/写入 1.1.2 C语言文件的追加操作 1.1.3 C语言文件的读取 1.2 C语言文件操作 1.2.1 C文件打开 / 关闭 / 写入 1.2.2 C文件读取 1.2.3 文件追加 2.三个默认输入输出流 2.1 C语言中的三…...
数据结构和算法学习记录——删除有序数组中的重复项、合并两个有序数组
去重删除有序数组中的重复项题目来自:https://leetcode.cn/problems/remove-duplicates-from-sorted-array/description/题目描述给你一个 升序排列 的数组 nums ,请你原地删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数…...
FPGA实现模拟视频BT656解码 TW2867四路PAL采集拼接显示 提供工程源码和技术支持
目录1、前言2、模拟视频概述3、模拟视频颜色空间4、逐行与隔行5、BT656数据与解码BT656数据格式BT656数据解码6、TW2867芯片解读与配置TW2867芯片解读TW2867芯片配置TW2867时序分析7、设计思路与框架8、vivado工程详解9、上板调试验证10、福利:工程代码的获取1、前言…...
【建议收藏】超详细的Canal入门,看这篇就够了!!!
概述 canal是阿里巴巴旗下的一款开源项目,纯Java开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB)。 背景 早期,阿里巴巴B2B公司因为存在杭州和美国双机房部…...
KubeSphere 社区双周报 | OpenFunction v1.0.0-rc.0 发布
KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。 本次双周报涵盖时间为:2023.02.17-2023.…...
查漏补缺3月
SPI扩展序列化方式 分布式ID的相关问题 TCP的流量控制,避免浪费网络资源的滑动平均法也可以用在其他可能会出现资源浪费的情况等 讲一讲对自己这个 RPC 项目的想法,你是怎么设计这个项目的,想要实现那些功能? 你认为一个好的 RPC…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving
地址:LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂,正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...
yaml读取写入常见错误 (‘cannot represent an object‘, 117)
错误一:yaml.representer.RepresenterError: (‘cannot represent an object’, 117) 出现这个问题一直没找到原因,后面把yaml.safe_dump直接替换成yaml.dump,确实能保存,但出现乱码: 放弃yaml.dump,又切…...
