一文带你读懂Cascade R-CNN,一个使你的检测更加准确的网络


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

作者:Zhaowei Cai & Nuno Vasconcelos

论文链接:https://arxiv.org/abs/1712.00726

代码链接:https://github.com/zhaoweicai/cascade-rcnn


简要概述文章精华

本篇文章主要解决了在目标检测中,检测框不是特别准,容易出现噪声干扰的问题,即close false positive,为什么会有这个问题呢?作者实验发现,因为在基于anchor的检测方法中,我们一般会设置训练的正负样本(用于训练分类以及对正样本进行坐标回归),选取正负样本的方式主要利用候选框与ground truth的IOU占比,常用的比例是50%,即IOU>0.5的作为正样本,IOU<0.3作为负样本等,但是这样就带来了一个问题,阈值取0.5是最好的吗?作者通过实验发现,1、设置不同阈值,阈值越高,其网络对准确度较高的候选框的作用效果越好2、不论阈值设置多少,训练后的网络对输入的proposal都有一定的优化作用。基于这两点,作者设计了Cascade R-CNN网络,如下面图Figure3(d)所示,即通过级联的R-CNN网络,每个级联的R-CNN设置不同的IOU阈值,这样每个网络输出的准确度提升一点,用作下一个更高精度的网络的输入,逐步将网络输出的准确度进一步提高。

一句话总结就是:Cascade R-CNN就是使用不同的IOU阈值,训练了多个级联的检测器。

读了文章精华,我想你已经知道这个网络时做什么的,如果感兴趣,那么接着读下面的详细解析吧~~


文章详细解析

目标检测其实主要干的就是两件事,一是对目标分类,二是标出目标位置。所以,了解Faster R-CNN或者SSD的同学可能都比较清楚,为了实现这两个目标,在训练的时候,我们一般会首先提取候选proposal,然后对proposal进行分类,并且将proposal回归到与其对应的groud truth上面,但是这就带来了一个问题,因为我们做分类需要确定样本的标签,那么我们给什么样的proposal打一个标签呢?最常用的做法是利用IOU(proposal与ground truth的交并比),可是IOU阈值设置成多少可以作为我打标签的边界呢?常用的阈值是0.5,可是0.5是最好的吗?作者通过实验证实了不同IOU对于网络的影响,如图Figure 1 ©所示。图c中3条线分别代表3个IOU的阈值,横轴是输入的IOU的proposal,纵轴是对应的proposal经过网络输出后的坐标框与ground truth的IOU,我们观察可以发现,3条线,都在灰色对角线之上,说明3条线都有一定的优化效果,并且,3条线无一例外在自己设定的阈值周围优化较明显。

那么问题来了,我们是否可以将阈值提高,以达到优化输出精度的效果呢?

作者又做了不同阈值下网络精度的实验,结果如图figure1(d)所示,可以发现,对于阈值为0.5以及0.6的时候,网络精度差距不大,甚至提升了一点,但是将精度提升到0.7后,网络的精度就急速下降了,(COCO数据集上:AP:0.354->0.319),这个实验说明了,仅仅提高IoU的阈值是不行的,因为提高阈值以后,我们会发现,实际上网络的精度(AP)反而降低了

为什么会下降呢?

  • 由于提高了阈值,导致正样本的数量呈指数减低,导致了训练的过拟合
  • 在inference阶段,输入的IOU与训练的IOU不匹配也会导致精度的下降。所以才会出现Figure1(d)中,u=0.7的曲线在IOU=0.5左右的时候,差距那么大。

实验证明了不能使用高的阈值来进行训练,但是实验也呈现出了另一个事实,那便是:回归器的输出IOU一般会好于输入的IOU,图figure1(c)所示。并且随着u的增大,对于在其阈值之上的proposal的优化效果还是有提升的

那既然这样,我们是否可以采用级联的方式逐步提升呢?即首先利用u=0.5的网络,将输入的proposal的提升一些,假如提升到了0.6,然后在用u=0.6的网络进一步提升,加入提升到0.7,然后再用u=0.7的网络再提升,这样岂不是精度越来越高了?

于是乎,作者设计了Cascade R-CNN网络。


图figure 3(d)是Cascade R-CNN的网络结构对比图,Figure 3(a)是Faster R-CNN的网络结构图,其中H0代表的是RPN网络,H1代表的是Faster R-CNN进行检测与分类的head,C1代表最终的分类结果,B1代表最终的bounding box回归结果。那么Cascade R-CNN有什么不同呢?H1那一部分是一样的,但是Cascade R-CNN得到B1回归后的检测框后,将其输入到H2部分,继续回归,以此类推到H3部分,使得每次对bounding box都提高一定的精度,已达到提高检测框准确度的作用。

注:级联的方式,不再是为了找到hard negatives,而是通过调整bounding boxes,给下一阶段找到一个IoU更高的正样本来训练。SSD等利用hard negatives方法进行优化。即对负样本loss排序,取loss较大的部分


在作者Cascade R-CNN之前,其实也有人研究了基于Cascade的方法进行坐标框的优化,如图figure3(b)所示,这种方法叫做iterative bounding box regression,不过该方法中所有的head都是相同的,用公式表示就是如下:

这会导致了如下问题:

  • 我们采用IOU=0.5来训练网络,如图Figure1 ©所示,其对IOU更高的图像效果提升有限。
  • 在每次迭代后,bounding box的分布实际上发生了一定的改变,而分类器是基于最开始的bounding box来训练的,这样会产生较多的outlier point,如下图所示:(红的代表溢出点)

Cascade RCNN的结构图如图Figure3(d)所示,公式表示就是这样的:

iterative bounding box regression是对回归框进行后处理,即生成了之后在多次处理,而Cascade RCNN是在训练的时候就进行重新采样,训练的时候不同的stage的输入数据分布已经是不同的了。这就在一定程度上解决了iterative bounding box regression出现的数据分布变化的问题。高手解决问题,往往就是很简单的一个改动,却产生了重要的意义。

图Figure 4代表了Cascade R-CNN不同stage的输入数据的IOU分布。


实验部分
  • 网络参数

网络的默认设置共有4个stage,第一个stage产生RPN,另外三个stage分别设置IOU阈值为[0.5,0.6,0.7],baseline的选择,Faster R-CNN作者默认选择VGG网络,R-FCN以及FPN作者默认选择ResNet作为backbone,使用的是默认参数。

具体的网络训练的默认参数论文中有提及,这里不详述了,感兴趣的读者可以自行查看论文,实验部分的介绍。

  • 损失函数

关于损失函数,跟Faster R-CNN基本一致,没有什么变化。分类采用softmax,回归采用smooth L1 loss,并且为了防止由于bounding box的大小以及位置带来的回归尺度的影响,我们一般会对box的坐标进行归一化操作,即:


  • 网络分析

图Figure5(a)中,3条实线分别对应3个IOU阈值下训练的模型的AP(注意这里是单独训练的,不是采用级联的方式训练的),如图可以发现,当u=0.6是时候,在IOU比较低的时候,其表现是没有u=0.5好的,但是在IOU比较高的时候,表现比0.5好了一些,而对比u=0.7会发现,其效果基本都在u=0.6以下,只有在IOU>0.8的时候,表现略微超过了u=0.5.该实验说明了,设置不同阈值对于网络的影响。

进一步的,作者又进行了实验,作者将ground truth加入到了Proposal中间,测试结果如图Figure5(b)所示,实验结果显示,网络的表现随着u提升而提升,为什么会这样呢?

说明,u=0.7的时候,需要你保证proposal的质量,即其输入的proposal的准确度要高一点,另外,u=0.7确实可以做到比u=0.5要好,只是需要你保证你proposal的准确度就行。

Cascade RCNN的作用不就是这样吗?那是不是如我们猜想的一样呢?图Figure5(a)给出了答案,其中虚线代表的是cascade结构的精度,可以发现,精度确实提升了,虽然没有在IOU较低的部分超过u=0.5,但是整体上是提升了的,说明cascade的提升还是有效果的。

图Figure(6)向我们展示了不同stage下不同阈值的表现,可以发现,stage1的时候u=0.7的detector表现不是很好,但是当stage=3的时候,u=0.7的表现就非常好了。并且细心的同学可能发现,图6的精度比图5的精度要高?这是为什么呢?因为图6是采用cascade方法训练得到了,而图5只是设置了不同的IOU阈值作为正样本来训练,并没有采用cascade方法,这里也侧面说明了cascade方法的有效性。

另外作者对比了Iterative BBox以及Intrgral Loss的精度,如下表。

对Cascade R-CNN网络的进一步探索实验
  • 实验一:stage-wise的比较

下表展示了不同stage的表现,其中1,2,3分别代表单个stage的表现,1 ~ 2代表了级联1和2的表现,1 ~ 3代表了级联1-3的表现,可以发现AP呈递增趋势,效果也是越来越好,符合预期。

  • 实验二:提升阈值的作用

下表展示了是否每个stage都需要提升IOU的阈值呢?带有向上箭头的那行表示IOU的阈值会提升,不带的表示不提升,实验结果表明提升的效果还是比较明显的,stat代表的是是否采用回归统计,这个回归统计是什么东西我也还没搞明白,知道的可以跟我说一下。。。

  • 实验三:多少个stage是最合适的呢?

最后一个实验,作者对stage的数量进行了分析,如下图所示,作者发现stage为3的时候效果最好,继续增加效果反而下降了。

下图是cascade与目前stage of the art 网络的对比情况,其中Table 6还有训练时间等信息

可以发现使用cascade结构对于精度的提升确实是有帮助的,不过时间也会稍稍增加一些。

结论

本篇论文最大的贡献在于,提出了Cascade R-CNN的方法,同时向我们介绍了不同阈值下对于proposal的回归作用,虽然Cascade R-CNN方法可能没有什么特别的,但是能探究出背后的逻辑,设计出这个方法,还是很厉害的。

In object detection, an intersection over union (IoU) threshold is required to define positives and negatives. An object detector, trained with low IoU threshold, e.g. 0.5, usually produces noisy detections. However, detection per- formance tends to degrade with increasing the IoU thresh- olds. Two main factors are responsible for this: 1) over- fitting during training, due to exponentially vanishing pos- itive samples, and 2) inference-time mismatch between the IoUs for which the detector is optimal and those of the in- put hypotheses. A multi-stage object detection architecture, the Cascade R-CNN, is proposed to address these prob- lems. It consists of a sequence of detectors trained with increasing IoU thresholds, to be sequentially more selec- tive against close false positives. The detectors are trained stage by stage, leveraging the observation that the out- put of a detector is a good distribution for training the next higher quality detector. The resampling of progres- sively improved hypotheses guarantees that all detectors have a positive set of examples of equivalent size, reduc- ing the overfitting problem. The same cascade procedure is applied at inference, enabling a closer match between the hypotheses and the detector quality of each stage. A simple implementation of the Cascade R-CNN is shown to surpass all single-model object detectors on the challeng- ing COCO dataset. Experiments also show that the Cas- cade R-CNN is widely applicable across detector architec- tures, achieving consistent gains independently of the base- line detector strength. The code will be made available at https://github.com/zhaoweicai/cascade-rcnn.
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值