Cascade (Mask) RCNN 2019

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Cascade (Mask) RCNN 2019相关的知识,希望对你有一定的参考价值。

参考技术A

"close" false positives: 和正确的样本非常接近但是其实是不正确的bbox.

在以往的方法中,界定正负样本是通过卡IoU阈值来实现的。比如在Faster RCNN中的RPN,在选择正负样本时,采用如下的方法:

当卡IoU阈值为0.5时,产生的样本数量非常noisy(如下图(a)所示,很多非常小的box仅包含了背景,但是也被留下来当作了person类)

当逐渐增大阈值,bbox的质量会越来越好,但是也导致可用于训练的正样本急剧减少。

本文中定义了:

初始前提 :一个单独的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) 里面 那里,反而证明阈值越高效果还越差。这个结果有两个原因:

于是提出了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)的质量必然是更好的。
对于上述两个问题的解决:

每一个regressor 都在之前的regressor产生的bbox分布上调优,而不是在给的初始bbox上( )。这样一来,hypotheses是一层一层越来越优化的。

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的 分布

Fig3 (c) 可以看出 Iterative BBox 和本文的Cascade RCNN差不多,只是Iterative BBox在不同的stage都用了 同样的network head ,相当于在每个stage把同样的module重复使用。这样做的话其实没有解决之前说的 paradox of high-quality detection

Intergral Loss 中提出的结构( Fig3(d) ) 没有解决当IoU阈值卡高了之后正样本数量急剧减少的问题。

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是如何设置的。

fcn cascade rcnn

  1. FPN(Feature Pyramid Networks for Object Detection)

preview

特征融合

目的是把低层次高分辨率的信息和高层次强语义的信息结合起来,提高检测性能和小目标识别。

preview

https://zhuanlan.zhihu.com/p/103263215

2.双线性插值  ROI Align

解决图像下采样的时候精度损失的问题。

https://www.cnblogs.com/yssongest/p/5303151.html

https://blog.csdn.net/qq_37577735/article/details/80041586

3. Cascade RCNN

解决训练的时候使用iou阈值过滤proposals 但是推理的时候不适用iou过滤的影响

改用多个iou阈值,使得网络适应各种proposals。

https://zhuanlan.zhihu.com/p/42553957

https://blog.csdn.net/qq_39382877/article/details/97966011#Cascade%5C%20RCNN

以上是关于Cascade (Mask) RCNN 2019的主要内容,如果未能解决你的问题,请参考以下文章

Mask-RCNN : 代码使用

fcn cascade rcnn

MASK-RCNN是什么?MASK(掩膜)又是什么?

『计算机视觉』RCNN学习_其二:Mask-RCNN

检测论文综述(一) : 从RCNN到Mask-RCNN

Mask-RCNN,ValueError:无法将输入数组从形状(70)广播到形状(1)