Selective Query Recollection:对于训练DETR-family目标检测的探索

2023-04-04 13:51 631 阅读 ID:935
将门
将门

分享一下我们最近的目标检测文章,Enhanced Training of Query-Based Object Detection via Selective Query Recollection 文章一审 a,wa,wa, 最终收录于 CVPR2023。在此介绍文章主要内容,和一些有趣的现象,以及我们的思考。

论文地址:

https://arxiv.org/abs/2212.07593

代码地址:

https://github.com/Fangyi-Chen/SQR

一、一个有趣的现象:

我们知道,DETR[1]检测器的重要组成是decoder,也是和之前anchor-base/anchor-free 检测器的区别所在。decoder通常有6层(6 decoding layers)组成,每层的任务和训练方式没什么差别。具体地,decoder肩负三个任务:

1. 以cross attention或者adamixer[2] 的方式, 把query 和feature map进行充分交互,从而能让query感知到object的存在。

2. 以self-attention的方式,把query和别的query进行交互,从而能让query感知其他query的信息,比如物体的co-occurance或者重复检测。

3. 用几层mlp把query翻译为物体的类别和检测框。每层decoding layer接受上一层的输出,并以残差的形式进行refine。这样每层的结果是逐渐变好的。

确实,从总体来看,每层的mAP逐渐增加。但当我们可视化每一层的具体的结果的时候,我们发现一个有意思的现象:有一些本来前几层检测出来的物体,在第六层没了…比如下图:(0.27 低于常用的0.3阈值)

二、这个现象significant 吗?

第一个量: TP F Rate. 在第六层,对于某一个query,如果它对应的预测是一个True positive, 那必然是匹配到了一个ground-truth G. 那我们就去第1~5层查看和这个query 对应的5个query,看它们的预测是不是也能匹配到这个同样的ground-truth G, 并且有更高的IOU匹配度和更高的confident score 。这是个非常强的条件。如果这件事发生了(5个只要有一个就行), 那就算一次。我们遍历所有的val 图片和所有的query,对于adamixer这个发生率是26%左右,对于deformable detr这个发生率是50%左右。

第二个量:FP E Rate. 类似地,在第六层,对于某一个query,如果它对应的预测是一个False positive, 那我们就去查看对应的5个query,看它们的预测的confident是不是更低。这个发生率是50%左右。

可以看出,这两个量都很高。在此解答两个可能的疑惑:

1. 为什么deformable detr TP F rate 能这么高?因为deformable detr 后三个decoding layer的mAP很接近(44.2 vs 44.4 vs 44.5),所以第六层相对没那么强。

2. 如果FP E Rate 的对应5个query的预测有一个TP,这种情况怎么办?答:这是一种更糟的情况,但是实测出现概率没那么高。

不过我们观察到,大半的case是marginally triggered ,即前五层的某个结果只比第六层好一点点,肉眼几乎不可见,这一点在对比deformable DETR的第五层和第六层的结果时尤为明显--第五层和第六层的结果非常接近。在对比第四层和第六层的结果时,很多sample的区别明显起来,如fig 2。在多数情况下,第六层的结果依然是最优的(之一),毕竟mAP更高。

三、这个现象带来的motivation:

本文从训练的角度来思考这个问题: 每层decoder的任务是有轻有重的,对最后的mAP的作用也有大有小。最后一层的结果是决定性的,直接影响mAP,而第一层即使错了,后面也有五层可以帮忙更正。然而在训练的时候,所有的层的训练方式都被粗暴地归为一统,也就是hungarian matching+3个loss。我们认为这种训练是不合理的,后面的decoding layer应该接受更好更强的训练。

另外,因为后面的decoding layer的output (refined query)并不一定比前面的好,下一层的input仅仅是上一层的ouput,这样之前的query没有机会参与很后面的优化。我们希望能把这个query引入到后面几层使其帮助后面的优化。

补充一个没有验证过的猜想, 也许第一层就不应该有loss, 或者应该用不同的loss。因为也许第一层不适合学习太强的semantic信息,更适合学弱语义信息。加上loss会破坏了一些东西。

四、一个初始的探索

我们希望这样的一个训练方案:后面的decoding layer 能得到比前面的layer更多更好的优化。并且后面的decoding layer 能‘看到’前面较远的query,而不仅仅是前面一个layer的输出。

一个简单设计的方案DQR可以同时做到这两点。如fig 4 (b)

DQR 把每一层的query全部作为后面每一层的输入。这些query分别做self att, cross att, hungarian matching, 操作类似Group DETR和 H-DETR。这样每一层的监督信号是下一层的两倍,形成几何序列1,2,4,8,16,32。

五、第二个探索

DQR的效果不错,但是训练计算量显著增加。另外,第一层的query 直接给到第六层,会带来很大的learning gap。Plus, 我们在分析了TP F Rate 和FP E Rate后,我们发现对于第六层,只有第四层和第五层的贡献比较大。所以我们提出SQR (selective query recollection, fig 4 (c)。每一层的输入不再是之前所有层 的输出,而是选上一层和上上层的输出。这种选择性地输入使计算量大减,形成斐波那契数列1,2,3,5,8,13

SQR作为本文主要方法,在各种DETR上稳定涨点。

六、第三个探索

这个探索是另外一个有趣的工程上的发现。用 DQR 来减小模型尺寸。放在文章的附录里。

现有方法通常有 6 层decoding layer。我们可以训练检测器让所有层共享参数吗?我们实施了这个想法,让模型在训练时share参数,但发现模型不收敛。但我们发现 DQR 有能力实现目标。上文介绍,DQR可以训练一个强大的final decoding layer,这个layer见过之前所有layer的query,所以我们在训练时用DQR正常训,测试时循环6次final decoding layer,那每一层decoing layer 不都是最强的了吗?想法很美好,结果最后AP 居然是0!

原因是最后这一层decoding layer 在训练的时候,没有输入过它自己的输出。它的输出和自己的输入已经有了不小的shift, 它也不再有能力去理解它自己的输出了。所以我们在训练时,在DQR的基础上,对最后一个decoding stage 输入了它自己的输出。这样得到的final layer, 我们在inference时可以只用第六层循环6次,模型的size也被大大减小了(1.6GB 至 513MB)。而且它只需要 5 个阶段就可以实现比以前更好的性能(42.8AP 对比 42.5AP)。

七、未来可能的探索

SQR的选择机制不够优雅,也不够dynamic。另外在inference时如果有个机制去选最好的layer也是不错的option。

八、对别的任务呢?

我们没有资源在多个任务上大搞特搞,只搞了detection。一个大胆又合理的猜测是,应该也work. XD

Reference

[1] End-to-end object detection with transformers

[2] Adamixer: A fast-converging query-based object detector.

[3] Deformable detr: Deformable transformers for end-to-end object detection

[4] Dab-detr: Dynamic anchor boxes are better queries for detr.

[5] Group detr: Fast training convergence with decoupled one-to-many label assignment.

[6] Detrs with hybrid matching

作者:陈方义

知乎原文:https://zhuanlan.zhihu.com/p/610347565

免责声明:作者保留权利,不代表本站立场。如想了解更多和作者有关的信息可以查看页面右侧作者信息卡片。
反馈
to-top--btn