1、 为什么要做这个研究(理论走向和目前缺陷) ?
以前做目标检测主流是faster rcnn之流要做anchor和NMS等手工设计。
2、 他们怎么做这个研究 (方法,尤其是与之前不同之处) ?
将目标检测问题视为集合预测问题,所预测的集合中的每个元素即每个GT集合中的元素一一对应,且每个元素输出的是相对整个图像的位置、尺寸,避免了NMS和anchor设计。
具体做法就是CNN主干网络对输入图片提取特征,然后将每个特征的位置信息加上一并输入到Transformer中,输出固定个数的预测结果,每个预测结果不像anchor机制中会有很多预测结果对应同一个GT物体,而是只对应一个GT物体,避免了NMS。为了实现集合预测(即一对一预测),训练过程中用了匈牙利算法进行二分图匹配(即两个集合的完备匹配,推断时不用这个匹配算法)。文中还有很多小trick,比如回归用了GIOU损失,各种数据增强方法。
3、 发现了什么(总结结果,补充和理论的关系)?
目标检测新范式,模型简单,第一次将Transformer用于目标检测。但是也有很多问题,比如对小目标检测效果很差,训练时间太长。(16卡在coco上要训练5天性能才能比肩faster rcnn)。
摘要:本文方法DETR将目标检测重新建模为一个集合(即不会出现多个预测匹配同一个目标的问题)预测问题,避免了很多手工设计、超参调节的问题,比如NMS、anchor等。DETR用了一个基于集合的全局损失实现预测目标与GT目标一对一的匹配,还用了一个transformer编码解码的模型架构。给定一个固定比较的所学习到的目标查询集,DETR通过transformer理解图像中目标与全局图像语义的关系,然后直接并行输出预测集合。DETR简单,通用,不依赖过多的库,且效果不错。
1、 引言
经典的目标检测算法比如Faster rcnn(anchor-based)或者其他FCOS(anchor-free)等算法要么需要手工设计anchor、还要用NMS后处理来去重。而将目标检测问题视为集合预测的问题的话就可以避免这些设计anchor、NMS去重的问题。
本文的集合预测损失函数能够独一无二的为每一个预测结果分配一个GT目标,且对预测目标具有不变性,故可以并行启动(并行计算)。
DETR对大目标检测效果比较好,而对小目标检测效果比较差,这可能是由于transformer做的是非局部计算,后续可考虑加入类似于FPN的模块实现 对小目标较好的检测效果,类似于PointNet++对pointNet的改进就是加入了局部特征编码的模块。
DETR还有个缺点就是训练时间比较长。
2 相关研究
这部分主要介绍:现有的用集合预测的损失函数(即实现一对一匹配的损失),transformer编码解码的结构,并行解码,以及目标检测方法。
2.1 集合预测
并没有什么标准的深度学习方法用于预测集合。通常用于集合预测的损失函数就是设计一个基于匈牙利匹配算法的设计函数。
2.2 Transformer和并行解码
Transformer一开始是用于机器翻译的,它引入了自注意层,自注意层有点像非局部神经网络,通过扫描整个输入序列中的每个元素获取全局信息。基于注意力的模型的一个优势就是全局计算以及存储占用小,故transformer比RNN更适用于长序列,在NLP,语音处理以及计算机视觉中正在取代RNN。但是transformer的推断成本很高,就促进了并行序列生成的发展。
2.3目标检测
先验知识(anchor)很影响检测性能。
3 DETR
集合预测的两个关键:1)能够确保输出是个集合(prediction与gt可以1对1匹配)的损失函数。2)模型架构。
3.1 集合预测损失函数
DETR输出固定大小的N(取100)个预测结果,N通常比实际的一张图片中的目标数要多。预测的主要困难就是给输出目标(包括类别,位置,尺寸)一个打分。
下式中y代表GT目标集合,y’代表输出的N个预测结果。由于y中实际的物体可能小于N为了达到一对一匹配的目标,将y补零(padding,代表没有物体),为了实现这个二分图的匹配,需要找到损失最小时的匹配顺序theta’。
Lmatch计算的是两个集合完成匹配时的损失,这两个集合的匹配过程是通过匈牙利算法(KM算法)实现的。GT集合中的每个元素为yi = (ci, bi), 其中ci是类别标签(),bi是个4维的归一化向量,代表GT物体中心点的相对整个图像的位置,以及物体高宽相对图像的大小。
上述用匈牙利算法寻找匹配对的过程的作用类似于anchor-based方法中为每个anchor分配GT框的过程,主要区别在于以前的方法是可以为每个GT框找到多个匹配的anchor的,但是用匈牙利算法的结果是每个GT框只有一个对应的预测框。
完成匹配之后的损失函数如下,分类部分就是交叉熵损失,回归部分是L1损失+IOU损失。
回归损失部分:
3.2 DETR结构
DETR包含3个部分:1)一个CNN主干网络用来提取规整的特征图,2)一个用于编码解码的transformer,3)一个简单的前馈网络做最后的预测。
主干网络:输出的特征图包含2048个通道,并对原图长宽缩小32倍。
Transofrmer编码器:先是1X1卷积对主干网络输出的特征进行降维成d X W X H,由于transformer要求输入的是一个序列,故将此特征的每个通道拉成一个向量,成为d X WH大小,然后每个编码层由一个多头自注意力模块(multi-head self-attention)和一个前馈网络(FFN)组成。由于这个transformer具备置换不变性(类似于集合函数),故需要补充固定的位置编码作为输入。每个输入通过编码器都会输出一个d维的特征向量。
Transformer解码器:因为解码器对输入也具有位置置换不变性,故输入的每个特征向量也都要加上位置编码。
预测前馈网络(FFNs):3层的MLP+ReLU,输出归一化的框中心坐标,高度和宽度。、
辅助解码损失:即对每个解码层都输出预测结果并进行监督。
4 实验
COCO数据集,与Faster rcnn作比较。模型取名为DETR-DC5, DETR-DC5-R101,DC5表示在主干网络(默认resnet50)的最后一个stage加了个空洞卷积并减少了个pooling层实现分辨率增大一倍。
用来很多数据增强方法。
对于已经匹配的GT物体,如果有第二个框也想匹配这个框,那么就将这个预测框匹配到无目标类别计算损失。
训练时间很长,16张V100卡要训练500个epochs,耗时5天。
实验结果如下,前两栏是faster rcnn的结果:
4.1 与Faster r-CNN对比
4.2 消融实验
编码层数量的影响:
最后一个编码层注意图可视化结果:
解码层数量的影响,以及用NMS加到不同的解码层输出的结果:
在不同层加/不加位置编码,以及位置编码方式不同的实验结果:
回归损失不同的结果:
4.3 分析
解码器输出的插槽分析:不同的插槽的根据预测目标所在图像区域的位置的不同以及尺寸大小的不同所面向的任务不同。特别的,所有的插槽都能比较大的物体做预测。每个插槽的都可以没有类别特异性,即可以预测所有的类别。
4.4 也能做全景分割
5 结论
提出了利用transformer的目标检测新范式,不用anchor和NMS等手工设计,且效果也不错。且也能拓展到全景分割任务。