目标检测论文阅读:Cascade R-CNN: Delving into High Quality Object Detection(CVPR2018)

Cascade R-CNN: Delving into High Quality Object Detection(CVPR2018)

论文链接:https://arxiv.org/abs/1712.00726 
代码链接:https://github.com/zhaoweicai/cascade-rcnn 

参考链接:https://www.codercto.com/a/25258.html

                  https://blog.csdn.net/qq_21949357/article/details/80046867

目标检测问题本质是一个分类问题,但又和分类问题有很大区别,因为在目标检测问题中是对图像中的所有候选框进行打分,在训练过程中通过IoU阈值来判定正负样本,因此IoU阈值的选取是一组需要精心挑选的超参数。而经过低IoU阈值(如0.5)训练的目标检测器通常会产生带有噪声的检测结果。

1、一方面,IoU阈值选取得越高,则得到的正样本更接近目标,因此训练出的检测器定位更加精准,但是一味提高IoU阈值会引发两个问题

  • 正样本过少导致训练的过拟合问题(正样本呈指数消失)
  • 训练和测试使用不一样的IOU阈值很容易导致mismatch,从而导致评估性能的下降(在train和inference使用不一样的阈值很容易导致mismatch)

2、另一方面,IoU阈值选取得越低,得到的正样本更为丰富,有利于检测器的训练,但势必会导致测试时出现大量的虚检,也即论文中提到的“close but not correct”。

解决问题:作者为了解决上述问题就提出了一种muti-stage的architecture,它由一系列IoU阈值不断增加的训练检测器组成,利用不断提高的阈值,在保证样本数不减少的情况下训练出高质量的检测器。(不同IOU阈值的检测器逐步训练,利用检测器是良好分布的输出来训练下一个更高质量的检测器。 逐步改进假设的重新采样来保证所有检测器都具有相同大小的一组正实例,从而减少了过拟合问题。) 

思想来源:

图1(c)给出了经过一次回归以后目标候选框与真实目标框匹配的IoU的变化,横轴代表回归前,纵轴代表回归后,不同颜色的曲线反映的是不同IoU阈值训练的检测器。(横轴的是proposal的IoU,纵轴的是经过box reg得到的新的IoU,不同的线条代表不同阈值训练出来的detector。)总体而言,经过回归器以后,目标候选框的IoU均有所提升,但区别在于:IoU在0.55~0.6之间时,基于0.5的IoU阈值训练的回归器输出最佳(蓝色线);IoU在0.6~0.75之间,基于0.6的IoU阈值训练的回归器输出最佳(绿色线);IoU在0.75以上,基于0.7的阈值训练出的回归器输出最佳(红色线)。以上结果表明:要得到定位精度较高的检测器(也即IoU越大越好),就必须选用较大的IoU阈值,这就说明了,只有proposal自身的阈值和训练器训练用的阈值较为接近的时候,训练器的性能才最好,如果两个阈值相距比较远,就是我们之前说的mismatch问题了。 

然而图1(d)的结果表明,基于0.7的阈值训练出的检测器(红色线)的AP反而是最差的,只有在选用IoU阈值为0.85以上进行评测时,其结果才略好于蓝色线,但依然劣于绿色线,充分验证了我们之前的分析:基于0.7的IoU阈值训练出的检测器中正样本过少,因此正样本的diversity不够,容易导致训练的过拟合,因此在验证集上表现不佳。

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

论文出发点:

能否有一种方式既可以用较高的IoU阈值训练检测器,又能够保证正样本的diversity足够丰富?基于以上分析,作者提出了Cascade R-CNN,用一个stage的输出去训练下一个stage。根据图一(c)可以看出,大部分线条都是在y=x的灰色线条之上的,这就说明某个proposal在经过detector后的IoU几乎必然是增加的,那么再经过一个更大阈值训练的detector,它的IoU就会更好。 把input IoU分为三个阶段(0.5~0.6,0.6~0.75,0.75~1),每个阶段分别基于IoU阈值为0.5、0.6、0.7训练时回归其输出为最优,因此可以设置三个stages(三个IoU阈值递增的检测器)。

举个例子,有三个串联起来的用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的结果都要好。不仅仅只有IoU改善的好处,因为每经过detector,proposal的IoU都更高,样本质量更好了,那么即使我下一个detector阈值设置得比较高,也不会有太多的样本被刷掉,这样就可以保证样本数量避免过拟合问题。

问题来了:随着每个stages中IoU阈值的增加,当增加到第四个stages时(论文实验设置为0.75),经过检测器训练之后,output IoU有可能在图一(c)y=x的灰色线条之下,从而导致AP下降,如何解决这个瓶颈问题?

模型架构:

图3给出了本文方法和其他相关工作的直观对比。(d)展示的就是本文Cascade R-CNN的基本框架;(a)就是经典的Faster R-CNN框架,也是本文的baseline;(b)结构上和Cascade R-CNN非常相似,区别在于只在测试时采用级联结构对Box多次回归,因此ROI检测网络部分“H1”结构是相同的,也即训练时还是采用的单一的IoU阈值;(c)则是在ROI检测网络部分并联多个检测器,这些检测器是不相关的,有点类似‘multi-expert’的思想。

尽管图3(b)的Iterative BBox采用了级联结构来对Box进行多次回归,但采用单一IoU阈值训练唯一的检测器会带来以下问题:目标候选框经过0.5阈值的detector后样本的分布已经发生了变化,如下图所示,可以发现经过多个stage的检测器,正样本的分布更加集中于中心点,表明正样本和真实目标的匹配度越来越高,这时候再使用同一个IoU阈值训练检测器显然是次优的,因为如果不提高IoU阈值来去掉这些红色的outlier,就会引入大量噪声干扰,因此有必要提高IoU阈值来保证样本的质量。

第一行横纵轴分别是回归目标中的box的x方向和y方向偏移量;第二行横纵轴分别是回归目标中的box的宽、高偏差量。我们可以看到,从1st stage到2nd stage,proposal的分布其实已经发生很大变化了,因为很多噪声经过box reg实际上也提高了IoU,2nd和3rd中的那些红色点已经属于outliers,如果不提高阈值来去掉它们,就会引入大量噪声干扰,对结果很不利。从这里也可以看出,阈值的重新选取本质上是一个resample的过程,它保证了样本的质量。

另一方面,单纯提高IoU阈值会带来一个疑问:这样是否就减少了正样本的数量?诚然,如果还是用的初始目标候选框,这个答案是肯定的,但本文是从经过回归器后的目标候选框中进行resample,这个疑问就不存在了,有下图为证:经过多个stage之后,正样本的IoU在不断提升,我们可以任性提高IoU阈值,依然能够获取足够多的正样本。

总结 

  • cascaded regression不断改变了proposal的分布,并且通过调整阈值的方式重采样
  • cascaded在train和inference时都会使用,并没有偏差问题
  • cascaded重采样后的每个检测器,都对重采样后的样本是最优的,没有mismatch问题

 

猜你喜欢

转载自blog.csdn.net/weixin_39506322/article/details/85099954