[论文解读]Consistent Optimization for Single-Shot Object Detection将置信度与边框联系起来
论文题目:Consistent Optimization for Single-Shot Object Detection
作者:Tao Kong 1 Fuchun Sun 1 Huaping Liu 1 Yuning Jiang 2 Jianbo Shi 3
因为原始RetinaNet的class 与 location作为2个分支单独进行训练,没有建立联系,可能导致训练出来的predicted boxes 的分数可能与实际不符合,作者的这篇论文为此建立了很好的联系。
目前,大多数的Detector模型改进方法都集中在了two-stage阵营中,比如Cascade R-CNN、IoU-Net,One-Stage自从RetinaNet之后的工作就比较少了。相对于Two-Stage而言,One-Stage其实更难一些,因为它依赖于全卷积结构来对feature map上进行均匀采样的anchor进行分类和位置调整。怎样才能对现有的one-stage方法进行改进呢?在本文中我们对RetinaNet的结果进行了分析,并发现训练和测试的不一致是其中一个重要的原因。
1. 观察和分析
我们首先可视化了RetinaNet的regression分支的结果,发现anchor在regression之前和之后的定位性能的差别是非常大的。一个本身与ground-truth的IoU较小的anchor在回归之后依然可以与ground-truth的IoU变得较大。从另一个方面讲,classification分支是基于原始的anchor进行训练的,在标准的设置中,会将IoU>0.5的样本算作是正样本,IoU<0.4的设置为负样本,然后用focal loss训练。在测试中将原始anchor训练的得分赋给调整之后的anchor。因为anchor的定位性能在回归前和回归后是不同的,这必然导致classification分支得到的得分与回归后的anchor的定位能力表现不一致。为了进一步验证这个假设,我们可视化了anchor得分的分布.
我们发现,分类得分的方差随着IoU的增长会不断变大(大于0.9的样本的统计其实不具备可信度,因为样本数太少)。我们认为,正是因为基于原始anchor训练的得分赋予了回归后的anchor,导致了目标anchor的分类的方差较大(方差大表示不鲁棒,置信度不高)。另外,我们对部分COCO的detection的结果进行验证分析发现了如下两个问题:(a)不同类别的物体之前存在遮挡导致的inter-class confusion,和(b)foreground-background classification error。(详细见原文)
2. 解决方法
基于上边的观察和分析,一种非常直观的解决办法就是将回归之后的anchor进行训练。这种策略马上就会联想到Cascade R-CNN,是否可以用类似于Cascade的方式呢?具体实现上我们比较了几种比较典型的实现方法:
b)实现方式其实就是Cascade直接在one-stage上的扩展:在原有的regression/classification head基础上,加入跟原来结构一样的head,用于训练regress之后的anchor,参数与原来的不共享;(c)添加了更多的context信息,这些feature来源于前一个阶段的feature,(d)是最终我们发现更有效的方法。这种方法只是在优化目标上加入了回归后的anchor,而不改变原来的网络结构,因此在测试的时候可以保持跟原来one-stage的做法一致。
从优化目标上,classification分支从原来的一项变成了两项,一项是原始的anchor,另一项是回归后的anchor,其网络的输出 c_i 是共享的:
在实验验证中我们发现,只用回归后的anchor进行监督训练已经比原始的anchor的性能好。加入原始的anchor训练过程更稳定,不影响最终的结果。
为了保持跟classification一致,regression也添加了一项,相当于把每一个Anchor回归两次。
转载于作者的知乎
扩展阅读https://blog.****.net/chunfengyanyulove/article/details/86708549