Advertisement

two-stage-anchor-based-faster-rcnn进阶 Cascade R-CNN: Delving into High Quality Object Detection

阅读量:

cascade rcnn:是基于faster rcnn的一种改进,我的理解是这个算法更趋近于stage by stage 的算法,利用不同的IOU阈值选取,将多级目标检测器进行级联,进一步的优化检测结果,这个算法应该是各个比赛刷榜的主要算法了,不出意外是速度奇慢,但在two-stage里面,我觉得相当具有代表性。

pytorch源代码:https://github.com/guoruoqian/cascade-rcnn_Pytorch

paper:https://arxiv.org/abs/1712.00726

简单回顾faster-rcn的两个阶段(此处图见知乎:https://zhuanlan.zhihu.com/p/42553957):

文章提出的问题:

1、IOU=0.5(此处IOU指的是正负样本的界定值)时会出现较多的误检,因为0.5时正样本会引入更多的背景

2、但一味的提高iou并不一定是好事,阈值越小,对应的正样本就越少,样本数量不均衡越严重(本身faster-rnn就已经非常不对称),会造成严重的过拟合。

3、更进一步的,使用不同的iou值进行训练会造成训练和推理时的一个mismatch问题,如何理解这个问题呢?如下图所示(图片来源见水印)

将RPN得到的proposals的大致分布绘制如上,横轴表示proposals和gt的iou值,纵轴表示满足条件的proposal数量。

1、在training阶段,利用把gt的iou大于0.5的proposals作为正样本,让后面的正样本参与bbox回归学习

2、在inference阶段,将所有的proposals作为正样本进行推理,让后面的bbox回归器回归坐标。

在training和inference阶段,bbox回归器的输入分布是不一致的,training阶段质量更高(被采样过),inference阶段质量较差(可能包括很多iou<threshold),可以理解为训练时训练出了一个最佳基于当前阈值的iou检测器,但推理时与训练的proposals分布完全不一致,则这个得到的最佳模型也许并非当前inference时的最佳模型,通常取iou0.5时,mismatch不会很严重。

作者提供了如下图所示的两个performance图,图c可以看到现象,如下所示:

1、三条彩色曲线都在灰色曲线上,意味着输出iou永远比输入iou要大,这个其实是核心思想,也就意味着如果用更好的proposals可以得到更为精确的bbox,即使用级联stage会得到更好的结果(0.5-0.6-0.7都可以获得类似的结果)。

2、很难指定一个固定的iou再训练集上得到的检测模型对IOU相差较远时也会得到最佳结果:

阈值=0.5时,输入iou=0.5时,输出iou=0.75,而阈值=0.7时,输入iou=0.5时,输出iou=0.63;

阈值=0.5时,输入iou=0.95时,输出iou=0.9,而阈值=0.7时,输入iou=0.95时,输出iou=0.95;

即合适的iou对检测器效果最好。

3、3条线在自己附近区域优化效果相对baseline效果最明显。

再进一步的,图d为ap曲线,iou阈值设置不同时,ap值相差很大,详细来说,阈值为0.5和0.6时,精度相差不大,阈值为0.7时,精度急剧下降,那此时来分析,为什么会出现这种原因,按照前面来分析,1、提高了阈值,可训练的正样本越少,导致训练过拟合。2、在inference阶段,出现了mismatch现象,即输入IOU与训练iou不匹配,出现精度大幅度下降。

综上,因此采取cascade的方式能够让每一个stage的detector都专注于检测IOU在某一范围内的proposal,因为输出IOU普遍大于输入IOU,每个级联的R-CNN设置不同的IOU阈值,这样每个网络输出的准确度提升一点,用作下一个更高精度的网络的输入,逐步将网络输出的准确度进一步提高因此检测效果会越来越好。

结构解析:

图a是faster rcnn,图b与图d的最大区别在于(仔细观察),图d采用的是上一阶段的输出及进行下一阶段训练,找一组好的假阳性来训练下一阶段,而图b采用的永远是RPN最开始rpn网络输出的H1-proposals,这个地方不更加详细的讨论模型结构问题。

此处提一下图b,

iterative Bbox:(暂时不去理解了,增加工作量,知道问题出在哪就行了)

再进一步解释为什么cascade结构好,它解决问题的理论依据到底是什么:

如上图所示,第一行横轴代表回归目标中的box的x方向和y方向的偏移量,第二行横轴代表回归坐标的box的宽、高的偏移量(此处对坐标进行归一化),由图可以看出,1st stage和2st stage, proposals的分布已经发生了很大的变化,由于很多噪声经过进一步的回归也提升了IOU,所以红色的点实际上已经属于outliers pointer,如果不提高阈值去掉他们则会引入大量的噪声,则stage这个过程本质上是一个resample的过程,进一步的保证了proposals的质量。并且,使用了这个多stage后,作者进一步给出了实验证明,不会减少样本的数量,如下图所示:

cascade结构可以表示为如下:

T代表stage个数,ft代表经过训练的最佳regressor,b代表当前的gt-proposals分布。

因此,使用cascade结构以后,

1、iterator BBox是用于改善边界框的后处理过程,但级联回归是一种重采样过程,多级的stage改变了模型本身的gt的proposal分布,同时不断地对proposals进行resample,一级都比一级优秀

2、在训练和测试时都使用cascade结构,因此训练和推理分布之间没有差异,每个重采样后的检测器对重采样后的样本都是最优的,不会出现mismatch的问题

3、针对多个阶段的重采样分布,优化了多个专业回归变量{fT,fT -1,...,f1}。 这与结构图中c结构的单个f相反,后者仅对于初始分布是最佳的。 这些差异可以实现比iterator BBox更精确的本地化,而无需进行进一步的人工操作

结构、原理、解决的问题都如上所示,接下来看看实验部分:

网络参数:

3个stage, iou=[0.5, 0.6, 0.7],基于faster rcnn和 r-fcn等做了实验,均取得了好的效果,实验效果这边就不粘贴。

文章做了3个实验:

1、stage-wise的比较

2、提升阈值的作用

3、stages多少最合适:表4总结了阶段数的影响。添加第二个检测阶段可显着改善基线检测器。 三个检测阶段仍会产生不小的改进,但是增加第4个阶段(u = 0.75)会导致性能略有下降。 但是请注意,虽然AP的整体性能下降,但四阶段级联对于高IoU级别却具有最佳性能。 三级联实现最佳平衡。

损失函数:每一个stage的(分类损失函数+ 平衡因子*回归损失函数)求和

这个倒没什么特殊,分类使用softmax,回归使用smooth L1.

最后给出paper的测试结果和sota的效果:

paper的code复现还有很多细节,需要开始研究code了,以前看的有点忘了,抽空去补一下。

参考:<>

https://zhuanlan.zhihu.com/p/42553957

全部评论 (0)

还没有任何评论哟~