End-to-End Object Detection with Transformers 论文阅读笔记
- 这是ECCV2020的一篇文章,从被引程度看可以说是一篇神作了,是开创性的一篇论文,提出了一种新的end-to-end的目标检测框架,简称为DETR,在大目标上比现有方法有更高的精度,但在小目标上精度有所降低。而且另一个缺点是,训练时间很长。。
- 目前的目标检测多数是非end-to-end的,因此受预设的anchor和nms的后处理等先验的影响较大。文章将目标检测任务当作一个set prediction任务(set prediction就是需要预测一个具有任意数量元素的集合的任务,比如翻译),这是不同于以往目标检测框架的一点。
set prediction
- 对于set prediction任务,最普遍的就是用encoder-decoder的结构去做sequence prediction。文章同样利用transformer构建了一个这样的结构去完成end-to-end的目标检测任务。set prediction的loss采取的是基于匈牙利算法的二分匹配的loss,至于二分匹配是什么,匈牙利算法是什么,自己搜一下就知道了。
- 关键点有两个,一个是需要一个能够预测set的网络结构,一个是设计一个loss,当loss下降时能够推动网络朝着“预测的每个目标能够唯一匹配一个GT box”这样的趋势去调整。
- 首先说loss。模型预测固定数量的bbox(N个,并且N比数据集中最多个GTbox的图片的box还多得多),并且将GTbox的集合用空元素填充至N个。也就是说现在有两个集合,一个是预测集合,有N个元素,一个是GT集合,也有N个元素(某些元素为空)。然后定义一次配对的loss如下:
即,loss与预测值中对应GTbox的类别的概率与预测值的box坐标和GTbox的坐标有关。 - 然后利用匈牙利算法求解以下的二分匹配最优化问题:
便可以将预测集合与GT集合的元素之间进行一一配对。(这里的
L
m
a
t
c
h
\mathcal{L}_{match}
Lmatch?就是上面的配对loss) - 接着将匈牙利算法找到的最佳配对,算目标检测的loss(注意,上面的loss是用匈牙利算法去最优化找到最优配对的,这里的loss是用来梯度下降训练网络参数的):
实际应用中会做加权和,对GTbox为填充的空元素的加和项乘以0.1的权重(考虑类不平衡的策略),有点类似Faster-RCNN中的背景box所采取的策略(Faster-RCNN将与所有GTbox的IOU都小于阈值的预测box标记为背景类的label去算loss,而这里也是一样,匈牙利算法匹配到空元素的预测box相当于背景框)。 - 上面提到的
L
b
o
x
\mathcal{L}_{box}
Lbox?定义如下:iou loss是已有的算法,L1 loss没有仔细说,具体可以看代码(等我有空看完代码再来填坑)。
网络结构
- 网络由三部分组成:前端的卷积神经网络,中间的transformer组成的encoder-decoder,后面的全连接。
- 卷积神经网络将图片输入卷积并下采样为原来的1/32
- transformer部分首先利用1x1卷积将通道数减少,然后将
C
×
H
×
W
C\times H\times W
C×H×W的特征图拆成HW个word,每个word为
1
×
C
1\times C
1×C的vector,并提供位置编码,这样送进transformer enccoder,具体结构参考的是提出transformer的文章(“attention is all you need”)的结构。
- decoder部分相比原本的transformer做了修改,首先是设了N个可训练的embedding(称为object queries,代表了N个box的位置信息),对这N个embedding没有顺序地并行转化为N个output embedding。
- 输出的这N个embedding被送进了一个3层的全连接网络,产生了最终的回归结果和分类结果。注意分类器是加了一个背景类的softmax。
- 网络结构如下(其实文章中讲得不太仔细,最好是能自己看看代码,等我有空看完代码再来填坑)
- 此外decoder部分还用上了Auxiliary decoding losses(来自"Character-level language modeling with deeper self-attention")。
|