Paper Reading: DEtection TRansformer
介绍
新框架的主要成分,称为DEtection TRansformer
或DETR
。
给定一个固定的小型学习对象查询集,DETR
对对象的关系和全局图像背景进行推理,直接并行输出最终预测集。
抛弃了多个手工设计的编码先验知识的组件(如非极大抑制
),简化了检测管道
DETR
不需要任何自定义图层,所以可以在任何包含标准CNN和转化器类的框架中轻松重现。
DETR
的主要特点是结合了双向匹配损失和变压器与(非自回归)并行解码
对大目标效果好,因为transformer
的全局关注上的优势。
对小目标效果不好。需要FPN
多尺度预测。
DETR模型
目标检测集合预测损失
DETR
推断出一个固定大小的个预测集,只需通过一次解码器,其中被设定为明显大于图像中的物体数量。训练的主要困难之一是对预测的物体(类别、位置、大小)与地面实况进行评分。我们的损失在预测对象和地面真实对象之间产生一个最佳的双点匹配,然后优化特定对象(边界盒)的损失。
让我们用来表示对象的ground truth
集合,是个预测的集合。
假设大于图像中的物体数量,我们认为的大小也是由填充的一个集合。
为了在这两个集合之间找到一个双侧匹配,我们寻找一个开销(cost)最低的个元素的排列组合。
其中,是ground truth
和索引为的预测之间的一对匹配开销。
根据先前的工作,用匈牙利算法有效地计算了这个最佳分配。
匹配成本同时考虑了类别预测和预测与ground truth
箱的相似性。
ground truth
集的每个元素可以被看作是一个,是目标类标签(可能是)是边缘框
对于索引为σ(i)的预测来说,我们定义类的概率为 预测框为 。通过这些符号,我们定义 为
第二步是计算损失函数,即在上一步中匹配的所有配对的匈牙利损失
。我们对损失的定义与普通物体检测器的损失类似,即类别预测的负对数可能性和后面定义的盒式损失的线性组合。(这里的 是双线1,markdown里不知道怎么\usepakage,打不出来)
其中 是第一步计算出的最佳分配
Bounding box loss
我们使用 损失和广义IoU
损失 的线性组合,它是标度不变的。边缘框损失 定义为
DETR 架构
Backbone
初始图像
激活映射(activation map)
Transformer 编码器
使用1x1卷积将高维激活映射的特征图的通道维从减小到较小的, 创建一个新的特征图 。 编码器期望一个序列作为输入,因此DETR
将的空间尺寸折叠为一个尺寸,从而生成特征图。 每个编码器层均具有标准体系结构。 由于Transformer
的体系结构是置换不变的,因此DETR用固定的位置编码对其进行补充,该编码被添加到每个注意力层的输入中。
Transformer 解码器
解码器遵循Transformer
的标准结构,与原始转换器的不同之处在于,DETR
模型在每个解码器层并行解码个对象,而不是使用自回归模型,一次预测一个元素的输出序列。
由于解码器也是空间无关的,因此个输入要加上位置编码,我们将它们添加到每个关注层的输入中。 个对象查询由解码器转换为嵌入的输出。 然后,它们通过前馈网络
(FFNs)独立地解码为边缘框坐标和类标签,从而得出 个最终预测。
利用对这些嵌入的自编码器和解码器注意力,全局地将所有对象归结在一起,同时能够将整个图像用作上下文。
前馈网络
最终预测是由ReLU激活,藏层为3层的MLP
计算的。 FFN
预测边缘框的标准化中心坐标,高度和宽度,然后线性层使用softmax
预测类标签。 由于我们预测了一组固定大小的N个边界框,其中N通常比图像中感兴趣的对象的实际数量大得多,因此使用了一个额外的特殊类标签来表示在未检测到任何对象。 此类在标准对象检测方法中与背景
类具有相似的作用。
辅助解码损失
我们发现在训练过程中使用辅助损失[1]在解码器中是有帮助的,特别是帮助模型输出每个类别的正确对象数量。我们在每个解码器层之后添加预测FFN
和匈牙利损失。所有的预测FFN
共享它们的参数。我们使用一个额外的共享LB层来规范来自不同解码层的预测FFN
的输入。