一、概述
-
cascade
中文释义为级联
,顾名思义,Cascade RCNN
网络结构就是级联的检测器。 -
Cascade RCNN
是针对RCNN系列检测器
提出的通用结构,可将faster RCNN
、FPN
、R-FCN
等RCNN检测器
检测性能提高2-4%
,效果可谓十分强大。 -
Cascade RCNN
如何进行检测器级联?其依据又是什么?请往下看。
二、Motivation
-
RCNN系列
检测器(目标检测框架)的整体框架可分为两个模块:①RPN模块,负责从输入图像中生成正负类的proposals
,②检测模块,负责对RPN生成的proposals
完成分类和边框回归。在检测模块中,需要对RPN传入的proposals
分类,分类依据是与ground truth
的Iou
,目前的常用设置是:将proposal
与ground truth
的Iou
大于0.5的视为正类样本(具体类别取决于ground truth
的类别),将Iou
小于0.3的视为负类样本。一个自然的想法是:如果将proposals判定为正类的阈值提高,意味着正类proposal的质量更好,那么检测效果会不会更好? 乍一想,可行,再一想,不太行。主要原因是:随着阈值的提高,得到的正类proposal会更少,使模型过拟合。 - 另外,这种
region-based
的检测器还存在另外一个问题,inference-time mismatch
。作者通过实验发现,在某个Iou
下训练的检测器推理时对近似Iou
的proposal
是最优的。在训练检测器时,我们总可以通过proposal
与ground truth
的Iou
得到一定数量和比例的正负类样本,在推理阶段,对RPN生成的所有proposal
都要进行推理:①下图左图:不同颜色的线条代表不同Iou
下训练的检测器;横轴代表推理时输入检测器的proposal的Iou
阈值(举例:横坐标为0.55,表示送入检测器的proposal与ground truth
的Iou
最小为0.55),纵轴代表检测的检测结果与ground truth
的Iou
。从这张图可以得出两个结论:第一,较小Iou
下训练的检测器(不同颜色的线条)在输入Iou
较小时性能更好,在输入Iou
较大时性能更差;第二,某一Iou
下训练的检测器对该Iou
下检测性能最好。②下图右图:不同颜色的线条代表不同Iou
下训练的检测器;横轴代表将检测结果判定为正类的Iou
阈值,纵轴代表某一Iou
阈值下检测器的AP
值。从这张图我们可以得出一个结论:小Iou
阈值下训练的检测器比大Iou
训练的检测器在检测阈值较小的情况下性能更好,反之。
- 上面为了让读者尽可能理解,絮絮叨叨讲了一大堆,用原文中的一句话总结一下:The basic idea is that a single detector can only be optimal for a single quality level,就是说,在某一
Iou
阈值下训练的检测器对类似Iou
的输入检测效果更好。同时从上图我们也可以发现,检测结果的Iou
总是优于输入的Iou
- 将上面两点结合起来,就产生了一个非常自然的想法:检测器级联。将小
Iou
的输入送入第一个检测器,该检测器训练时判断为正类的阈值设置为与该Iou
接近,这样可以得到较好的检测性能;得到的检测结果再送入第二个检测器(此时这些检测结果相对于ground truth的Iou
比输入更高),第二个检测器训练时判断为正类的阈值设置为更高……如此,就将多个检测器级联了起来。 - 当然,对检测器进行级联的想法很早就有人提出了,那么
Cascade RCNN
对检测器级联的方式与其它检测器级联又有何不同呢?
三、Related work
3.1 多级回归(Iterative BBox)
- 上图是多级回归结构的示意图:
conv
是特征提取网络,B0
是预先生成的proposals
,pool
是池化层,H1
是检测器,C
是对每个propposal
的分类结果,B
是对每个proposal
的边框回归结果。首先训练得到检测器H1
,再重复使用H1
,形成一个三级检测的结构,每一级检测器均对上一级检测器得到的bounding boxes
进行回归。C3
和B3
是最终的检测结果。 - 由之前的论述,某一
Iou
阈值下训练的检测器只对近似Iou
下的输入检测性能最优。采用这种级联的方式后,后两级检测器的输入的Iou
相比训练时的阈值越来越高,导致检测效果变差。 - 另外,作者通过实验发现,推理阶段各级检测器的输入数据的分布也是不一致的,导致二三级检测器无法达到最优检测效果,实验图如下。
3.2 多级分类(Integral Loss)
- 多级分类结构示意图如上所示,该结构使用了多个不同的检测器,第一个检测器既得到
proposal
的类别,又对其边框进行回归,后两个检测器只对其类别进行修正。训练时,这三个检测器同时训练,均获得池化后的proposals
,所不同的是,靠后的检测器训练时将proposals
判定为正类样本的阈值设置的更高。训练网络计算分类误差时,将三个检测器的误差累加。 - 这种级联方式的缺陷是:对
RPN
生成的proposals
,后两级检测器因为使用了更高的Iou
阈值,导致得到的正类样本过少,因而会发生过拟合问题。下图是作者统计的RPN
网络得到的proposals
在不同Iou
下的数据分布。可见,随着Iou
阈值的提高,正类样本越来越少。
四、Cascade RCNN
- 上述两种检测器级联方式除了各自的缺点外,还有个公共缺点,
inference-time mismatch
,这个缺点在本文开篇就详细论述了。那么Cascade RCNN
是如何解决这些问题的呢?
- 上图是
Cascade RCNN
结构图。该结构使用了三个检测器,每个检测器均接受上一级检测器的边框回归结果作为输入,三个检测器将proposal
判定为正类的Iou
阈值逐渐升高(0.5, 0.6, 0.7)
- 利用这种结构和
Iou
阈值的设置,解决了开篇提到的两个问题。首先,每一级检测器得到的输出的Iou
都比其输入高,将其送入高Iou
阈值训练出的下一级检测器,可以实现输入proposal
的Iou
与检测器的训练Iou
尽可能匹配的目的。其次,在推理阶段,通过这种检测器级联的方式,后两级检测器接受的输入都是正类样本居多,因而可以避免inference-time mismatch
问题。
五、实验部分
5.1 单独分析各级检测器在不同IOU输入下的性能
5.2 各级检测器的检测性能
5.3 Cascade RCNN与多级回归、多级分类的对比
5.4 一些消融实验(Ablation Experiments)
5.5 与现有模型的对比
六、总结
- 首先,这篇论文的行文逻辑非常值得学习,先讲别人做的为什么不好,再讲我为什么要这么做,依据是什么(实验),再引出我的工作,令人信服。
- 从论文内容来说,作者提出的两个点非常有趣:一是检测器IOU阈值与训练样本IOU阈值的匹配问题,二是推理阶段的mismatch问题。能不能不用检测器级联的方式解决inference-time mismatch问题?值得思考