论文阅读|DETR

End-to-End Object Detection with Transformers

论文链接:https://arxiv.org/pdf/2005.12872.pdf

代码:https://github.com/facebookresearch/detr

论文翻译:(59条消息) DETR论文笔记_等风来~~的博客-CSDN博客_detr论文

目录

Abstract

Introduction

Related work

Set prediction

Transformers and Parallel Decoding

Objection detection

Set-based loss 基于集合的损失

Recurrent detectors循环检测器

The DETR model

Object detection set prediction loss

DETR architecture

Backbone

Transformer encoder

Transformer decoder

FFNs


Abstract

DETR是第一个将Transformer成功整合为检测pipeline中心构建块的目标检测框架。基于Transformers的端到端目标检测,没有NMS后处理步骤、真正的没有anchor,且对标超越Faster RCNN

Introduction

目标检测的任务是为每个感兴趣的目标提供一组bounding box和类别标签,现代检测器通过在一大组proposal、anchor或窗口中心上定义替代回归和分类问题,间接地解决了这一集合预测任务。它们的性能受到后处理步骤(合并接近或重复的预测)、锚框的设计以及将目标框分配给锚的启发式算法的显著影响。为了简化这些流程,我们提出了一种直接集预测方法来绕过代理任务。这种端到端的思想在复杂的结构化预测任务(如机器翻译或语音识别)方面取得了重大进展,但在目标检测方面还没有取得进展:以前的尝试要么添加了其他形式的先验知识,要么在具有挑战性的基准上没有被证明与强大的基线具有竞争力。本文旨在填补这一空白。 

我们将目标检测视为一个直接集预测问题来简化训练。我们采用了一种基于transformers的编解码器架构,这是一种流行的序列预测架构。transformers的自注意机制可以显式地对序列中元素之间的所有成对交互进行建模,这使得这些体系结构特别适用于集预测的特定约束,例如消除重复预测。

DETR(见图1)一次预测所有对象,并使用一个集损函数进行端到端训练,该函数在预测对象和地面真实对象之间执行二部匹配。DETR通过删除编码先验知识的多个手工设计的组件(如anchor或非最大抑制nms),简化了检测流程。与大多数现有的检测方法不同,DETR不需要任何定制的层,因此可以在任何包含标准CNN和transformer类的框架中轻松复制。

与以往大多数关于直接集预测的工作相比,DETR的主要特点是二部匹配损耗transformer(非自回归)并行译码的结合。相比之下,以前的工作主要集中在使用RNNs的自回归解码上。我们的匹配损失函数唯一地将预测分配给ground truth,并且对预测对象的排列是不变的,因此我们可以并行地发射它们。

我们在一个最流行的目标检测数据集COCO上评估了DETR,并与一个非常有竞争力的Faster R-CNN基线进行了比较。Faster R-CNN经历了多次设计迭代,自最初发布以来,其性能得到了极大的提高。我们的实验表明,我们的新模型达到了相当的性能。更准确地说,DETR在大型对象上表现出明显更好的性能,这一结果很可能是由transformer的非局部计算实现的。但是,它在小对象上的性能较低。我们期望未来的工作能改善这一方面,像FPN的发展Faster R-CNN一样。

DETR的设计理念很容易扩展到更复杂的任务。在我们的实验中,我们证明了一个简单的分割头训练在一个预先训练好的DETR上比全景分割的竞争基线更具竞争力,这是一个具有挑战性的像素级识别任务,最近得到了广泛的应用。

DETR首先是经历一个CNN提取特征,然后得到的特征进入transformer, 最后将transformer输出的结果转化为class和box,输出固定个数的预测结果。最后将得到的检测结果和GroundTruth进行二部图匹配计算loss。在训练过程中,二部匹配法将预测与地面实值框进行唯一分配。没有匹配的预测应该是“无对象”(∅)类预测。

Related work

我们的工作建立在几个领域的先前工作之上:集合预测的二部匹配损失、基于transformer的编码器-解码器结构、并行解码和目标检测方法。

Set prediction

没有一个规范的深度学习模型可以直接预测集合。基本的集合预测任务是多标签分类(参见[40,33]以获取计算机视觉背景下的参考文献),对于该分类,基线方法“一对一”不适用于诸如在元素之间存在底层结构(即,接近相同的框)的检测等问题。这些任务的第一个困难是避免近乎重复的任务。目前大多数检测器采用非最大值抑制等后处理方法来解决这一问题,而直接集预测是无需后处理的。它们需要全局推理方案来模拟所有预测元素之间的交互,以避免冗余。对于恒定大小集预测,密集的完全连接网络[9]是足够的,但成本高昂。一般的方法是使用自回归序列模型,如递归神经网络[48]。在所有情况下,损失函数都应通过预测的排列保持不变。通常的解决方案是基于匈牙利算法[20]设计一个损耗,在地面真值和预测之间找到一个二部匹配。这强制了置换不变性,并保证每个目标元素具有唯一的匹配。我们遵循二部匹配损失方法。然而,与大多数先前的工作相比,我们远离自回归模型,使用具有并行解码的transformer,我们将在下面描述。

Transformers and Parallel Decoding

Vaswani等人引入了Transformers,作为机器翻译的一个新的基于注意力的构建块。注意机制是从整个输入序列聚合信息的神经网络层。Transformers引入了自我注意层,与非局部神经网络类似,它扫描序列的每个元素,并通过聚集整个序列的信息来更新。基于注意的模型的一个主要优点是其全局计算能力和完美的记忆能力,这使得它比RNNs更适合于长序列。在自然语言处理、语音处理和计算机视觉的许多问题中,Transformers正在取代RNN。
Transformers首先用于自回归模型,继早期的序列到序列模型之后,一个接一个地生成输出标记。然而,在音频、机器翻译、词表示学习和最近的语音识别等领域,禁止性的推理成本(与输出长度成正比,且难以批量)导致了并行序列生成的发展。我们还结合Transformers和并行解码之间的适当权衡计算成本和能力,以执行集预测所需的全局计算。

Objection detection

大多数现代目标检测方法相对于某些初始猜测进行预测。两级检测器:预测boxes、proposals,其中单阶段方法预测anchors或可能的对象中心的栅格。最近的工作表明,这些系统的最终性能在很大程度上取决于这些初始猜测的设置方式,在我们的模型中,我们能够消除这种手工制作的过程,并通过直接预测具有绝对盒预测的检测集来简化检测过程,输入图像而不是锚点。

Set-based loss 基于集合的损失

一些目标探测器使用了二部匹配损失。然而,在这些早期的深度学习模型中,不同的预测之间的关系仅用卷积层或完全连接层来建模,手工设计的NMS后处理可以提高它们的性能。最近的检测器在真值和预测以及NMS之间使用非唯一分配规则。
可学习的NMS方法和关系网络显式地建模了不同预测之间的关系。使用直接设置损耗,它们不需要任何后处理步骤。然而,这些方法采用了额外的手工构建的上下文特征,如建议框坐标,来有效地建立检测之间的关系模型,同时我们寻找减少模型中编码的先验知识的解决方案。

Recurrent detectors循环检测器

最接近我们的方法是目标检测的端到端集预测和实例分割。与我们类似,他们使用基于CNN激活的编码器-解码器结构的二部匹配损失来直接生成一组边界框。然而,这些方法只在小数据集上进行了评估,没有对照现代基线进行评估。特别是,它们基于自回归模型(更准确地说是RNN),因此它们不会利用最近的Transformers进行并行解码。

The DETR model

对于目标检测中的直接集合预测,不可缺少的两个要素是:(1)loss 一种集合预测损失,强制在预测事实和基础事实之间进行唯一匹配(2)architecture 预测(一次性)一组对象并对它们的关系建模的体系结构。我们在图2中详细描述了我们的体系结构。

Object detection set prediction loss 二部匹配损失

DETR在通过解码器的一次过程中推断N个预测的固定大小集,其中N被设置为显著大于图像中对象的典型数目。训练的主要困难之一是根据地面真实情况对预测对象(类别、位置、大小)进行评分。我们的损失产生一个最佳的二部匹配之间的预测和地面真相的对象,然后优化特定对象(边界框)的损失。

上面提到了计算loss需要生成N个ground truth,但是一张图片的待检测目标的个数往往是不足N个的。为了解决这个问题,DETR构造了一个新的类\o,它表示没有目标物体的背景类。通过调整\o中的样本的大小我们可以将ground truth的样本数可控制在N个,这样我们便得到了两个等容量的集合。

假设我们现在有两个sets,左边的sets是模型预测得到的N个元素,每个元素里有一个bbox和对这个bbox预测的类别的概率分布,预测的类别可以是空,用\o来表示;右边的sets是我们的ground truth,每个元素里有一个标签的类别和对应的bbox。两边sets的元素数量都是N,所以我们是可以做一个配对的操作,让左边的元素都能找到右边的一个配对元素,每个左边元素找到的右边元素都是不同的,也就是一一对应。这样的组合可以有N!种,所有组合记作\sigma _{N}。这个N即是模型可以预测的最大数量。

我们的目的是在这所有的N!种中,找到使得L_{match}最小的那个组合,记作\hat{\sigma }

写成目标函数的形式就是,其中y可以看成是class和bbox的组合:

 此外L_{box}的计算:由于文章中所使用的方法是没有预先设计好的anchor的,是直接预测bbox的,所以如果像其他方法那样直接计算L1loss的话,就会导致对于大的框和小的框的惩罚力度不一致,所以文章在使用L1 loss的同时,也使用了scale-invariant的IoU loss


通过以上计算是帮我们找到最小的组合而使用的loss,不是训练模型的loss!在找到match后,训练模型所用的loss是:

 

DETR architecture

它包含三个主要组件,我们将在下面描述:一个用于提取紧凑特征表示的CNN主干、一个encoder-decoder transformer和一个用于进行最终检测预测的简单前馈网络(FFN)。

Backbone

DETR的backbone是经典的卷积网络,它的输入定义为:X_{img}\in \mathbb{R}^{3\times H_{0} \times W_{0} },它的输出是降采样 32倍的Feature Map,表示为:f \in \mathbb{R}^{C\times H \times W }  ,其中C=2048,H,W=\frac{H_{0}}{32},\frac{W_{0}}{32} 。在实验中作者使用的是ResNet-50或者ResNet-101作为基础网络。

Transformer encoder

Transformer编码器的详细结构如图左侧部分所示。在得到Feature Map之后,DETR首先通过一个1×1卷积将其通道数从C调整为更小的d,得到一个大小为d×H×W的新的Feature Map。DETR的下一步则是将其转换为序列数据,这一步是通过reshape操作完成的,转换之后的序列维度是d×(HW)。因为Transformer是与输入数据的顺序无关的,因此它需要加上位置编码加入位置信息。这一部分会作为编码器的输入。DETR的编码器的Transformer使用的是多头自注意力模型加上一个MLP。

DETR的位置编码是分别计算了两个维度的位置编码,然后将它们拼接到一起。其中每个维度的位置编码使用的是和Transformer相同的计算方式。

Transformer decoder

DETR的解码器如图2右侧部分所示,它有两个输入,一个是编码器得到的特征,另外一个是object queries。 

在DETR中,object queries的作用类似于基于CNN的目标检测算法中的anchor boxes。它共有N个(N是一个事先设定好的超参,它的值远大于一个图片中的目标数)。N个不同的object queries输入的解码器中便会得到N个decoder output embedding,它们经过最后的MLP得到N个预测结果。不同的N个Object queries保证了N个不同的预测结果,Object queries是一个可以训练的嵌入向量,它通过和ground truth的匈牙利匹配(附件A)来向不同的ground truth进行优化。

 上图中,每个图都是一个object query在COCO 2017 val set预测出来的框的结果。图中的每个点都是一个框的中心点,绿色表示小框,红色表示横向的大框,蓝色表示纵向的大框。可见每个query都有自己的特点,比如第一个query会一直问左边的小框里是什么,第二个会问中间的大框是什么,等等。我们可以把每个object query看成一个关注于某个区域,某些大小物体的提问者。然后这些提问者就是模型训练出来的提问者,各有所长。

注意这N个结果不是顺序得到的,而是并行解码得到N个结果,这点和原始的Transformer的自回归计算是不同的。

FFNs

最终预测是由具有ReLU激活功能且具有隐藏层的3层感知器和线性层计算的。 FFN预测框的标准化中心坐标,高度和宽度, 输入图像,然后线性层使用softmax函数预测类标签。 由于我们预测了一组固定大小的N个边界框,其中N通常比图像中感兴趣的对象的实际数量大得多,因此使用了一个额外的特殊类标签∅来表示在未检测到任何对象。 此类在标准对象检测方法中与“背景”类具有相似的作用。
 


 

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要训练自己的数据集,可以使用DETR的Github上提供的代码作为基础。DETR***1] 首先,需要准备自己的数据集,确保数据集符合COCO格式。可以参考DETR论文中提供的数据准备方法或者参考其他相关资料。 接下来,可以使用DETR的代码来训练自己的数据集。可以根据自己的需求修改代码中的参数和配置,以适应自己的数据集和模型训练需求。 此外,如果想要加快模型的学习速度,可以下载DETR官方提供的预训练模型。官网提供了resnet_50和resnet_101两个预训练版本,下载后得到.pth文件。可以将这些预训练模型用作自己数据集训练的起点,从而加快模型的收敛速度。 总结起来,要训练自己的数据集,首先需要准备好符合COCO格式的数据集,然后可以使用DETR的代码进行训练,并根据需要修改配置和参数。如果需要加快学习速度,可以下载官方提供的预训练模型。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [如何用DETR(detection transformer)训练自己的数据集](https://blog.csdn.net/weixin_50233398/article/details/121785953)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [基于DETR的人脸伪装检测](https://download.csdn.net/download/FriendshipTang/88038809)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值