Introduction
"close" false positives: 和正确的样本非常接近但是其实是不正确的bbox.
在以往的方法中,界定正负样本是通过卡IoU阈值来实现的。比如在Faster RCNN中的RPN,在选择正负样本时,采用如下的方法:
- Anchor和任意的GT-box有大于0.7的IoU --> Positive
- Anchor和所有的GT-box都小于0.3的IoU --> Negative
(剩下的anchors则被抛弃不参与训练)
当卡IoU阈值为0.5时,产生的样本数量非常noisy(如下图(a)所示,很多非常小的box仅包含了背景,但是也被留下来当作了person类)
当逐渐增大阈值,bbox的质量会越来越好,但是也导致可用于训练的正样本急剧减少。
本文中定义了:
- quality of detection hypotheses : 某个detection和GT的IoU.
- quality of detector: 用于训练这个detector使用的IoU threshold .
初始前提:一个单独的detector只能在某个特定的“quality of detector”下达到optimal. (也就是一个detector只能对应一个最佳的IoU threshold)
下面作者用了三个实验来验证上面这个前提:
图(a)是bbox regression的表现。三个设置了不同IoU阈值的regressor,分别在它们threshold附近的IoU表现得最好,比如:的蓝色曲线,在横轴0.5左右的地方表现就比其他两条曲线高。图(c)也有相同的效果。这就表明了,一个在单个IoU阈值下训练好的detector,对于IoU阈值下的表现就不是最佳的了。
图(b)中显示的peak也能说明类似的结论。总的来说,IoU阈值确定了分类的boundary——分类器在什么boundary下是表现最好的。
这些实验观察说明,单单去提高IoU阈值来产生质量更高的proposals以训练网络是不能一定得到更好的效果的,图(c)里面那里,反而证明阈值越高效果还越差。这个结果有两个原因:
- IoU阈值越高,产生的正负样本数量越不均匀。(正样本数量急剧下降)--> 模型容易overfit
- quality of the detector 和 quality of the detection hypotheses之间的Mismatch. 高质量detector需要高质量的detection hypotheses才能发挥作用,而inference的时候,你无法保证产生的proposals都是高质量的。
Solution
于是提出了Cascade RCNN这么一种multi-stage的方式:
The Cascade of RCNN stages is trained sequentially, using the output of one stage to train the next.
因为input proposals和GT的IoU,经过了regressor之后,output和GT的IoU分数一定会更好(不然你的regressor就是白瞎了不是)。这也就是说,对于卡了低IoU阈值的detector,它输出出来的bbox如果作为下一个“高IoU阈值detector”的输入proposals,那个这个proposals(hypotheses)的质量必然是更好的。
对于上述两个问题的解决:
- 因为这个resampling operation,之前stage的低IoU的proposals不会被一刀切,而是传递到了下面几个stages,保证了充足数量的正样本。
- 在Inference的时候,这种串联结构同样可以保证生产的hypotheses传递到下面的stages质量是越来越好的。
Architecture
Cascaded Bounding Box Regression
每一个regressor 都在之前的regressor产生的bbox分布上调优,而不是在给的初始bbox上()。这样一来,hypotheses是一层一层越来越优化的。
Cascaded Detection
RPN最开始产生出来的那些hypotheses分布中,low quality的占了大部分。在时候,只有2.9%的examples是正样本。这样就很难去训练一个高质量下的detector(之前提到了:low quality hypotheses只能训练low quality detector; high quality hypotheses只能训练high quality detector)。在Cascade RCNN中,用了cascade regression来作为一种重采样策略(resampling method)。因为上一层low quality的bbox经过了上一层的regressor之后精细化了,到了下一层就变成了high quality的bbox,即使下一层卡IoU阈值卡得高一点,这些bbox也不会被过滤掉。文中说这样可以让每一个stage的正样本数几乎保持一个常量。这样做相当于改变了bbox hypotheses的分布。
Differences from Previous Works
从 Fig3 (c) 可以看出Iterative BBox和本文的Cascade RCNN差不多,只是Iterative BBox在不同的stage都用了同样的network head,相当于在每个stage把同样的module重复使用。这样做的话其实没有解决之前说的 paradox of high-quality detection。
而Intergral Loss中提出的结构(Fig3(d)) 没有解决当IoU阈值卡高了之后正样本数量急剧减少的问题。
Instance Segmentation
Cascade Mask R-CNN
Mask R-CNN中,新加入的segmentation branch是和detection branch平行加入的。在Cascade的结构中,加入这样一个新的branch就有如下两个问题:
(1) 加在哪里? (2) 加多少?
文中给出了三个方案如上图Fig 6:(b) (c)两个方案主要是解决第一个问题,且只考虑加一个segmentation branch。
用来训练segmentation branch的instances是来自于detection branch的正样本。把segmentation head放到cascade的更后面可以得到更多的样本,但是由于分割是一个pixel-wise的操作,有很多重叠的instances其实也不是一件好事。
(d) 第三种方案在每个stage都加了一个分割头,这样最大化了sample的多样性。
在inference的时候所有的strategies都在最后的stage输出来的patches上面进行分割,不管训练的时候segmentation head是如何设置的。