Cascade R-CNN

摘要

在目标检测中,使用IOU来定义正负样本。用比较低的IOU阈值(如0.5)训练得到的模型在检测时往往包含噪声。相反地,如果增加IOU阈值,检测性能会下降。产生这种现象的原因有两个:(1)训练过程中正样本的迅速减少导致的过拟合;(2)训练和推理阶段IOU阈值的不匹配。本文提出一个多阶段检测模型Cascade R-CNN来解决上述问题。这个模型由一系列用递增的IOU阈值训练的模型组成,因此对于困难的假正样本有更好的辨别能力。检测模型逐级训练,前一级的模型可以为下一级质量更好的模型提供一个较好的分布。这种渐进的重采样方式保证了所有的模型都有大致相同的正样本比例,缓解了过拟合问题。在推理阶段采用相同的处理过程,因此在训练和推理过程中模型假设和每一阶段的模型质量都更加匹配。在COCO数据集上,Cascade R-CNN超过了当前所有的单模型。实验结果也表明,Cascade R-CNNk可以广泛用于目标检测框架,并相对于基础模型都有稳定的提升。源码将开源在https://github.com/zhaoweicai/cascade-rcnn.

动机

IOU阈值的选取对训练和推理都有很重要的影响。对比下面的两个图,当IOU阈值取值较低时,如0.5,在训练阶段,会产生大量包含噪声的正样本,这些正样本与ground truth的IOU比较低,不利于模型的训练,而当提高IOU阈值时,如0.7,虽然可以规避大量包含噪声的正样本,但是又带来另外一个问题:正样本大大减少,负样本(即北背景)在训练集中占主导作用,很容易导致模型过拟合(模型将所有的样本都预测为负样本)。

1571322842768

还有一个问题就是,在推理阶段,模型对于与IOU阈值相近的ROI预测结果较好,而对于其他的ROI预测效果一般。也就是推理阶段与训练阶段IOU的不匹配。论文中给出了更直观的实验对比。

1571322928861

从上图中的对比可以得出2点实验结论:

  • 所有的候选框在输入模型后,IOU均有不同程度的提升,但模型对于与IOU阈值相近的候选框的提升最明显。例如上图(c)中,IOU阈值为0.5的模型,在输入阈值在0.5-0.6区间的候选框的提升效果最好,IOU阈值为0.6的模型对于输入阈值在0.6-0.75区间的提升最好,IOU阈值为0.7的模型在候选框阈值高于0.75时提升效果最好
  • IOU阈值并不是越高越好,如上图(d)中,IOU阈值从0.5提高到0.6后,变化不大,而进一步提高到0.7的时候,模型的AP值有明显的下降。

因此,自然而然地就会想到,如果结合不用IOU阈值水平的模型的结果,检测性能会不会提高呢?这也正是Cascade R-CNN的思想所在。更详细地说,Cascade R-CNN级联多个检测模型,每个模型的IOU阈值逐步提高,例如,第阶段模型阈值设为0.5,第二阶段设为0.6,第三阶段设为0.7。这样,一个IOU较低的候选框,如0.55,在输入到第一阶段模型后,经一次边界框回归,输出提高一点,如0.65,再到二阶段模型,第二次边界框回归,输出的IOU又提高一点,如0.75,再经过最后一个阶段,候选框的IOU就可以回归到一个较高的水平了。

主要工作

Cascade R-CNN结构

1571461487746

论文基于前面的分析,提出了Cascade R-CNN检测框架,如上图。其中,I表示输入的图片,conv表示卷积层主干网络,pool表示特征提取最后的部分(如ROI池化),H表示网络的头部,B表示边界框预测、C表示类别预测。

由于采用单一的网络无法在所有的IOU上都得到有效的提升(低IOU阈值对IOU较低的提升明显,对IOU较高的提升一般,高IOU阈值同理),因此,Cascade R-CNN提出了级联的检测结构,每一级的IOU阈值逐步提高,这样,在所有不同IOU的候选框在经过第一级的特征提取、目标类别预测和边界框回归后,其中一部分的候选框(IOU较低的那部分)得到了显著的提高。当经第一次回归后的所有边界框进入第二阶段后,原来IOU很低的候选框已经基本没有了,这时候和第二个IOU阈值差不多的候选框在经过本轮的边界框回归,IOU阈值也得到了有效的提升。最后在进入到最后一个分类和边界框回归前,几乎所有的候选框IOU都处于一个较高的水平了,这时候采用一个较高的IOU阈值,大部分的候选框IOU又得到了改善。从整个流程来看,不论在训练阶段还是推理阶段,每一阶段采用的IOU阈值相当于对所有的候选框进行了重采样,候选框的IOU分布在每一级的检测网络都在向好的方向发展。也正是这种训练和推理过程中的重采样,很好的地解决了以下两个问题:

  • 检测网络中的正样本数量和质量都得到了保证,不会因为正样本质量太差(IOU阈值较低)时降低模型训练的质量和正样本(数量太少)时模型的过拟合。
  • 推理阶段模型和训练过程一致(多级检测模型),因此对所有IOU水平的候选框都可以进行有效的改善,不会因为传统检测网络中采用单一阈值造成的训练和推理过程中的不匹配问题。

模型实现细节

论文中也将了很多Cascade R-CNN在实现上的细节,如:

  • 网络在所有阶段都采用相同的检测结构,除了主干网络之外,Cascade R-CNN包含4个阶段的网络,其中1个RPN网络,3个不同IOU阈值(分别为0.5,0.6,07)的检测网络,每个检测网络的输出是下一个检测网络的输入(重采样机制)
  • 样本增广策略中只采用了水平翻转,推理阶段采用采用固定的图片大小(未采用多尺度和扩充等方式提高精度)
  • 采用了3种主流的主干网络进行实验对比,分别为基于VGG的Faster R-CNN、基于ResNet的R-FCN和FPN,且大部分采用默认参数(论文中有更详细的介绍)。

实验对比

1571465388155

论文中主要做了两类对比:

  • 横向对比,Cascade R-CNN和目前性能排名靠前的单模型结果对比,即上图中的Table 5,从中可以看出,基于Resnet-101的Cascade R-CNN在COCO检测任务的各个指标上都明显高于主流的单模型(从中可以看出,基于Focal Loss的一阶段模型Retinanet也表现不俗)
  • 纵向对比,论文基于几种主流的主干网络和检测框架,对比了加入Cascade机制前后的性能,即Table 6,从中可以看出,Cascade机制加入后,虽然在训练时间、推理时间和参数数量上都有一些牺牲,但终归瑕不掩瑜,在COCO检测任务的各个指标上都带来了大幅度提升。

总结

Cascade R-CNN的出发点是为了解决采用单模型时单一IOU阈值带来的各种问题,通过简单地采用多级IOU阈值进行检测,就可以很好地解决单一IOU阈值的通病。虽然最后在模型的训练推理时间和参数量上有一定的牺牲,但在检测精度上却大幅度提升。因此在对检测时间要求不太苛刻的条件下,Cascade机制显然是个不错的选择。另外,我觉得Cascade R-CNN的意义不仅仅在于在公共数据集上带了多大的提升,更重要的是,为目标检测(甚至推广到实例分割任务上)提供了一种新思路,毕竟Cascade R-CNN的的多级网络机制可以很好地推广到其他任务上。