【DETR】3、Conditional DETR | 拆分 content 和 spatial 来实现对 DETR 的加速

news2024/11/19 8:33:21

在这里插入图片描述

文章目录

    • 一、Conditional DETR 是怎么被提出来的
    • 二、Conditional DETR 的具体实现
      • 2.1 框架结构
      • 2.2 DETR 的 cross-attention 和 Conditional DETR 的 cross-attention 对比
    • 三、效果

论文:Conditional DETR for Fast Training Convergence

代码:https://github.com/Atten4Vis/ConditionalDETR

出处:ICCV2021

一、Conditional DETR 是怎么被提出来的

DETR 方法自被提出以来,就以其端到端的结构得到了很大的关注,DETR 方法首次将 Transformer 结构引入了目标检测任务中,且使用二分匹配的方式让一个目标只有一个输出框,免去了 NMS 的操作,使用 object queries 的方式免去了手工设置 anchor 的过程。

但是 DETR 的缺点也很明显:

  • 收敛速度慢:需要 500 个 epoch 才能收敛(是 Faster RCNN 的 10~20 倍)
  • 对小目标效果不好:DETR 使用的是 CNN 抽取的最后一层特征(1/32),分辨率较低,细节信息缺失严重,所以小目标检出效果较差

DETR 的基本流程:

  • CNN backbone 提取图像的 feature
  • Transformer Encoder 通过 self-attention 建模全局关系对 feature 进行增强
  • Transformer Decoder 的输入是 object queries 和 Transformer encoder 的输出,主要包含 self-attention 和 cross-attention 的过程。Cross- attention 主要是将 object query 当做查询,encoder feature 当做 key,为了查询和 query 有关的区域。Self-attention 主要是对每个 query 做交互,让每个 query 能看到其他 query 在查询什么东西,从而不重复,类似与 NMS 的作用
  • 对 Decoder 输出的查询好了的 query,使用 FFN 提取出 bbox 的位置和类别信息

针对 DETR 的收敛慢的问题,Conditional DETR 对 DETR 的结构进行了进一步的探索,从 DETR 的 decoder 入手,回顾一下 DETR 中提到的 decoder 的主要作用是关注目标的边界位置(extremity),如下图所示,包括边界位置的大象鼻子、大象蹄子、斑马蹄子等,都是对边界定位很重要的边界信息。

在这里插入图片描述

然后我们再看看 DETR 不同训练 epoch 的模型对边界位置的定位能力,如图 1 所示,在 DETR 训练 50 个 epoch 时(第二行),从空间 attention 图中可以明显的看出来模型并不能很好的找到目标的边界,在训练到 500 个 epoch 的时候(第三行),模型就能很好的找到目标的边界位置的。这里的每个列表示不同 head 的输出。

在这里插入图片描述

为什么会出现这样的问题呢,作者就进行了 DETR 结构的重新思考,并且提出了对之后的多篇工作影响很大的 content query/key 和 spatial query/key 的概念

在 DETR 中,DETR decoder 的 cross-attention 如下图所示(图来自 DETR 原文,cross-attention 是右边分支中间位置的模块),是对 encoder 的输出和 object query 做交叉注意力的模块,会有三个输入:

  • queries:每个 query 都是 decoder 第一层 self-attention 的输出( content query )+ object query( spatial query ),这里的 object query 就是 DETR 中提出的概念,每个 object query 都是候选框的信息,经过 FFN 后能输出位置和类别信息(本文 object query 个数 N 为 300)
  • keys:每个 key 都是 encoder 的输出特征( content key ) + 位置编码( spatial key )构成的,可以看 k 的下边是有一个 + 号的
  • values:只有来自 encoder 的输出

在这里插入图片描述

基于上面提到的 content 和 spatial 的概念,我们就可以继续往下看了,作者本文的动机来源于这么一个结论:

  • 在 cross-attention 中,content embedding 贡献很大,spatial embedding 贡献很小
  • 假设移除 key 中的 positional embedding 和第二层的 object query(但是第一层的 object query 是一定不能移除的哦!!!),AP 只会下降很小的值

影响究竟有多小呢:

  • 训练 50 个 epoch 的时候,不使用 spatial embedding 的话,AP 从 34.9 降到了 34.0
  • 训练 300 个 epoch 的时候,不使用 spatial embedding 的话,AP 下降 1.4

所以 DETR 是把 content key/query 和 spatial key/query 合在一起训练的,既然 spatial 影响不大,那就说明 content 的影响很大,需要要求 content 质量很高,才能得到较好的效果,当 content 质量不高的时候,spatial 再挣扎也没用。所以说,DETR 收敛慢的原因很大程度上是来源于 content 的质量太低了,且难以提升,所以 DETR 需要更大的训练 epoch 才能得到较好的效果,也进一步说明边界位置的定位能力其实来源于 content 特征,要想更快的提升模型对边界位置的定位能力,要能更快的让 content 特征优化得当才行。

说到这里,Conditional DETR 就提出了自己的方法,主要解决的就是 decoder 中的 cross-attention 的 content 难以学习的问题,Conditional DETR 从前一个 decoder 的输出为每个 query 都学习一个 conditional spatial embedding,来为 decoder 的 cross-attention 形成一个所谓的 【 conditional spatial query】。

二、Conditional DETR 的具体实现

2.1 框架结构

Conditional DETR 的方法沿用了 DETR 的整体流程,包括 CNN backbone,transformer encoder,transformer decoder, 以及 object class 和 box 位置的预测器。Encoder 和 Decoder 各自由6个相同的 layer 堆叠而成。Conditional DETR 相对于 DETR 的改动主要在 decoder 的 cross-attention 部分。

改动后的 decoder 的一层如图 3 所示,有三层:

  • 第一层: 输入为上一层 decoder 的输出,self-attention 过程用于去除冗余的预测,self-attention 就是来求 object query embedding 之间的关系,在每个特征都互相交流之后,就能知道每个 query 在预测什么样的特征,从而避免预测的特征冗余了,尽量都预测不一样的特征才好。
  • 第二层:cross-attention 层,用于聚合 encoder 的输出和 decoder 内部的特征,进一步加强特征
  • 第三层:FFN 层

在这里插入图片描述

Box 位置的回归:

在这里插入图片描述

  • f 是 decoder embedding
  • b 是 4d 向量 [x, y, w, h]
  • sigmoid 用于将输出归一化为 [0,1]
  • s 是参考点的未经归一化的 2D 坐标,在 DETR 中是 (0,0)

类别 预测:

在这里插入图片描述

conditional DETR 的 cross-attention 主要的作用:

  • 定位目标区域,也就是定位 bbox 的 4 个边界位置来定位,识别框内的目标区域用于分类
  • 通过引入 conditional spatial queries ,能够提升定位能力,且加速训练过程

2.2 DETR 的 cross-attention 和 Conditional DETR 的 cross-attention 对比

1、DETR

在 DETR 中,DETR decoder 的 cross-attention 如下图所示(图来自 DETR 原文,cross-attention 是右边分支中间位置的模块),是对 encoder 的输出和 object query 做交叉注意力的模块,会有三个输入:

  • queries:每个 query 都是 decoder 第一层 self-attention 的输出( content query c q c_q cq)+ object query( spatial query p q p_q pq ),这里的 object query 就是 DETR 中提出的概念,每个 object query 都是候选框的信息,经过 FFN 后能输出位置和类别信息(本文 object query o q o_q oq个数 N 为 300)
  • keys:每个 key 都是 encoder 的输出特征( content key c k c_k ck ) + 位置编码( spatial key p k p_k pk)构成的,可以看 k 的下边是有一个 + 号的
  • values:只有来自 encoder 的输出

因为所有的 spatial 的 content query/key 都是加在一起的,所以 attention 时候操作过程如下:

在这里插入图片描述

2、Conditional DETR

conditional cross-attention 方法将 content 和 spatial 分开了,使用如下的方式进行,让 spatial query 聚焦于 spatial attention,content query 聚焦于 content attention

在这里插入图片描述

三、效果

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

linux————keepalived+LVS(DR模式)

一、作用 使用keepalived解决LVS的单点故障 高可用集群 二、 调度器配置 环境 两台LVS服务 一主一备 两台web服务 采用nginx (实现LVS负载均衡) 服务ip 主LVS 192.168.100.3 备LVS 192.168.100.6 web1 192.…

Java——一个使用Java Swing实现的考试系统的窗体类

这是一个使用Java Swing实现的考试系统的窗体类。主要包括菜单栏、题目内容、选项、按钮等组件,并且实现了开始考试、上一题、下一题和提交按钮的功能。 在窗体的构造方法中,设置了窗体的标题、大小和位置,并调用了init方法和setVisible方法…

30天涨粉50万+ ,知识区诞生黑马UP主

飞瓜数据(B站版)数据显示,UP主你的同桌狗兄在近30天内,涨粉数累积达到53.4万,多次登上飞瓜数据(B站版)【涨粉榜】。 从粉丝变化趋势图可以看到,涨粉高峰期就是在8月。其实UP主并不是…

NSSCTF——Web题目2

目录 一、[HNCTF 2022 Week1]2048 二、[HNCTF 2022 Week1]What is Web 三、[LitCTF 2023]1zjs 四、[NCTF 2018]签到题 五、[SWPUCTF 2021 新生赛]gift_F12 一、[HNCTF 2022 Week1]2048 知识点:源代码审计 解题思路: 1、打开控制台,查看…

【Python】通过现象和本质理解python赋值、浅拷贝、深拷贝

原文作者:我辈李想 版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。 文章目录 前言一、看问题本质1.认识赋值、浅拷贝、深拷贝 二.看问题现象1.改变1级数据,这里要改变d2.改变2级数据,这里改变a或者…

c++学习【20】slam中的PnP问题

考虑n个三维空间点和它们的投影和&#xff0c; 第二个相机相对于第一个相机转换 现在已知和,求第二个相机相对于第一个相机转换 , 下面随机初始化一个,由可以推导出&#xff0c;但是有误差。 : public 表示 CurveFittingVertex 类从 g2o::BaseVertex<3, Eigen::Vector3d&…

知识速递(六)|ChIP-seq分析要点集锦

书接上文组学知识速递&#xff08;五&#xff09;|ChIP-seq知多少&#xff1f;&#xff0c;当我们实验完成&#xff0c;拿到下机数据之后&#xff0c;我们最关心的就是&#xff0c;这个数据能不能用&#xff1f;所谓数据能不能用&#xff0c;其实我们会重点关注以下问题&#x…

预防缓存穿透工具类

1. 前言 缓存穿透大家都知道&#xff0c;这里简单过一下 缓存和数据库中都没有的数据&#xff0c;而用户不断发起请求。比如查询id -1 的值 想着很多面向C端的查询接口&#xff0c;可能都需要做一下缓存操作&#xff0c;这里简单写了个自定义注解&#xff0c;将查询结果(包含…

黄金现货价格强弱怎么看?

相对强弱指标RSI由韦尔斯.怀尔德(Welles Wilder)提出&#xff0c;最初被用于期货交易之中&#xff0c;后来人们发现该指标用在现货黄金市场上的效果也十分不错&#xff0c;并对它的特点不断进行归纳和总结&#xff0c;如今已经成为市场上被应用得最为广泛的技术指标之一。 我们…

【C++】GCC对应C++的版本支持

1、查看当前GCC的版本 pffNUC12WSKi7:~$ gcc -v Using built-in specs. COLLECT_GCCgcc COLLECT_LTO_WRAPPER/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper OFFLOAD_TARGET_NAMESnvptx-none:hsa OFFLOAD_TARGET_DEFAULT1 Target: x86_64-linux-gnu Configured with: ../src/co…

高忆管理股市资讯:保持合理息差水平 新一轮存款利率下调可期

1年期借款商场报价利率(LPR)日前再度下调&#xff0c;意味着实体经济融资本钱将随之下行。业内人士以为&#xff0c;当时商业银行负债端本钱仍显刚性&#xff0c;净息差已降至近年来低位&#xff0c;为保持合理息差水平&#xff0c;商业银行存款挂牌利率或许迎来新一轮下调。 上…

实训笔记8.25

实训笔记8.25 8.25笔记一、Flume数据采集技术1.1 Flume实现数据采集主要借助Flume的组成架构1.2 Flume采集数据的时候&#xff0c;核心是编写Flume的采集脚本xxx.conf1.2.1 脚本文件主要由五部分组成 二、Flume案例实操2.1 采集一个网络端口的数据到控制台2.1.1 分析案例的组件…

NFT Insider #104:The Sandbox:全新土地销售活动 Turkishverse 来袭

引言&#xff1a;NFT Insider由NFT收藏组织WHALE Members、BeepCrypto联合出品&#xff0c;浓缩每周NFT新闻&#xff0c;为大家带来关于NFT最全面、最新鲜、最有价值的讯息。每期周报将从NFT市场数据&#xff0c;艺术新闻类&#xff0c;游戏新闻类&#xff0c;虚拟世界类&#…

校园供水系统智能管理

import pandas as pd data1pd.read_excel("C://Users//JJH//Desktop//E//附件_一季度.xlsx") data2pd.read_excel("C://Users//JJH//Desktop//E//附件_二季度.xlsx") data3pd.read_excel("C://Users//JJH//Desktop//E//附件_三季度.xlsx") data4…

Unity3D Pico VR 手势识别 二

Unity3D Pico VR 手势识别_Cool-浩的博客-CSDN博客 此篇主要讲解怎么手势追踪&#xff0c;手势姿态自定义预制识别&#xff0c;不会导入SDK和配置环境的请看上一章节 环境要求 SDK 版本&#xff1a;2.3.0 及以上PICO 设备型号&#xff1a;PICO Neo3 和 PICO 4 系列PICO 设备系…

Elasticsearch 集成---Spark Streaming 框架集成

一.Spark Streaming 框架介绍 Spark Streaming 是 Spark core API 的扩展&#xff0c;支持实时数据流的处理&#xff0c;并且具有可扩展&#xff0c; 高吞吐量&#xff0c;容错的特点。 数据可以从许多来源获取&#xff0c;如 Kafka &#xff0c; Flume &#xff0c; Kin…

网络地址转换NAT-动态NAT的使用范围和配置-思科EI,华为数通

网络地址转换NAT-动态NAT的使用范围和配置 什么是动态NAT&#xff1f; 使用公有地址池&#xff0c;并以先到先得的原则分配这些地址。当具有私有 IP 地址的主机请求访问 Internet 时&#xff0c;动态 NAT 从地址池中选择一个未被其它主机占用的 IP 地址一对一的转化。当数据会话…

操作无法完成错误0x0000709的解决方法分享,教你快速修复错误代码问题

在使用计算机时&#xff0c;我们有时会遇到各种错误代码。其中之一是错误代码0x0000709&#xff0c;表示操作无法完成。这个错误代码可能由多种原因引起&#xff0c;但幸运的是&#xff0c;我们可以采取一些措施来解决它。本文将介绍错误代码0x0000709的含义&#xff0c;提供几…

使用vlc在线播放rtsp视频url

1. 2. 3. 工具链接&#xff1a; https://download.csdn.net/download/qq_43560721/88249440

人效九宫格城市沙龙暨《人效九宫格白皮书》发布会 —上海站,圆满结束

8月11日&#xff0c;在上海龙之梦万丽酒店&#xff0c;由盖雅工场主办的人效九宫格城市沙龙暨《人效九宫格白皮书》发布会 —上海站&#xff0c;圆满结束。 近百位来自多个行业的企业管理者及人力资源从业者汇聚一堂&#xff0c;共同探讨企业如何将盈利模式从数量增长转为质量增…