目标检测 DAB-DETR(2022)

news/2024/12/21 19:56:49/

文章目录

  • 前言
  • Query是什么,Detr收敛速度慢的原因是什么?
  • 改进策略
  • 位置先验和模型框架
  • 设置温度系数

前言

本文认为原始的Detr系列论文中:可学习的object queries仅仅是给model预测box提供了锚点(中心点)信息,却没有提供box的宽和高信息。于是本文考虑引入可学习的动态锚框来使model能够适配不同尺寸的物体,深刻地揭示了 Decoder query 的具体意义,并加速网络的收敛。

设计了带有尺度信息的 4d anchor box(x, y, w, h)作为位置先验,并让其利用 Transformer 多层级的结构实现 coarse-to-fine 的迭代更新,因此将其称为 dynamic anchor box。

Query是什么,Detr收敛速度慢的原因是什么?

在这里插入图片描述
在 DETR 中,Decoder的cross attention中的query是由两部分构成的:learnable embeddings(上图的 Learnable Queries,其实是上一层Decoder的输出) 、初始化为全0的非可学习的 embeddings(上图的 Decoder Embeddings,其实是self-Attention的输出)。

Decoder Embeddings 是不可学习的,它通过 cross-attention 与 Encoder 的 key(图像特征) 进行交互,并将得到的注意力施加在 value(来自 Encoder,本质也是图像特征) 上,从而抽取到图像语义,由此可将它视作是图像语义的载体。
于是,Decoder Embeddings 可以对应到内容部分。
至于 Learnable Queries,它是可学习的,通过 cross-attention 与图像特征进行交互(它不断在图像中看某些东西),最终由目标损失反向传播回来获得梯度,那么它理应要学会关注到物体所在的位置。

decoder embeddings对应内容部分,learnable queries对应位置部分

从宏观上来看,Encoder 中,query 是图像特征 + 正余弦位置编码,而在Decoder中的cross attention,query 是初始化为0的 decoder embeddings + learnable queries。

收敛慢的原因是什么?
learnable queries(位置部分) 没有显式地提供位置先验(没有像传统 anchor 那样平铺到图像上、也没有像 Encoder 中那样经历了正余弦位置编码从而得到明确的、可区分的信息),因此,在刚开始进行交叉注意力计算时,大部分 decoder embeddings 中的向量都会被 project 到图像特征的同一个空间位置(因为大家都没有啥区别与约束)。于是,DETR 就势必要经历较多论迭代才能收敛(学得好)。

DETR收敛慢的原因在于没有提供位置先验信息

在DAB-DETR中,通过位置先验为每个查询(query)分配一个特定位置的先验信息,这个位置先验会通过正弦位置编码等方式为每个查询提供位置信息,并通过 Transformer 多层级的结构进行不断迭代更新,使得模型能够更好地理解特征图上的位置关系。

改进策略

作者可视化了Decoder中Query部分的可学习查询learnable queries与Decoder中Key部分的位置嵌入positional embeddings间的注意力权重:
在这里插入图片描述
可以看到:

DETR的可学习查询没有表现出很优秀的定位能力,主要有两个不好的表现:多模式(multiple modes)和注意力权重几乎一致(nearly uniform attention weights)。多模式指同一个查询所产生的关注点不只一个,如上面两个子图所示;注意力权重几乎一致就是说希望被关注的或不希望被关注的区域面积过大,没有聚焦(不是一个点x,y),如下面两个子图所示。因此,可以确定主要问题出在可学习查询没有表达物体位置信息上。

Conditional DETR引入了x,y中心点坐标来作为先验信息进行训练,于是产生了这种类高斯的注意力权重图,每个查询所关注的区域虽然个数都是一个并且位置不同,但是其关注区域的大小基本是一致的,不利于不同尺寸多物体的检测。

为了解决上面的问题,Deformable Detr在引入位置信息( x , y )的基础上,又引入了宽高信息( w , h ),并提出可以对宽高进行调制的交叉注意力策略。效果上图(c)所示,每个查询所关注的区域位置、大小均有差异。

位置先验和模型框架

DAB-DETR与DETR的主要差别集中在Decoder部分(DABDeformable-DETR作为强化版在附录里面被提到),DAB-DETR先用nn.Embedding初始化了300个可学习的( x , y , w , h ) ,维度是[4,300] ,然后经过位置编码将位置信息搞成512维(实际是[512,300]),其中前128+128维分别表示x,y的坐标信息;后128+128分别表示w,h信息(Deformable DETR的查询个数也是300,而不是DETR中的100)。

DAB-DETR用uniform(0, 1)将( x , y ) 调整成了均匀分布,并消除了梯度(注意( w , h ) 的梯度没有消除)。之后由Width & Height Modulated Multi-Head Cross-Attention的输出再经过MLP得到预测偏移量( Δ x , Δ y , Δ w , Δ h ) ,来逐层修正( x , y , w , h ) 。

取消xy梯度保留wh梯度的原因:在训练过程中,如果x和y的坐标直接作为网络的一部分参与反向传播,模型可能会过度学习训练样本中的特定位置信息,导致过拟合,取消了xy的梯度,相当于每来一张图我的位置先验都是随机地均匀分布在图中各个位置,不会因为偏好于训练集中目标物体的位置分布而影响到模型在其它数据上的泛化性。宽度和高度(w, h)的信息仍然保留了梯度。这是因为宽度和高度的预测需要与特征图中的上下文信息相结合,以便模型能够学习如何根据输入特征来调整目标框的尺寸。通过保留(w, h)的梯度,模型可以根据特征图的内容来预测合适的尺寸,而不仅仅是依赖于位置信息。
在这里插入图片描述
DAB-DETR的Decoder的详细结构图如下:
在这里插入图片描述
在这里插入图片描述
对于交叉注意力模块:

  1. Value也是编码器输出的图像特征 ,定义为 F x , y F_{x,y} Fx,y
  2. Key部分包括编码器输出的图像特征 F x , y F_{x,y} Fx,y和位置编码PE( x q x_q xq, y q y_q yq) (仅编码(x,y)),DETR是将图像特征和位置编码相加,DAB-DETR却是将两者拼接。
  3. Query部分包括自注意力模块的输出即用于表达图像内容信息的维度为D的 C q C_q Cq,与中心坐标( x , y ) 对应的D维位置编码PE( x q x_q xq, y q y_q yq) ,还有进入自注意力模块之前的 C q C_q Cq再经过MLP加权位置编码。三者通过concat拼接在一起。

交叉注意模块的Query、Key、Value分别如下:
在这里插入图片描述
此外,在交叉注意力模块DAB-DETR还引入了尺寸(宽度和高度)调制功能,“宽和高调制交叉注意力模块”:在计算 P k P_k Pk P q P_q Pq的权重相似度时引入了一个(1/w,1/h)的一个尺度变换操作:
在这里插入图片描述

设置温度系数

在这里插入图片描述


http://www.ppmy.cn/news/1534982.html

相关文章

GPT对话知识库——在STM32的平台下,通过SPI读取和写入Flash的步骤。

目录 1,问: 1,答: 步骤概述 步骤 1:SPI 初始化 步骤 2:Flash 初始化(可选) 步骤 3:发送读取命令 示例:发送读取数据命令 步骤 4:读取数据…

[CSP-J 2022] 逻辑表达式

题目来源:洛谷题库 [CSP-J 2022] 逻辑表达式 题目描述 逻辑表达式是计算机科学中的重要概念和工具,包含逻辑值、逻辑运算、逻辑运算优先级等内容。 在一个逻辑表达式中,元素的值只有两种可能: 0 0 0(表示假&#x…

ACT调试pycharm报错

在运行ACT 代码时,根据官方readme使用命令行需要在wandb选择的时候输入3 但是,使用pycharm运行的时候会报错 wandb.errors.UsageError: api_key not configured (no-tty). call wandb.login(key[your_api_key]) 网上搜索都是说要注册什么key&#xf…

Spring Boot + MyBatis 项目中常用注解详解(万字长篇解读)

Spring Boot MyBatis 项目中常用注解详解 在现代Java开发中,Spring Boot和MyBatis是两大热门框架,广泛应用于构建高效、可维护的企业级应用。两者结合使用,可以充分发挥各自的优势,提高开发效率和代码质量。在这个过程中&#x…

JAVA学习-练习试用Java实现“二叉树的层序遍历 II”

问题: 给定一个二叉树,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 例如: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回其自底向…

微服务实战——平台属性

平台属性 中间表复杂业务 /*** 获取分类规格参数(模糊查询)** param params* param catelogId* param type type"base"时查询基础属性,type"sale"时查询销售属性* return*/ Override public PageUtils listByCatelogId…

使用 Wireshark 抓取类似的 HTTP 请求包

要使用 Wireshark 抓取类似的 HTTP 请求包,可以按照以下步骤进行操作: 安装并启动 Wireshark 如果你还没有安装 Wireshark,可以从Wireshark 官方网站下载并安装它。 安装完成后,启动 Wireshark。选择网络接口 在 Wireshark 主界面…

深度学习:DCGAN

目录 什么是DCGAN DCGAN与GAN的区别 DCGAN生成器 DCGAN判别器 基于MindSpore框架实现DCGAN 数据集: 变量定义: 数据预处理: 生成器: 判别器: 损失函数与优化器 训练模型 模型推理 什么是DCGAN CDGAN&#…