DETR-端到端的目标检测框架

论文:https://arxiv.org/abs/2005.12872
代码:https://github.com/facebookresearch/detr

DETR

第一个将 Transformer 成功整合为检测 pipeline 中心构建块的目标检测框架。基于Transformers的端到端目标检测,没有NMS后处理步骤、真正的没有anchor,且对标超越Faster RCNN。
DETR将检测视为集合预测问题,简化了目标检测的整体流程。它没有现在主流的目标检测器中的anchor、label assign、nms等操作,做到了真正的end-to-end。它主要采用了Transformer的编解码结构,它在序列预测任务上大获成功。Transformer中的自注意力机制显示地界定了序列中元素间的相互作用,因此可以用于约束集合的预测结果。
DETR-端到端的目标检测框架_第1张图片DETR通过将常见的CNN与transformer架构相结合,直接(并行)预测最终的检测结果。 在训练期间,二分匹配将唯一的预测分配给GT框。 不匹配的预测应产生“无对象”(∅)类预测。
DETR的流程大为简化,可以归结如下:Backbone -> Transformer -> detect header。

将DETR的结构在具体化,可以表示如下DETR-端到端的目标检测框架_第2张图片DETR使用常规的CNN主干来学习输入图像的2D表示。 模型将其展平并在将其传递到transformer编码器之前对其进行位置编码补充。 然后,transformer解码器将少量固定数量的学习的位置嵌入作为输入,我们称其为对象查询,并另外参与编码器的输出。 我们将解码器的每个输出嵌入传递到预测检测(类和边界框)或“无对象”类的共享前馈网络(FFN)。

Backbone

传统的CNN主干会生成较低分辨率的激活图f∈R C×H×W。 DETR使用的典型值是C = 2048和H,W = H0 / 32,W0 / 32。
Transformer encoder

首先,使用1x1卷积将高级激活映射的特征图f的通道维从C减小到较小的d, 创建一个新的特征图z0∈R d×H×W。 编码器期望一个序列作为输入,因此DETR将z0的空间尺寸折叠为一个尺寸,从而生成d×HW特征图。 每个编码器层均具有标准体系结构,并包括一个多头自我关注模块**(self-attention module)和一个前馈网络(FFN)**。 由于转换器的体系结构是置换不变的,因此DETR用固定的位置编码对其进行补充,该编码被添加到每个关注层的输入中。

Transformer decoder

解码器遵循transformer 的标准体系结构,使用多头自编码器和编码器-解码器注意机制转换大小为d的N个嵌入。与原始转换器的不同之处在于,DETR模型在每个解码器层并行解码N个对象,而Vaswani等人 [47]则是使用自回归模型,一次预测一个元素的输出序列。

由于解码器也是置换不变的,因此N个输入嵌入必须不同才能产生不同的结果。 这些输入嵌入是学习的位置编码,我们将其称为对象查询,并且与编码器类似,我们将它们添加到每个关注层的输入中。 N个对象查询由解码器转换为嵌入的输出。 然后,它们通过前馈网络(在下一个小节中进行描述)独立地解码为框坐标和类标签,从而得出N个最终预测。

利用对这些嵌入的自编码器和解码器注意力,该模型使用它们之间的成对关系,全局地将所有对象归结在一起,同时能够将整个图像用作上下文。

Prediction feed-forward networks (FFNs)

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

作者发现在训练过程中在解码器中使用辅助损耗auxiliary losses很有帮助,特别是有助于模型输出正确数量的每个类的对象。DETR在每个解码器层之后添加预测FFN和Hungarian loss,所有预测FFN共享其参数。 我们使用附加的共享层范数来标准化来自不同解码器层的预测FFN的输入
DETR-端到端的目标检测框架_第3张图片

以上即为DETR的结构说明,文后作者给了更为具体的DETR结构:
上图给出了DETR中使用的转换器的详细说明,并在每个关注层传递了位置编码。来自CNN主干的图像特征通过了转换器编码器,并将空间位置编码与添加到查询和键处的空间编码一起传递。 然后,解码器接收查询(最初设置为零),输出位置编码(对象查询)和编码器内存,并通过多个多头自我关注和解码器-编码器关注来生成最终的一组预测类标签和边界框。 可以跳过第一解码器层中的第一自我注意层。
论文贡献:
(一)提出将Transformer引用于目标检测的方法,并且得到了预期的结果,相当于为以后的目标检测提供一种新的方法论;
(二)论文使用的模型结构非常简洁,不添加任何额外的Tricks就能获得与Faster-RCNN相当的结果;
(三)主要为我们提供了一种思路,提出一种将深度学习两大领域(NLP和CV)进行结合的有效方法。

你可能感兴趣的:(目标检测,人工智能,计算机视觉)