- 前言
DETR
是首个将 Transformer
应用到 2D
目标检测任务中的算法,由 Facebook
于 2020
年在论文《 End-to-End Object Detection with Transformers
》中提出。与传统目标检测算法不同的是, DETR
将目标检测任务视为一个直接的集合预测问题,采用基于集合的全局损失通过二分匹配实现一对一的预测输出,不需要非极大值抑制( NMS
)和手工设计 Anchor
这些操作,基于 Transformer
的编码器-解码器架构实现了端到端的目标检测,整个实现流程非常简单明了。
如果对 Transformer
还不是很了解的话可以看我之前的这篇文章:
- 实现细节
1.1 网络结构
DETR
的网络结构非常简单,主要包括三个部分:一个用于提取图像特征的 CNN
骨干网络,一个基于编码器-解码器的 Transformer
结构,一个用于实现最终检测预测的前馈网络( FFN
)。
骨干网络
对于一张输入图片,基于传统CNN的骨干网络会输出多个通道的低分辨率特征图,其中,,。
Transformer编码器
首先通过的卷积层将特征图的通道数由减少到,得到新的特征图,由于 Transformer
需要输入一个序列,因此还需要特征图的维度变换为。每个编码器层都由一个多头自注意模块和一个前馈网络组成,每个注意力层的输入中都会添加位置编码。
Transformer解码器
解码器与标准的 Transformer
解码器相同,由自注意力和交叉注意力层组成。不同的是, DETR
的解码器在每个解码器层并行地解码 N
个对象。由于解码器也是置换不变的,因此 N
个输入嵌入必须不同才能产生不同的输出结果,因此在每个注意力层的输入中也需要添加位置编码。 N
个输入嵌入是可学习的位置编码参数,作者称之为目标查询( object queries
)。目标查询经过解码器被转换为输出嵌入,然后送入前馈网络中独立解码为目标框的坐标和类别标签,产生 N
个最终的预测结果。
前馈网络
前馈网络由带 ReLU
激活函数的 3
层感知机以及 1
个线性映射层组成,输出的预测结果为归一化的目标中心点坐标,检测框相对于输入图像的宽高以及所属类别的标签。模型总共预测 N
个目标的信息,其中 N
是一个远大于通常图像中目标数量的常数(比如 100
)。此外,作者还使用一个额外的特殊类别表示空目标,类似于传统目标检测任务中的背景类别。
1.2 损失函数
目标检测集合预测损失
假设 N
个预测结果为,对应的一组目标的真值为,其中用空目标进行补齐到 N
的大小。为了找到真值与预测结果的最优匹配,我们的目标是求匹配代价最小的一组匹配对:
其中,表示真值与预测结果之间的匹配代价,最优分配可以通过匈牙利算法高效地求得。
匹配代价同时考虑了类别预测结果以及预测的框和真实框的相似度。每个真值可以定义为
其中表示类别标签(可能为空目标),是一个包含真实框的中心点坐标和宽高(相对于输入图像尺寸)的向量。
对于一个序号为的预测结果,定义其类别为的概率为,预测框为。那么真值与预测结果之间的匹配代价可以表示为
接下来是计算所有匹配对的匈牙利匹配损失:
出于类别平衡的考虑,当时,作者会降低对数概率项的权重。
Bounding box损失
Bounding box
损失是损失和GIoU损失的线性组合:
其中是超参数,是 GIoU
损失
其中表示求面积。
- 扩展
DETR
具有很好的扩展性,作者在 Transformer
解码器输出的顶部添加了一个掩码头用于预测每个预测框的二进制掩码,将其扩展到全景分割任务中去。这个掩码头将每个对象 Transformer
解码器的输出作为输入,并在编码器的输出上计算此嵌入的多头(有 M
个头)注意力分数,为每个对象生成 M
个小分辨率的注意力热图。为了做出最终预测并提高分辨率,作者使用了类似 FPN
的架构。
每个掩码都采用 DICE/F-1 loss
和 Focal loss
独立地进行监督训练, DICE
损失的定义如下:
其中表示 sigmoid
函数, loss
值会根据目标数量进行归一化。
分割效果:
- 参考资料
-
《
End-to-End Object Detection with Transformers
》