4000-520-616
欢迎来到免疫在线!(蚂蚁淘生物旗下平台)  请登录 |  免费注册 |  询价篮
主营:原厂直采,平行进口,授权代理(蚂蚁淘为您服务)
咨询热线电话
4000-520-616
当前位置: 首页 > 新闻动态 >
新闻详情
一文带你读懂Cascade R-CNN,一个使你的检测更加准确的..._CSDN博客
来自 : CSDN技术社区 发布时间:2021-03-24

论文名称: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的精度 如下表。

\"\"

对Cascade R-CNN网络的进一步探索实验 实验一 stage-wise的比较

下表展示了不同stage的表现 其中1,2,3分别代表单个stage的表现 1 ~ 2代表了级联1和2的表现 1 ~ 3代表了级联1-3的表现 可以发现AP呈递增趋势 效果也是越来越好 符合预期。

\"\"

实验二 提升阈值的作用

下表展示了是否每个stage都需要提升IOU的阈值呢 带有向上箭头的那行表示IOU的阈值会提升 不带的表示不提升 实验结果表明提升的效果还是比较明显的 stat代表的是是否采用回归统计 这个回归统计是什么东西我也还没搞明白 知道的可以跟我说一下。。。

\"\"

实验三 多少个stage是最合适的呢

最后一个实验 作者对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

发布于 : 2021-03-24 阅读(0)