目录
论文相关信息
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是不行的,原因就是开头提到的那两点。
- u u u过高导致训练时正样本过少,从而模型过拟合。
-
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=(gx−bx)/bw,δy=(gy−by)/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′=(δx−ux)/σ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)=fT∘fT−1∘⋅⋅⋅∘f1(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>ut−1,因此对这个阈值的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)+λ[yt≥1]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=ft−1(xt−1,bt−1).
测试时,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。