论文名称:Cascade R-CNN: Delving into High Quality Object Detection
作者 Zhaowei Cai Nuno Vasconcelos
论文链接 https://arxiv.org/abs/1712.00726
代码链接 https://github.com/zhaoweicai/cascade-rcnn
简要概述文章精华本篇文章主要解决了在目标检测中 检测框不是特别准 容易出现噪声干扰的问题 即close false positive 为什么会有这个问题呢 作者实验发现 因为在基于anchor的检测方法中 我们一般会设置训练的正负样本 用于训练分类以及对正样本进行坐标回归 选取正负样本的方式主要利用候选框与ground truth的IOU占比 常用的比例是50% 即IOU 0.5的作为正样本 IOU 0.3作为负样本等 但是这样就带来了一个问题 阈值取0.5是最好的吗 作者通过实验发现 1、设置不同阈值 阈值越高 其网络对准确度较高的候选框的作用效果越好。2、不论阈值设置多少 训练后的网络对输入的proposal都有一定的优化作用。基于这两点 作者设计了Cascade R-CNN网络 如下面图Figure3(d)所示 即通过级联的R-CNN网络 每个级联的R-CNN设置不同的IOU阈值 这样每个网络输出的准确度提升一点 用作下一个更高精度的网络的输入 逐步将网络输出的准确度进一步提高。
一句话总结就是 Cascade R-CNN就是使用不同的IOU阈值 训练了多个级联的检测器。
读了文章精华 我想你已经知道这个网络时做什么的 如果感兴趣 那么接着读下面的详细解析吧~~
文章详细解析目标检测其实主要干的就是两件事 一是对目标分类 二是标出目标位置。所以 了解Faster R-CNN或者SSD的同学可能都比较清楚 为了实现这两个目标 在训练的时候 我们一般会首先提取候选proposal 然后对proposal进行分类 并且将proposal回归到与其对应的groud truth上面 但是这就带来了一个问题 因为我们做分类需要确定样本的标签 那么我们给什么样的proposal打一个标签呢 最常用的做法是利用IOU proposal与ground truth的交并比 可是IOU阈值设置成多少可以作为我打标签的边界呢 常用的阈值是0.5 可是0.5是最好的吗 作者通过实验证实了不同IOU对于网络的影响 如图Figure 1 ©所示。图c中3条线分别代表3个IOU的阈值 横轴是输入的IOU的proposal 纵轴是对应的proposal经过网络输出后的坐标框与ground truth的IOU 我们观察可以发现 3条线 都在灰色对角线之上 说明3条线都有一定的优化效果 并且 3条线无一例外在自己设定的阈值周围优化较明显。
那么问题来了 我们是否可以将阈值提高 以达到优化输出精度的效果呢
作者又做了不同阈值下网络精度的实验 结果如图figure1(d)所示 可以发现 对于阈值为0.5以及0.6的时候 网络精度差距不大 甚至提升了一点 但是将精度提升到0.7后 网络的精度就急速下降了 (COCO数据集上 AP 0.354- 0.319) 这个实验说明了 仅仅提高IoU的阈值是不行的 因为提高阈值以后 我们会发现 实际上网络的精度 AP 反而降低了。
为什么会下降呢
由于提高了阈值 导致正样本的数量呈指数减低 导致了训练的过拟合。在inference阶段 输入的IOU与训练的IOU不匹配也会导致精度的下降。所以才会出现Figure1(d)中 u 0.7的曲线在IOU 0.5左右的时候 差距那么大。实验证明了不能使用高的阈值来进行训练 但是实验也呈现出了另一个事实 那便是 回归器的输出IOU一般会好于输入的IOU 图figure1 c 所示。并且随着u的增大 对于在其阈值之上的proposal的优化效果还是有提升的。
那既然这样 我们是否可以采用级联的方式逐步提升呢 即首先利用u 0.5的网络 将输入的proposal的提升一些 假如提升到了0.6 然后在用u 0.6的网络进一步提升 加入提升到0.7 然后再用u 0.7的网络再提升 这样岂不是精度越来越高了
于是乎 作者设计了Cascade R-CNN网络。
图figure 3 d 是Cascade R-CNN的网络结构对比图 Figure 3 a 是Faster R-CNN的网络结构图 其中H0代表的是RPN网络 H1代表的是Faster R-CNN进行检测与分类的head C1代表最终的分类结果 B1代表最终的bounding box回归结果。那么Cascade R-CNN有什么不同呢 H1那一部分是一样的 但是Cascade R-CNN得到B1回归后的检测框后 将其输入到H2部分 继续回归 以此类推到H3部分 使得每次对bounding box都提高一定的精度 已达到提高检测框准确度的作用。
注 级联的方式 不再是为了找到hard negatives 而是通过调整bounding boxes 给下一阶段找到一个IoU更高的正样本来训练。SSD等利用hard negatives方法进行优化。即对负样本loss排序 取loss较大的部分
在作者Cascade R-CNN之前 其实也有人研究了基于Cascade的方法进行坐标框的优化 如图figure3 b 所示 这种方法叫做iterative bounding box regression 不过该方法中所有的head都是相同的 用公式表示就是如下
这会导致了如下问题
我们采用IOU 0.5来训练网络 如图Figure1 ©所示,其对IOU更高的图像效果提升有限。在每次迭代后 bounding box的分布实际上发生了一定的改变 而分类器是基于最开始的bounding box来训练的 这样会产生较多的outlier point 如下图所示 红的代表溢出点Cascade RCNN的结构图如图Figure3 d 所示 公式表示就是这样的
iterative bounding box regression是对回归框进行后处理 即生成了之后在多次处理 而Cascade RCNN是在训练的时候就进行重新采样 训练的时候不同的stage的输入数据分布已经是不同的了。这就在一定程度上解决了iterative bounding box regression出现的数据分布变化的问题。高手解决问题 往往就是很简单的一个改动 却产生了重要的意义。
图Figure 4代表了Cascade R-CNN不同stage的输入数据的IOU分布。
网络的默认设置共有4个stage,第一个stage产生RPN 另外三个stage分别设置IOU阈值为[0.5,0.6,0.7] baseline的选择 Faster R-CNN作者默认选择VGG网络 R-FCN以及FPN作者默认选择ResNet作为backbone 使用的是默认参数。
具体的网络训练的默认参数论文中有提及 这里不详述了 感兴趣的读者可以自行查看论文 实验部分的介绍。
损失函数关于损失函数 跟Faster R-CNN基本一致 没有什么变化。分类采用softmax 回归采用smooth L1 loss 并且为了防止由于bounding box的大小以及位置带来的回归尺度的影响 我们一般会对box的坐标进行归一化操作 即
图Figure5 a 中 3条实线分别对应3个IOU阈值下训练的模型的AP 注意这里是单独训练的 不是采用级联的方式训练的 如图可以发现 当u 0.6是时候 在IOU比较低的时候 其表现是没有u 0.5好的 但是在IOU比较高的时候 表现比0.5好了一些 而对比u 0.7会发现 其效果基本都在u 0.6以下 只有在IOU 0.8的时候 表现略微超过了u 0.5.该实验说明了 设置不同阈值对于网络的影响。
进一步的 作者又进行了实验 作者将ground truth加入到了Proposal中间 测试结果如图Figure5(b)所示 实验结果显示 网络的表现随着u提升而提升 为什么会这样呢
说明 u 0.7的时候 需要你保证proposal的质量 即其输入的proposal的准确度要高一点 另外 u 0.7确实可以做到比u 0.5要好 只是需要你保证你proposal的准确度就行。
Cascade RCNN的作用不就是这样吗 那是不是如我们猜想的一样呢 图Figure5 a 给出了答案 其中虚线代表的是cascade结构的精度 可以发现 精度确实提升了 虽然没有在IOU较低的部分超过u 0.5,但是整体上是提升了的 说明cascade的提升还是有效果的。
图Figure 6 向我们展示了不同stage下不同阈值的表现 可以发现 stage1的时候u 0.7的detector表现不是很好 但是当stage 3的时候 u 0.7的表现就非常好了。并且细心的同学可能发现 图6的精度比图5的精度要高 这是为什么呢 因为图6是采用cascade方法训练得到了 而图5只是设置了不同的IOU阈值作为正样本来训练 并没有采用cascade方法 这里也侧面说明了cascade方法的有效性。
另外作者对比了Iterative BBox以及Intrgral Loss的精度 如下表。
下表展示了不同stage的表现 其中1,2,3分别代表单个stage的表现 1 ~ 2代表了级联1和2的表现 1 ~ 3代表了级联1-3的表现 可以发现AP呈递增趋势 效果也是越来越好 符合预期。
下表展示了是否每个stage都需要提升IOU的阈值呢 带有向上箭头的那行表示IOU的阈值会提升 不带的表示不提升 实验结果表明提升的效果还是比较明显的 stat代表的是是否采用回归统计 这个回归统计是什么东西我也还没搞明白 知道的可以跟我说一下。。。
最后一个实验 作者对stage的数量进行了分析 如下图所示 作者发现stage为3的时候效果最好 继续增加效果反而下降了。
下图是cascade与目前stage of the art 网络的对比情况,其中Table 6还有训练时间等信息
可以发现使用cascade结构对于精度的提升确实是有帮助的 不过时间也会稍稍增加一些。
本篇论文最大的贡献在于 提出了Cascade R-CNN的方法 同时向我们介绍了不同阈值下对于proposal的回归作用 虽然Cascade R-CNN方法可能没有什么特别的 但是能探究出背后的逻辑 设计出这个方法 还是很厉害的。
本文链接: http://cascade.immuno-online.com/view-689644.html