一、概述

  • cascade中文释义为级联,顾名思义,Cascade RCNN网络结构就是级联的检测器
  • Cascade RCNN是针对RCNN系列检测器提出的通用结构,可将faster RCNNFPNR-FCNRCNN检测器检测性能提高2-4%,效果可谓十分强大。
  • Cascade RCNN如何进行检测器级联?其依据又是什么?请往下看。

二、Motivation

  • RCNN系列检测器(目标检测框架)的整体框架可分为两个模块:①RPN模块,负责从输入图像中生成正负类的proposals,②检测模块,负责对RPN生成的proposals完成分类和边框回归。在检测模块中,需要对RPN传入的proposals分类,分类依据是与ground truthIou,目前的常用设置是:将proposalground truthIou大于0.5的视为正类样本(具体类别取决于ground truth的类别),将Iou小于0.3的视为负类样本。一个自然的想法是:如果将proposals判定为正类的阈值提高,意味着正类proposal的质量更好,那么检测效果会不会更好? 乍一想,可行,再一想,不太行。主要原因是:随着阈值的提高,得到的正类proposal会更少,使模型过拟合
  • 另外,这种region-based的检测器还存在另外一个问题,inference-time mismatch。作者通过实验发现,在某个Iou下训练的检测器推理时对近似Iouproposal是最优的。在训练检测器时,我们总可以通过proposalground truthIou得到一定数量和比例的正负类样本,在推理阶段,对RPN生成的所有proposal都要进行推理:①下图左图:不同颜色的线条代表不同Iou下训练的检测器;横轴代表推理时输入检测器的proposal的Iou阈值(举例:横坐标为0.55,表示送入检测器的proposal与ground truthIou最小为0.55),纵轴代表检测的检测结果与ground truthIou。从这张图可以得出两个结论:第一,较小Iou下训练的检测器(不同颜色的线条)在输入Iou较小时性能更好,在输入Iou较大时性能更差;第二,某一Iou下训练的检测器对该Iou下检测性能最好。②下图右图:不同颜色的线条代表不同Iou下训练的检测器;横轴代表将检测结果判定为正类的Iou阈值,纵轴代表某一Iou阈值下检测器的AP值。从这张图我们可以得出一个结论:小Iou阈值下训练的检测器比大Iou训练的检测器在检测阈值较小的情况下性能更好,反之。

Haar特征和级联分类器目标检测算法手动截取目标 目标检测分类器分类_多级

  • 上面为了让读者尽可能理解,絮絮叨叨讲了一大堆,用原文中的一句话总结一下: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)

Haar特征和级联分类器目标检测算法手动截取目标 目标检测分类器分类_多级_02

  • 上图是多级回归结构的示意图:conv是特征提取网络,B0是预先生成的proposalspool是池化层,H1是检测器,C是对每个propposal的分类结果,B是对每个proposal的边框回归结果。首先训练得到检测器H1,再重复使用H1,形成一个三级检测的结构,每一级检测器均对上一级检测器得到的bounding boxes进行回归。C3B3是最终的检测结果。
  • 由之前的论述,某一Iou阈值下训练的检测器只对近似Iou下的输入检测性能最优。采用这种级联的方式后,后两级检测器的输入的Iou相比训练时的阈值越来越高,导致检测效果变差。
  • 另外,作者通过实验发现,推理阶段各级检测器的输入数据的分布也是不一致的,导致二三级检测器无法达到最优检测效果,实验图如下。

Haar特征和级联分类器目标检测算法手动截取目标 目标检测分类器分类_池化_03

3.2 多级分类(Integral Loss)

Haar特征和级联分类器目标检测算法手动截取目标 目标检测分类器分类_池化_04

  • 多级分类结构示意图如上所示,该结构使用了多个不同的检测器,第一个检测器既得到proposal的类别,又对其边框进行回归,后两个检测器只对其类别进行修正。训练时,这三个检测器同时训练,均获得池化后的proposals,所不同的是,靠后的检测器训练时将proposals判定为正类样本的阈值设置的更高。训练网络计算分类误差时,将三个检测器的误差累加。
  • 这种级联方式的缺陷是:对RPN生成的proposals,后两级检测器因为使用了更高的Iou阈值,导致得到的正类样本过少,因而会发生过拟合问题。下图是作者统计的RPN网络得到的proposals在不同Iou下的数据分布。可见,随着Iou阈值的提高,正类样本越来越少。

Haar特征和级联分类器目标检测算法手动截取目标 目标检测分类器分类_多级_05

四、Cascade RCNN

  • 上述两种检测器级联方式除了各自的缺点外,还有个公共缺点,inference-time mismatch,这个缺点在本文开篇就详细论述了。那么Cascade RCNN是如何解决这些问题的呢?

Haar特征和级联分类器目标检测算法手动截取目标 目标检测分类器分类_多级_06

  • 上图是Cascade RCNN结构图。该结构使用了三个检测器,每个检测器均接受上一级检测器的边框回归结果作为输入,三个检测器将proposal判定为正类的Iou阈值逐渐升高(0.5, 0.6, 0.7)
  • 利用这种结构和Iou阈值的设置,解决了开篇提到的两个问题。首先,每一级检测器得到的输出的Iou都比其输入高,将其送入高Iou阈值训练出的下一级检测器,可以实现输入proposalIou与检测器的训练Iou尽可能匹配的目的。其次,在推理阶段,通过这种检测器级联的方式,后两级检测器接受的输入都是正类样本居多,因而可以避免inference-time mismatch问题。

五、实验部分

5.1 单独分析各级检测器在不同IOU输入下的性能

Haar特征和级联分类器目标检测算法手动截取目标 目标检测分类器分类_多级_07

5.2 各级检测器的检测性能

Haar特征和级联分类器目标检测算法手动截取目标 目标检测分类器分类_级联_08

5.3 Cascade RCNN与多级回归、多级分类的对比

Haar特征和级联分类器目标检测算法手动截取目标 目标检测分类器分类_池化_09

5.4 一些消融实验(Ablation Experiments)

Haar特征和级联分类器目标检测算法手动截取目标 目标检测分类器分类_多级_10


Haar特征和级联分类器目标检测算法手动截取目标 目标检测分类器分类_多级_11


Haar特征和级联分类器目标检测算法手动截取目标 目标检测分类器分类_级联_12

5.5 与现有模型的对比

Haar特征和级联分类器目标检测算法手动截取目标 目标检测分类器分类_多级_13

六、总结

  • 首先,这篇论文的行文逻辑非常值得学习,先讲别人做的为什么不好,再讲我为什么要这么做,依据是什么(实验),再引出我的工作,令人信服。
  • 从论文内容来说,作者提出的两个点非常有趣:一是检测器IOU阈值与训练样本IOU阈值的匹配问题,二是推理阶段的mismatch问题。能不能不用检测器级联的方式解决inference-time mismatch问题?值得思考