Cascade R-CNN CVPR2018
论文链接: https://arxiv.org/abs/1712.00726
在目标检测中,通常使用IoU的值来确定正负样本,如果使用低的IoU值,会产生noisy detection,如果使用高的IoU值,会有两个问题:
所以,训练阶段和推理阶段,bbox回归器的输入分布是不一样的,训练阶段的输入proposals质量更高(被采样过,IoU>threshold),推理阶段的输入proposals质量相对较差(没有被采样过,可能包括很多 I o U < t h r e s h o l d IoU
对于R-CNN网络框架的检测器,提出一个串级的检测头,提供不同的阈值。即每一个检测头对应一个IoU阈值,然后输出对应的Bounding boxes之后,输入到下一个检测头。
先来看一下具体的网络结构:
上图的第一种就是正常的Faster R-CNN结构。通过RPN输出的B0输入到后面的Pooling层后,经过一个特定的IoU之后,区分正负样本进行训练。 对于第二个,使用同样的检测头,串级相连。第三个是对不同的IoU进行分类检测,bounding box预测只有一个头在进行。而最后一个,本文所提出的Cascade R-CNN:
f ( x , b ) = f T ∘ f T − 1 ∘ . . . ∘ f 1 ( x , b ) f(x, b) = f_T \circ f_{T-1} \circ ... \circ f_1(x,b) f(x,b)=fT∘fT−1∘...∘f1(x,b)
其中 T T T是cascade stage的个数。每一个回归器 f t f_t ft 是对应于样本分布 { b t } \{b^t\} {bt},而不是最初的 { b 1 } \{b^1\} {b1}。每一个检测头,都有不同的IoU阈值,输出的Proposals质量越高。
相比较于iterative BBox结构, 有以下区别:
即使在检测器质量(IoU阈值)增加的情况下,也可以将positive samples集合保持在大致恒定的大小。在每个重采样步骤后,分布更倾向于高质量示例。随之而来的是两个结果。首先,没有过度拟合,因为在各个层面都有大量的例子。其次,针对更高的IoU阈值,对较深阶段的检测器进行了优化。
对于每个阶段 t t t, R-CNN 包括了一个classifier h t h_t ht和regressor f t f_t ft,用IoU 阈值 u t u^t ut进行优化,其中 u t > u t − 1 u^t \gt u^{t-1} ut>ut−1。整体的loss function为:
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 ) L(x^t, g) = L_{cls}(h_t(x^t), y^t) +\lambda[y^t \geq 1]L_{loc}(f_t(x^t, b^t), g) L(xt,g)=Lcls(ht(xt),yt)+λ[yt≥1]Lloc(ft(xt,bt),g)
其中,
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)
g是对于 x t , λ = 1 x^t, \lambda=1 xt,λ=1的ground-truth。 [ ⋅ ] [\cdot] [⋅]表示indicator function。 y t y^t yt是给定一个IoU阈值 u t u^t ut中 x t x^t xt的label。
这保证了一系列经过有效训练的检测器的质量不断提高。在推理时,通过应用相同的级联程序,假设的质量依次得到改善,并且只需要更高质量的检测器对更高质量的假设进行操作。
性能表现:
这一部分总结来自于参考[1]
RPN提出的proposals大部分质量不高,导致没办法直接使用高阈值的detector,Cascade R-CNN使用cascade回归作为一种重采样的机制,逐stage提高proposal的IoU值,从而使得前一个stage重新采样过的proposals能够适应下一个有更高阈值的stage。