【论文笔记】Cascade R-CNN:通过多次回归提高检测质量
Introduction
在论文的开始,作者提出了"close" false positive,这些false positive比较接近但不是true positive,使得检测器难以区分"close" false positive和true positive,这是目标检测的主要难点之一。当前的检测器普遍将区分positive与negative的IoU阈值设为0.5(比较低),这种宽松的要求导致很多的包围框都被认为是positive(即使是那些看起来不是很好的包围框也会被认为是positive)。如图1(a)所示,当IoU阈值设为0.5的时候,生成了很多低质量包围框。大多数人认为"close" false positive与ground truth的IoU是大于0.5的,因此使用0.5作为IoU阈值是区分不了"close" false positive与true positive的。既然0.5太低,区分不了"close" false positive与true positive,那么把IoU阈值(比如0.7)设的更大不就完了?然而现实没有那么美好,如图1(d)所示,当IoU阈值为0.7时,检测器的AP值反而更低了。
为了方便后面说明,做出以下定义:
- 将proposal(论文中用的是hypothesis,个人习惯用proposal)的质量定义为其与ground truth的IoU大小
- 将检测器的质量定义为检测器训练时使用的IoU阈值
作者认为将IoU阈值设为0.7使AP下降主要有两个原因:
- 太高的IoU阈值会让positive数量很少,导致过拟合
- inference阶段的proposal质量与检测器质量不匹配(即论文中的mismatch)(通俗一点的解释:如果proposal与ground truth的IoU都很低,而检测器的IoU阈值很高,AP就会很低)
为了验证第二个原因,作者做了一个IoU阈值对回归性能影响的实验,如图1(c)所示。横轴是proposal回归之前与ground truth的IoU(proposal的质量),纵轴是proposal回归之后与ground truth的IoU,可以看到,大部分情况下经过回归之后,proposal与ground truth的IoU增加了(这也是我们为什么使用回归的原因),然而当proposal的质量与检测器的质量差别很大时,回归之后的IoU阈值会降低(比如proposal的质量在0.95附近,而检测器质量只有0.5时)。并且,当proposal的质量与检测器的质量越接近,回归之后增加的IoU越大。因此,作者认为proposal的质量与检测器的质量互相匹配很重要。
有了这样一个重要的发现,作者指出了Cascade R-CNN的大致思想:使用多个阶段进行训练,并用上一个阶段的输出作为下一个阶段的输入。(这是因为每次训练之后质量更高,因此将其传递给质量更高的阶段)此外,通过这种逐步地训练,可以防止positive数量过少,减少了过拟合的可能性。个人看法:因为直接拿高质量的检测器训练低质量的proposal会mismatch,因此需要使用这种逐步的方法,慢慢提炼proposal。
Object Detection
作者基于Faster R-CNN实现Cascade R-CNN,Faster R-CNN结构如图2(a)所示:
其中"conv"代表backbone,"H0"代表RPN,"H1"代表RoI Head。
Bounding Box Regression
在Cascade R-CNN之前,已经有人指出只做一次回归是不够的,这种方法被称为迭代包围框回归(iterative bounding box regression),如图2(b)所示。可以看到,在迭代包围框回归中,多个RoI Head是共享参数的(三个Head的IoU阈值相同),因此它没有解决mismatch问题。此外,如图3所示,在每次回归之后,包围框的分布改变的非常大,如果三个RoI Head是共享参数的话,这显然不合理。这也是为什么迭代包围框回归需要很多手工操作的原因,通常情况下,迭代超过两次没有什么好处。
Classification
在introduction这一节中已经指出,为了达到高质量的检查性能,检测器的质量level要与proposal的质量level匹配,那么,对于分类来说,一个简单的做法就是计算多个质量level的loss之和作为总的分类loss,如公式1所示:
其中\(U\)是IoU阈值的集合,这种方式的结构如图2(c)所示。可以看到,三个RoI Head是不同的,但是它们却用了同一个proposal(RPN生成的),这就会导致两个问题。第一,对于IoU阈值很高的分类器来说,它的positive是很少的,如图4所示,容易导致过拟合;第二,在inference阶段,IoU阈值很高的分类器会处理很多低质量的proposal,然而这些低质量的proposal在高质量的分类器中并没有得到训练(直接被设为了背景)。由于这些原因,这种方法相比于原始的Faster R-CNN提升不了多少。
Cascade R-CNN
Cascade R-CNN结构如图2(d)所示,可以看到,它其实就是把上一节中提到的两个方法结合到了一起。和迭代包围框回归相比,Cascade R-CNN有以下不同:
- 迭代包围盒回归是用于提高包围框精度的后处理方式,而Cascade回归是一种改变proposal分布的resampling过程
- Cascade回归同时用在了train和inference上
- Cascade的三个RoI Head不共享参数,是单独训练的
由图4可知,在第一个阶段(RPN生成的proposal)中,低质量的proposal有很多,在经过不断地回归后,高质量的proposal越来越多,既防止了过拟合,又抑制了"close" false positive。
总结
Cascade R-CNN发现了检测器质量与proposal质量的匹配关系对检测性能的影响,并以此使用了多次回归来提高检测质量,极大提高了检测器的AP值。
参考资料
Cascade R-CNN: Delving into High Quality Object Detection
https://zhuanlan.zhihu.com/p/92779720