论文:
Cascade R-CNN: Delving into High Quality Object Detection (2017.12.3)
链接:https://arxiv.org/abs/1712.00726
Cascade R-CNN: High Quality Object Detection and Instance Segmentation (2019.6.24)
链接:https://arxiv.org/abs/1906.09756
作者:Zhaowei Cai, Nuno Vasconcelos
代码:https://github.com/zhaoweicai/cascade-rcnn(Caffe) 与 https://github.com/zhaoweicai/Detectron-Cascade-RCNN (Detectron)
R-CNN系列其他文章:
- R-CNN算法解读
- SPPNet算法解读
- Fast R-CNN算法解读
- Faster R-CNN算法解读
- Mask R-CNN算法解读
- Cascade R-CNN算法解读
- Libra R-CNN算法解读
目录
- 1、算法概述
- 2、Cascade R-CNN细节
1、算法概述
目标检测算法中,训练用的正负样本是通过IoU阈值来定义的,低IoU阈值(比如0.5)通常会产生噪声检测。然而,随着IoU阈值的增加,检测性能趋于下降。作者认为主要有以下两点原因,一是由于IoU阈值增加会导致正样本减少,训练过程中容易造成过拟合;二是在推理阶段模型最优的IoU与输入预测的IoU 之间会产生不匹配。为了应对上述问题,作者提出了Cascade R-CNN,它由一系列经过IoU阈值训练的检测器组成,从而对接近的误报(困难负样本)具有更强的选择性。检测器是分阶段训练的,为了减少过拟合问题。在推理中应用了相同的级联过程,使得每个阶段的假设和检测器质量之间的匹配更加紧密。
2、Cascade R-CNN细节
作者给出了Cascade R-CNN与Faster R-CNN流程对比图,如下图所示。
图(a)代表Faster R-CNN,图中包含两个阶段,H0,B0,C0代表第一个阶段,用于提出候选区域,也就是Faster R-CNN中的RPN网络结构,RPN网络的输出B0代表输出的候选框,B0再应用ROI pooling经过后续检测头H1得到最终的输出C1和B1。
而图(d)就是作者所提的Cascade R-CNN结构,作者认为要求单一回归量在所有质量水平上(即不同IoU样本)表现完全一致是非常困难的。受到姿态回归和人脸对齐的启发,作者将复杂的回归任务分解为一系列更简单的步骤。
T代表总共包含T个级联回归器,且每个级联回归器都是在当前样本{bt}分布下是最优的。论文中,作者通过实验取T值为3。
图(d)看起来和图(b)的框架图一样,但有着如下三点不同:
- 图(b)只是Faster R-CNN在做推理时的优化改进,迭代BBox是一种用于改进边界框的后处理过程,而图(d)的分层回归是一种重采样过程,它改变了不同阶段要处理的假设的分布。
- 由于图(d)同时用于训练和推理,所以训练分布和推断分布之间没有差异。
- 图(d)是针对不同阶段的重采样分布,对多个专门化回归量{fT,fT−1,···,f1}进行优化。这与图(b)中用同一个回归器迭代推断方式相反,它只对初始分布是最优的。这些差异使定位比迭代推断更精确。图(b)的迭代推理方式可用公式表示如下:
它只会优化一个回归器,但推理迭代的时候根据不同IoU值重复迭代使用,这种方式是次优的,且后续需要大量的人工参与,比如累计提议、预测投票等方式。