Efficient DETR:别再随机初始化了,旷视提出单解码层的高效DETR | CVPR 2021

news2024/11/23 21:43:58

Efficient DETR结合密集检测和稀疏集合检测的优点,利用密集先验来初始化对象容器,弥补单层解码器结构与 6 层解码器结构的差距。在MS COCO上进行的实验表明,仅 3 个编码器层和 1 个解码器层即可实现与最先进的目标检测方法竞争的性能,在CrowdHuman密集数据集上的性能也远远优于其它检测器

来源:晓飞的算法工程笔记 公众号

论文: Efficient DETR: Improving End-to-End Object Detector with Dense Prior

  • 论文地址:https://arxiv.org/abs/2104.01318

Introduction


  最近,DETR提出构建一个基于编码器-解码器Transformer架构和二分匹配的端到端框架,该框架无需后处理即可直接预测一组边界框。然而,DETR需要比现代主流检测器多 10 到 20 倍的训练周期才能收敛,并且在检测小物体方面的性能较低。

Deformable DETR从两个方面解决上面的两个问题:(i) 用局部空间注意力取代全局范围注意力,从而加速训练的收敛。(ii) 用多尺度特征图代替单尺度特征图,显着提高了检测小物体的性能。

DETR的流程可以抽象为如图 1(a) 所示,对象容器定义为结构化信息的容器,对象查询和参考点都属于对象容器。一组随机初始化的对象容器被输入到含 6 个编码器层的特征细化器中,与从图像中提取的特征进行交互,细化的对象容器有助于DETR的最终预测。总之,图像和随机初始化的对象容器经过特征提取器和级联特征细化器以获得最终结果。在此流程中,DETRDeformable DETR都具有 6 个编码器层和 6 个解码器层的架构,这种结构是DETR系列实现高精度物体检测的关键。

  论文进行了大量的实验来研究DETR的组件以了解其机制,发现具有额外辅助损失的解码器层对性能的贡献最大。解码器层迭代地将对象容器与特征图进行交互,逐步将随机初始化对象容器进行细化,这是导致收敛缓慢的主要原因。

  为此,论文提出了简单但高效Efficient DETR,架构如图 1(b) 所示,包含密集和稀疏两部分,共用相同的检测头。在密集部分,执行基于滑动窗口的类可知密集预测生成区域提案,选取 Top-K个高分提案并将其四维提案和 256 维编码器特征作为参考点和对象查询。由于这样的对象容器的初始化非常合理,只需 1 个解码器层即可实现更好的性能和快速收敛。

Exploring DETR


Revisit DETR

  • Encoder and decoder

DETR系列采用编码器-解码器架构,编码器和解码器都级联 6 个相同的层。编码器层由多头自注意力和前馈网络(FFN)组成,而解码器层具有额外的多头交叉注意力层。编码器层起着与卷积类似的作用,通过多头自注意力从CNN主干中提取上下文特征。在解码器中,一组 256 维对象查询与整个图像的编码器特征交互,通过多头交叉注意力聚合信息,辅助二分匹配损失应用于每个解码器层。

  表 1 展示了不同层数的性能对比,实验说明DETR对解码器层数更敏感。将具有 3 个编码器和 3 个解码器的DETR作为论文的基线,删除两层解码层可能会减少约9.3 AP,而删除两层编码层仅导致AP下降1.7。这意味着,解码器比编码器对于DETR更重要。

  • Why is the decoder more important than encoder?

  编码器和解码器都采用级联架构,只不过解码器对于每层都有一个额外的辅助损失。在表 1 中,论文发现辅助解码损失是DETR对解码器层数更加敏感的主要原因。在没有辅助损失的情况下,编码器和解码器的行为趋于相同。辅助解码损失在更新查询特征时引入了强监督,使得解码器更加高效。解码器的级联结构通过逐层辅助损失来细化特征,迭代次数越多,辅助解码监督就越有效。

  为了进一步探索解码器的级联结构,论文尝试不同数量的解码器层。表 2 显示,随着级联次数的减少,性能显着下降。 6 层解码器和 1 层解码器之间有10.3 AP的巨大下降。值得注意的是,编码器每次迭代后仅更新对象查询。因为最终预测是由检测头根据对象查询进行预测的,所以对象查询与性能密切相关。然而对象查询是在训练开始时随机初始化的,如果这种随机初始化不能提供良好的初始状态,可能就是DETR需要 6 次层级联结构才能实现有竞争力性能的原因。

Impact of initialization of object containers

  对象查询属于对象容器的特征信息,定义为可学习的 256 维位置嵌入,难以分析其作用。但论文观察到DETR中的每个对象查询都会通过多种操作模式,学习到专门针对某些区域和框大小。为此,论文认为研究对象查询的空间投影可能有助于以直观的方式理解。

Deformable DETR带来了一个与对象查询相关的新组件,称为参考点。参考点是表示框中心预测的二维张量,属于对象容器的位置信息。此外,参考点是通过线性投影从 256 维对象查询中预测的,可以作为对象查询在二维空间中的投影,直观地呈现对象查询中的位置信息。

  在传递到解码器层之前,参考点是通过随机初始化的对象查询的线性投影生成的,此过程称为参考点的初始化。图 2 展示了收敛模型学习到的参考点。初始阶段的参考点均匀分布在图像上,类似于基于锚点的检测器中锚点的生成。随着迭代阶段的增加,参考点逐渐聚集到前景的中心,在最后阶段覆盖几乎所有前景。直观上,参考点充当定位前景的锚点,并使注意力模块聚焦于前景周围的一小组关键采样点。

  研究完参考点的更新后,论文开始探索其初始化,即参考点的生成方式。对于其余部分,论文将参考点的初始化和对象查询称为对象容器的初始化。

  • Different initialization of reference point

  论文在级联(6-解码器)和非级联(1-解码器)结构中尝试几种不同的参考点初始化,如表 3 所示,不同的初始化在非级联结构中的行为差异很大,而级联结构则产生相似的性能。非级联结构中,将滑动窗口的中心作为参考点的网格初始化,其结果大约等于可学习初始化的性能,而另外两种初始化则会导致精度的巨大下降。

  为了更好的分析,论文可视化了几个阶段不同初始化的参考点。随着迭代阶段的增加,参考点往往处于相同的分布并在最后阶段以相似的模式定位前景。总之,在非级联结构中,不同的参考点初始化会导致巨大的模型性能差异,而级联结构则可以通过多次迭代弥补了模型性能差异。从另一个角度来看,更好的参考点初始化可以提高非级联结构的性能。

  • Can we bring the gap of 1-decoder structure and 6-decoder structure with better initialization?

  根据前面的发现,论文认为主流检测器中的锚点先验可能有助于论文解决这个问题。在现代两级检测器中,区域提案由RPN在滑动窗口中生成,为前景提供一组与类别无关的候选者。

RPN是一种有效的结构,可以通过密集先验生成前景的粗粒度边界框。如图 3(b) 所示,论文在编码器的密集特征上添加了一个RPN层,RPN头共享编码器的特征并预测锚点的对象分数和偏移量。选择得分最高的边界框作为区域建议,然后以非级联结构中的区域提案中心初始化参考点。从表 3 的结果可以看出,其性能大大优于其他方法,在非级联结构上带来了巨大的改进。

  图 5 展示了该方法的可视化,初始阶段的参考点得到与其他方法在最后阶段的相似分布。区域提案以更合理的分布初始化参考点,提高了无级联结构的Deformable DETR的准确性。

  如表 4 所示,为参考点提供更好的初始状态和密集的先验结果可以显着改进1-解码器结构。但参考点只是对象查询的空间投影,对象查询还包含对象容器的额外抽象信息。因此,可以考虑动态根据先验结果来初始化对象查询。

  对于提案初始化中的每个参考点,从特征图中选择其相应的特征作为其配套对象查询的初始化,即来自编码器的 256 维张量。论文的方法如图 3(c)所示。在表 4 中,该方法进一步将 1-解码器结构改进了3 AP。此外,仅使用密集先验初始化对象查询,也可以给基线带来显着的改进。

  这些结果表明,对象容器的初始状态与非级联结构的性能高度相关,而RPN中的提案信息能够提供很好的初始化。基于上面的发现,论文提出了Efficient DETR,能够缩小 1-解码器结构和 6-解码器结构之间的性能差距。

Efficient DETR


  论文提出了一个简单但有效的Efficient DETR目标检测框架,包含 3 个编码器层和 1 个解码器层,解码器中没有级联结构。

Efficient DETR由密集和稀疏两部分组成:

  • 密集部分对来自编码器的密集特征进行预测,挑选top-k区域提案,将来自编码器的 4 维区域提案及其 256 维特征作为参考点和对象查询的初始化。
  • 稀疏部分将密集先验初始化的参考点和对象查询输入到单层解码器,与编码器特征交互以进一步细化,从细化的对象容器中预测最终结果。

  两个部分共用相同的检测头,所有编码器和解码器层都使用可变形注意模块。

  • Backbone

  遵循Deformable DETR的设计,从ResNet中提取的多尺度特征图构建主干特征,包含四种尺度特征,每个都为 256 通道。前三个特征图是通过步幅为 1 的 1 × 1 1\times 1 1×1 卷积从ResNetC3C4C5特征图中提取的,最后一个特征图通过在C5上的步幅为 2 的 3 × 3 3\times 3 3×3 卷积生成。

  • Dense part

  密集部分由主干、编码器和检测头组成。遵循两阶段Deformable DETR的设计,在多尺度特征图的每个位置生成锚点,基础锚点的尺寸为 0.05(宽高相对于特征图的比例)。检测头预测每个锚点的C个类别分数和 4 个偏移量。分类分支是线性投影层,回归分支是隐藏层大小为 256 的 3 层MLP

  • Sparse part

  密集部分的输出与编码器特征的大小一致,根据其对象得分来选择top-k提案作为参考点,由其 256 维编码器特征预测的最大类别得分作为其对象得分进行选择。注意,这里使用 4 维框作为参考点而不是 2 维中心,以便获取更多的空间信息。至于对象查询,取密集输出的特征图中对应的 256 维特征。

  将密集部分的特征作为稀疏部分的初始状态,考虑到密集部分和稀疏部分的任务非常相似,这两个部分共享相同的检测头。

  初始化后,对象查询被输入到解码器层以进行进一步细化。在传统的检测方法中,一级检测器面临特征未对准的问题,而两级检测器则通过ROIAlignROIPool解决这个问题。在论文的稀疏部分中,错位由解码器修复,其交叉注意模块使对象查询能够聚合与其相关的特征,通过增强的对象查询进行最终预测。

  与DETR不同,提案数量是在训练过程中动态调整的。鉴于网络在训练开始时无法预测准确的类别分数,因此从一开始就设置了大量的提案(300),确保几乎所有前景都被稀疏的提案集覆盖。但仍然有可能少数提案会错过一些困难的例子,导致训练不稳定。随着网络的训练,论文线性减少提案数量到 100。这种策略使网络训练变得高效,仅用 100 个提案就达到了与使用 300 个提案训练的网络相当的精度。

  • Loss

  密集部分和稀疏部分共享相同的标签分配规则和损失函数。为了避免像NMS那样的后处理,采用一对一的标签分配规则并通过匈牙利算法将预测与GT进行匹配。匹配分数的定义与损失函数相同,均为 L = λ c l s ⋅ L c l s + λ L 1 ⋅ L L 1 + λ g i o u ⋅ L g i o u L = \lambda_{cls}\cdot \mathcal{L}_{cls}+\lambda_{L1}\cdot \mathcal{L}_{L1}+\lambda_{giou}\cdot \mathcal{L}_{giou} L=λclsLcls+λL1LL1+λgiouLgiou,其中 L _ c l s \mathcal{L}\_{cls} L_clsfocal loss。论文在密集部分使用一对一标签分配规则,用少量的提案(100)即可实现高精度,而一对多分配依赖于大量提案来达到相似的性能。

Experiments


  与其它模型在COCO 2017验证集上的结果如表 5 所示。

  表 6 展示了不同检测头配置的对比实验。

  表 7 展示了编码层和解码层数量的对比实验。

  表 8 展示了不同提案数量的对比实验。

  表 9 展示了不同标签分配规则的对比实验。

  表 10 展示了拥挤场景中的性能对比。

如果本文对你有帮助,麻烦点个赞或在看呗~undefined更多内容请关注 微信公众号【晓飞的算法工程笔记】

work-life balance.

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

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

相关文章

指针函数与函数指针的区别

1、指针函数 1-1、定义 指针函数,顾名思义,是一个函数,但其返回类型是指针。这意味着当这个函数被调用时,它会返回一个地址值,这个地址值指向某个类型的数据。 1-2、特点 函数性质:首先,它是…

【2024】20个高级 Java 面试问题及答案

1:解释Java序列化中transient关键字的意义。 在 Java 中,“ transient ”关键字用于指示变量在对象序列化期间不应被序列化。当变量被标记为“transient”时,意味着该变量应被序列化机制忽略。 这在处理不应持久的敏感或临时数据时特别有用…

基础 - 前端知识体系详解

一、前端三要素 HTML(结构): 超文本标记语言(Hyper Text Markup Language),决定网页的结构和内容。CSS(表现): 层叠样式表(Cascading Style Sheets&#xff0…

基于飞腾平台的Hbase的安装配置

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力,聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域,包含了应用使能套件、软件仓库、软件支持、软件适…

人脸操作:从检测到识别的全景指南

人脸操作:从检测到识别的全景指南 在现代计算机视觉技术中,人脸操作是一个非常重要的领域。人脸操作不仅包括检测图像中的人脸,还涉及到人脸识别、表情分析、面部特征提取等任务。这些技术在各种应用中发挥着关键作用,从社交媒体…

Windows Server 2016 Standard 将程序加入开机自启动

分3步 1 打开“启动”文件夹:在Windows的搜索栏中输入“shell:startup”,点击搜索结果中的 “启动” 文件夹即可打开。 2 在启动文件夹中,右键点击空白区域,选择“新建”->“快捷方式”。 3 将 “程序的快捷方式” 添加到启动…

IP转地理位置:3个好用免费开源库代码及数据库对比体验详解

最近在做一个IP定位显示国家省市功能,在全网找了一圈,也每个安装体验过,测试他的数据库精准度。 本人是用PHP的第三方库,整理以下使用过的ip定位转地理位置库。 ip定位转地理位置库 1.itbdw/ip-database: **gihub地…

Qt 系统相关 - 网络与音视频

目录 一、Qt 网络 1. UDP Socket 1.1 核心 API 概览 1.2 回显服务器 1.3 回显客户端 2. TCP Socket 2.1 核心 API 概览 2.2 回显服务器 2.3 回显客户端 3. HTTP Client 3.1 核心 API 3.2 代码示例 二、Qt 音视频 1. Qt 音频 1.1 核心API概览 1.2 示例 2. Qt 视…

Java面试八股之请简述消息队列的发布订阅模式

请简述消息队列的发布订阅模式 发布订阅(Publish-Subscribe,简称 Pub/Sub)模型是一种消息传递模式,它在组件之间提供了高度的解耦和灵活性。这种模式广泛应用于分布式系统、事件驱动架构以及消息队列系统中。下面是发布订阅模型的…

什么是核心交换机?这样回答太到位了

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部 你们好,我的网工朋友。 无论是企业内部通信还是对外服务,稳定高效的数据传输都是成功的关键。 在这个背景下&#xff0c…

A-CSPO课程概念澄清和实操:假定(Assumptions)、实验(Experiments)、假设(Hypotheses)

“确保你把这当作一个实验。” “我们的工作假设是客户想要这个。” 这些场景熟悉吗?你的团队(或整个组织)可能会经常混淆假定(Assumptions)、实验(Experiments)和假设(Hypotheses)等术语,这会造成混乱。 让我们澄清一下每一个…

JAVA社会校招人力资源招聘系统小程序源码

解锁职场新篇章,揭秘“社会校招人力资源招聘系统”的奥秘 一、引言:为何社会校招需要数字化升级? 在这个信息爆炸的时代,企业面临着前所未有的招聘挑战:如何从海量简历中精准筛选出合适的人才?如何高效管…

SQLAlchemy 中使用 GroupBy 和 Sum 导致重复计数的问题及解决方法

在 SQLAlchemy 中使用 GroupBy 和 Sum 时,有时会遇到重复计数或意外的查询结果。这通常是因为在聚合查询中没有正确地指定聚合函数或 GroupBy 条件,导致结果集没有按预期方式分组。 1、问题背景 在使用 SQLAlchemy 进行数据查询时,用户在尝试…

入门 - vue整个过程的生命周期详解

生命周期概念 Vue的生命周期就是vue实例从创建到销毁的全过程,也就是new Vue()开始就是vue生命周期的开始。Vue 实例有⼀个完整的⽣命周期,也就是从开始创建、初始化数据、编译模版、挂载Dom->渲染、更新->渲染、卸载 等⼀系列过程,称…

无人机灯光含义的详解!!!

一、LED指示灯和状态指示灯 LED指示灯:通常位于飞行器的头部机臂上,用于显示无人机的当前状态。 状态指示灯:位于尾部机臂上,提供更多关于无人机状态的信息。 红绿黄灯交替闪烁 表示无人机正在进行系统自检。稍等片刻&#xf…

Mybatis获取主键自增的方法

原本的方法 使用原本的JDBC去获取主键自增的方法如下图所示: 在这段代码中,通过连接对象 conn 的 prepareStatement 方法创建了一个PreparedStatement对象,并将SQL语句和 RETURN_GENERATED_KEYS 常量作为参数传递给该方法。这意味着执行SQL…

使用 Python 创建 Windows 程序列表生成器:从安装程序到配置文件

在当今的数字时代,我们的计算机上安装了数不胜数的程序。但是,您是否曾想过如何快速获取所有已安装程序的列表,并将其转化为可用的配置文件?今天,我们将探讨如何使用 Python 创建一个强大的工具,它不仅可以…

StarRocks Lakehouse 快速入门——Apache Paimon

StarRocks Lakehouse 快速入门指南为您提供了湖仓技术概览,旨在帮助您迅速掌握其核心特性、独特优势和应用场景。本指南将指导您如何高效地利用 StarRocks 构建解决方案。文章末尾,我们集合了来自阿里云、饿了么、喜马拉雅和同程旅行等行业领导者在 Star…

【私有云场景案例分享①】高效的集群管理能力

一、前言 设备的管理对企业至关重要,会影响生产效率、成本控制和竞争力。然而,企业在设备管理上面临设备数量多、设备分布广、维护成本高等挑战。DeviceKeeper设备管理网站作为解决方案,可以通过远程设备监控、远程设备维护和包体共享等功能…

制造业MES系统源码,前端框架:vue.js,后端框架:springboot 功能模块包括:生产计划管理、物料管理、工艺管理、设备管理、

MES系统功能模块解析,MES系统源码 MES系统是一种用于协调和优化制造过程的信息管理系统,可以帮助企业实现生产计划的顺利执行,并提供全面的生产监控和数据分析功能。 MES系统常见的功能模块包括生产计划管理、物料管理、工艺管理、设备管理…