Faster R-CNN网络的另一种优化思路:cascade R-CNN网络详解

版权声明:站在巨人的肩膀上学习。 https://blog.csdn.net/zgcr654321/article/details/84875213

论文:Cascade R-CNN: Delving into High Quality Object Detection

论文地址:https://arxiv.org/pdf/1712.00726.pdf

Github项目地址:https://github.com/zhaoweicai/cascade-rcnn

在Faster R-CNN算法中,我们需要确定IOU的阈值来区分正样本和负样本。低的阈值如0.5训练网络,易产生检测噪声,但随着IOU阈值的增加,检测性能会降低。因此,我们提出了Cascade R-CNN(级联R-CNN)算法。

该算法由一系列随着IOU阈值增加而训练的检测器组成,循序渐进的对close false positive更具选择性。检测器被阶段性地训练,如果检测器的输出是一个好的分布,则用于训练下一个阶段更好的检测器。对逐渐改进的假设进行重采样,保证所有的检测器由一组同等大小的正样本组成,缓解过拟合问题。在假设阶段应用同样的级联程序,使得每一个阶段的假设和检测器的质量有一更匹配的性能。

直接提高IoU时候带来的过拟合问题与Cascade R-CNN的提出

IoU用来判断候选框是正样本还是负样本,比如一般设IoU为0.5,>0.5的作为正样本。但是,IoU设为0.5这样一个条件太松了,会有很多噪音框出现。

如果我们提高Iou,那么又会带来另一个问题,由于IoU是用来判断正负样本的,如果IoU值太大,用来训练模型的正样本就减少了,这会导致过拟合的问题。

如:

图(a)中u=0.5也就是常用的正负样本界定的阈值,但是当阈值取0.5时会有较多的误检,因为0.5的阈值会使得正样本中有较多的背景,这是较多误检的原因;(b)用0.7的IOU阈值可以减少误检,但检测效果不一定最好,主要原因在于IOU阈值越高,正样本的数量就越少,因此过拟合的风险就越大。

图(c)和(d)中的曲线是用来描述localization performance和detection performance,其中横坐标表示输入的proposal和ground truth的IOU值,纵坐标表示输出的proposal和ground truth的IOU值。红、绿、蓝3条曲线代表训练检测模型时用的正负样本标签的阈值分别是0.7、0.6、0.5。

扫描二维码关注公众号,回复: 4435096 查看本文章

图(c)中不同的线条代表不同的训练用IoU阈值训练出来的detector,显然新的IoU越高,detector的regression的性能越好。另外,在图(c)中可以看到在0.55~0.6的范围内阈值为0.5的detector性能最好,在0.6~0.75阈值为0.6的detector性能最佳,而到了0.75之后就是阈值为0.7的detector了。

也就是说,只有proposal自身的阈值和训练器训练用的阈值较为接近的时候,训练器的性能才最好。那么我们能不能直接用较大的阈值(比如u=0.7)来训练检测模型呢?这样是不行的,原因是较高的阈值会使得正样本数量减少,这样数据更加趋于不平衡,而且正样本数量的减少会使得模型更容易过拟合。

在图(d)中我们可以发现输入的Iou从0.5开始增加后,detector的detection performance反而在不断变差。

如何能保证proposal的高质量又不减少训练样本?

作者提出了cascade R-CNN模型,简单来讲cascade R-CNN是由一系列的检测模型组成,每个检测模型都基于不同IOU阈值的正负样本训练得到,前一个检测模型的输出作为后一个检测模型的输入,因此是stage by stage的训练方式,而且越往后的检测模型,其界定正负样本的IOU阈值是不断上升的。

我们看图c中大部分线条都是在y=x的灰色线条之上的,这就说明某个proposal在经过detector后的IoU几乎必然是增加的,那么再经过一个更大阈值训练的detector,它的IoU就会更好。 

如:

根据图(c)中数据,假如有三个串联起来的用0.5/0.6/0.7的阈值训练出来的detector,有一个IoU约为0.55的proposal,经过0.5的detector,IoU变为0.75;再经过0.6的detector,IoU变为0.82;再经过0.7的detector,最终IoU变为0.87,这比任何一个单独的detector的结果都要好。每经过一个detector,proposal的IoU都更高,正样本的质量会更好,即使下一个检测器的IOU阈值设置的较高,也不会有太多的样本被舍弃,能有效的缓解过拟合现象。

相关工作及比较证明:

下面是几种模型结构的对比:

上图中,H0代表RPN网络,H1代表ROI池化层,C代表分类器,B代表边界框回归。

图(a)是经典的Faster R-CNN框架模型,注意Faster R-CNN中的C0是分类一个anchor中包含目标或者不包含目标,C1才是分类这个anchor中包含哪一类目标;

注意我们的图(b)Iterative bbox refinement采用了级联的结构对Box回归,它的结构看起来似乎和图(d)作者提出的Cascade R-CNN网络一样,但是Iterative bbox refinement每一级使用的ROI检测网络部分是相同的结构“H1”,它们使用的是同样的IoU阈值。故Iterative bbox refinement训练出来的header,会导致IoU到一定值之后很难更进一步改善。边界框回归部分的公式与Faster R-CNN中相同,这里不再赘述。

对于图(c)Integral loss,它只有一个bbox reg,但是有针对不同阈值的classifier,不过这本质上也并不能改善最终定位的精度。

图(d)就是作者提出的Cascade R-CNN网络,即有多个IoU threshold递增的header,每一级使用上一级refine过后的bbox作为输入。这样可以保证每一级的header都可以得到足够多的正样本,且正样本的质量可以逐级提升。在训练和测试时,这个操作也都保持一致。在测试中,作者使用多个header输出的均值作为这个proposal最终的分数,可以证明对结果会有进一步的提升。

下图是关于迭代式bbox回归在不同阶段的四个回归值分布情况(蓝色点)。

上图中第一行横纵轴分别为回归目标中box的x和y方向的偏移量,第二行横纵轴分别为回归目标中box的宽高偏差量。

可以看到在级联中从1st stage到2st stage,proposal的分布发生了很大的变化,有很多噪声在经过box reg训练之后提高了IOU,在2st stage和3st stage中那些红点属于异常值。可以看出在不同阶段这4个值的分布差异较大,对于这种情况,不变化的检测模型显然难以在这种改变中达到最优效果。 因此需要在后续的级联结构中提高阈值去除噪声干扰。

前面提到提高阈值会减少正样本的数量,在前言部分对此给出了感性的解释,作者又给出了理论依据。

上图是cascade-R-CNN在不同阶段预测得到的proposal的IOU值分布情况。

从上图可以看到在1st stage中大于0.5的部分,与2st stage中大于0.6的部分,还有3st stage中大于0.7的部分在数量上基本一致。

第一个stage大于0.5占16.7%,第二个stage大于0.6占21.7%,第三个stage大于0.7占21.7%。最后(第三个stage)使用高IoU阈值(0.7)判断正负样本的时候,没有减少正样本数量,反而还有点增加,从而避免了过拟合。

Interative Loss模型没有级联结构,该结构使用了不同阈值分类,然后融合多个结果进行分类推理,而且只取了一个结果做边界框回归。由上图的1st stage部分可以看出,当IOU越高,proposal占的比重越小,因此Interative Loss的结构不能从根本上克服过拟合的现象。

Cascade R-CNN的实现与结果:

作者最终确定的结构一共是4个stages: 1个RPN+3个检测器(阈值设定分别为0.5/0.6/0.7)……RPN就是Faster R-CNN网络中的RPN。后面三个检测器,则按照之前介绍,每个检测器的输入都是上一个检测器进行了边框回归后的结果,实现思路类似于Faster RCNN的第二阶段。 

 

结果如下:

作者的方法效果还是很惊艳的。另外,对于目前流行的检测结构来说,特征提取是耗时最多的,因此尽管Cascade R-CNN增加了比较多的参数,但是速度的影响并没有想象中的大。

作者也比较了网络的耗时:

目标检测与分类任务很大的不同就在于数据集的样本没有明确的区分正负样本,在检测任务中是通过设置IOU的值区分正负样本,这就涉及到一个调参的问题,但是IoU这个指标很难通过gradient descent来优化,虽然之前也有一些IoU loss的工作,但是效果并不理想。Cascade R-CNN所提的方法,在前人的基础上更进了一步。

猜你喜欢

转载自blog.csdn.net/zgcr654321/article/details/84875213