论文阅读|Cascade R-CNN

论文相关信息​

1.论文题目:Cascade R-CNN: Delving into High Quality Object Detection

​ 2.发表时间:2018 CVPR

​ 3.文献地址:http://openaccess.thecvf.com/content_cvpr_2018/html/Cai_Cascade_R-CNN_Delving_CVPR_2018_paper.html
​ 4.论文源码: https://github.com/zhaoweicai/cascade-rcnn

摘要

目标检测中,通常以IoU值作为候选框等正负样本的判断依据,IoU设置低了,则训练出来的检测器会产生噪声,设置高了,则会降低效果,这是因为:
1)IoU提高则训练时正样本指数性的减少,导致模型过拟合。
2)以某个IoU阈值训练得到的单一模型,只对这个IoU阈值的优化最佳。训练时IoU设置过高,得到的正样本都很严格,从而训练得到的模型也比较严格,严格的模型对于低IoU的proposal的优化效果不好,而测试会将RPN等这样一阶段网络产生的所有建议框当作正样本,但是这些正样本中大部分的都是IoU很低的建议框,这就与训练好的模型不匹配了。即mismatch问题(测试时网络将产生的所有的候选框作为正样本送入分类网络)。

论文中将那些接近ground truth,但是又不属于正样本的称作“close” false positives,这里同一叫做假正样本。同时,论文中把object proposal叫做 detection hypotheses。

这里将质量(quality)定义为建议框和ground truth的IoU值,将检测器质量(quality of detector)定义为检测器使用的IoU阈值 u u u的大小, u u u越大,则检测器质量越高。

本文的核心目的,就是要训练处这样一个高质量的检测器,只输出少量的噪声。

而要训练这样一个高质量检测器,仅仅提高IoU阈值 u u u是不行的,原因就是开头提到的那两点。

  1. u u u过高导致训练时正样本过少,从而模型过拟合。
  2. u u u过高使得训练出来的高质量的模型,在测试时面对大量低质量的建议框,其效果变差,也就是上面提到的mismatch,高质量的检测器不适应大量低质量的建议框输入。
    下图就是对这两点的解释。

在这里插入图片描述
图中a和b是用不同IoU阈值训练得到的模型检测同一张图片的结果。可以发现,a使用的是我们通常设置的值u=0.5,而b的IoU则更高为0.7,对比发现低IoU阈值导致得到的模型在预测时会产生更多“噪声”,如图中有些不是人的被标记为了人;而较高IoU的b图中则避免的这种现象。
图c是三个不同 u u u训练得到的三个回归器作用于不同IoU的输入上的回归表现,可以发现每个回归器在输入样本IoU接近其训练时的IoU阈值 u u u时,其对样本的优化效果越好(增加输入样本IoU越多)。这也说明,单一阈值训练出的检测器效果非常有限,单一阈值不能对所有的Proposals都有很好的优化作用。
但是,对于大部分的样本,回归器总能提升其IoU值(输入样本IoU很大时例外)。

(d)图中横轴表示inference阶段,判定box为正样本的IoU阈值,纵轴为mAP。当检测时的IoU阈值设置的小时,IoU阈值较小训练得到的模型在检测时效果好些,但是当检测的IoU阈值提高,则IoU阈值较大训练得到的模型表现更好。

作者观察到将Faster R-CNN的第一阶段RPN生成的proposal传入我们的head network后,经过回归分支的作用,会使传入的proposal与ground truth 的IoU普遍增加,于是想到使用级联的回归器,即将检测器输出的box作为下一个检测器的输入,这样下一个检测器输入的所有正样本的IoU相比第一个检测器输入的样本的IoU就大很多,以此类推,最后proposal的IoU会随着级联深度变深而普遍增加,这样,就使得即使我们的IoU阈值 u u u逐层增加,每层检测器得到的正样本数量也能保持相同的大小,从而实现即使将训练时的IoU阈值 u u u设置较高,也不会出现文章开始说的两个问题(过拟合和mismatch)。进而能够训练一个高质量网络。

因此,本文提出了一个在Faster R-CNN上延展得到的多阶段的目标检测架构,如下图d,该网络由一系列的以逐渐增长的IoU设置训练得到的检测器组成,能够更好的减少生成错误样本的情况。

在这里插入图片描述
图中,I是输入图片,conv是卷积骨干网,pooling则是特征提取器,H表示网络头部,B是bounding box,C分类器。所有架构中的B0都表示的是Proposal。
除非特别声明,Cascade R-CNN一般由四个stage组成,第一个stafe是RPN,生成proposals,接着三个stage分别对应三个IoU阈值U= { 0.5, 0.6, 0.7}训练得到的检测器。

Cascade R-CNN

这一节就介绍本文提出的Cascade R-CNN,即上图中的d。

Cascaded Bounding Box Regression

回归器回归器 f ( x , b ) f(x, b) f(x,b)的任务就是将一个bounding box b= ( b x , b y , b w , b h ) (b_x,b_y,b_w,b_h) (bx,by,bw,bh)回归到ground truth g,为了实现尺度位置变换不变性,使用 Δ = ( δ x , δ y , δ w , δ h ) Δ=(\delta_x, \delta_y,\delta_w,\delta_h) Δ=(δx,δy,δw,δh)作为边框预测值,其中:
δ x = ( g x − b x ) / b w , δ y = ( g y − b y ) / b h \delta_x=(g_x -b_x)/b_w, \delta_y=(g_y-b_y)/b_h δx=(gxbx)/bw,δy=(gyby)/bh
δ w = log ⁡ ( g w / b w ) , δ h = log ⁡ ( g h / b h ) \delta_w = \log{(g_w/b_w)},\delta_h = \log{(g_h/b_h)} δw=log(gw/bw),δh=log(gh/bh)

由于在回归过程中,每次只对b作微小的调整, Δ Δ Δ 往往非常小,从而回归损失函数通常小于分类损失。为了提高回归效率,通常会对 Δ Δ Δ使用均值和方差做归一化,如让 δ x \delta_x δx δ x ′ = ( δ x − u x ) / σ x \delta_x'=(\delta_x -u_x)/\sigma_x δx=(δxux)/σx替换。

Cascade R-CNN的回归器如下:

f ( x , b ) = f T ∘ f T − 1 ∘ ⋅ ⋅ ⋅ ∘ f 1 ( x , b ) , f(x, b) = f_T ∘f_{T-1} ∘⋅⋅⋅∘ f_1(x, b), f(x,b)=fTfT1f1(x,b),T代表总的stage数量。
单一IoU阈值 u u u训练得到的回归器只对某一种分布的 Δ Δ Δ 起到最佳优化作用,而这里的多stage优化器,则能让 Δ Δ Δ 在每个stage都能得到很好优化。

在这里插入图片描述
上图是 Δ Δ Δ 经过不同stage回归器回归后的一个分布,可以看到每经过一次回归,样本都更靠近gt一些,质量也就更高一些,样本的分布也在逐渐变化。如果还是用0.5的阈值,在后面两个stage就会有较多离群点,使用共享的H也无法满足detector的输入的变化。
从上面这个图也可以看出,每个阶段cascade都有不同的IoU阈值,可以更好地去除离群点,适应新的proposal分布。

Cascaded Detection

在这里插入图片描述
如上图所示,第一阶段的RPN产生的proposal(hypothesis)分布严重倾斜向低质量的一边,这就导致学习高质量的模型很困难。
Cascade R-CNN通过一种再采用机制,将上一stage的输出结果作为输入,每经过一个stage,proposal的分布都会朝向高质量一边倾斜些,这就是使得随着stage越高,能够训练出越高质量的模型。其原因有两点:1),每阶段都有足够的正样本;2)每越深层的检测器对越高的IoU proposal有更好的优化作用,随着检测器IoU阈值不端提高,IoU较小的proposal逐渐被剥离,正如上节回归器的图所示。

损失:

每个阶段t,包括一个分类器 h t h_t ht和一个回归器 f t f_t ft,他们由IoU阈值 u t u^t ut训练得到, u t > u t − 1 u^t>u^{t-1} ut>ut1,因此对这个阈值的IoU proposal优化效果最好。
模型的学习通过优化下面损失得到:
L ( x t , g ) = L c l s ( H t ( x t ) , y t ) + λ [ y t ≥ 1 ] L l o c ( f t ( x t , b t ) , g t ) , L(x^t,g)=L_{cls}(H_t(x^t),y^t)+\lambda[y^t \ge1 ]L_{loc}(f_t(x^t,b^t),g^t), L(xt,g)=Lcls(Ht(xt),yt)+λ[yt1]Lloc(ft(xt,bt),gt),
其中 b t = f t − 1 ( x t − 1 , b t − 1 ) b^t=f_{t-1}(x^{t-1},b^{t-1}) bt=ft1(xt1,bt1).
测试时,proposal的质量也通过这样的级联流优化,从而确保了高质量的模型输入的是高质量的proposal,避免了mismatch问题,最终生成高质量的检测。

在这里插入图片描述

Experimental Results

Comparison with the state-of-the-art

在这里插入图片描述

Generalization Capacity

将级联结构应用到其他的网络上。
在这里插入图片描述

总结:

RPN提出的proposals大部分质量不高,导致没办法直接使用高阈值的detector,Cascade R-CNN使用cascade回归作为一种重采样的机制,逐stage提高proposal的IoU值,从而使得前一个stage重新采样过的proposals能够适应下一个有更高阈值的stage。

  • 每一个stage的detector都不会过拟合,都有足够满足阈值条件的样本。
  • 更深层的detector也就可以优化更大阈值的proposals。
  • 每个stage的H不相同,意味着可以适应多级的分布。
  • 在inference时,虽然最开始RPN提出的proposals质量依然不高,但在每经过一个stage后质量都会提高,从而和有更高IoU阈值的detector之间不会有很严重的mismatch。

猜你喜欢

转载自blog.csdn.net/yanghao201607030101/article/details/111273507