Cascade R-CNN 笔记

前言
1.本文重点是Cascade R-CNN的级联方式以及为何有效,尽量用较少篇幅表达清楚论文算法,其他一些不影响理解算法的东西不做赘述
2.博客主要是学习记录,为了更好理解和方便以后查看,当然如果能为别人提供帮助就更好了,如果有不对的地方请指正(论文中的链接是我经过大量搜索,个人认为讲解最清楚的参考)

论文链接
代码链接
论文翻译

创新点
用不同阈值的正负样本训练检测器并级联,提出Cascade R-CNN

问题引出
目标检测的正负样本划分是通过阈值(anchor与gt的iou)来界定的,阈值小训练的检测器不精确,阈值大正样本就少又导致网络容易过拟合,效果也不好,就像下图(d)所示,一般算法阈值都设为0.5,下图中(a)和(b)就是阈值分别为0.5和0.7时的检测效果
Cascade R-CNN 笔记_第1张图片
图中©表示检测器的坐标回归的性能,横坐标是输入框(理解为anchor,roi,proposal都行)与gt的iou,纵坐标是输出框(就是经过检测器回归的)与gt的iou,蓝、绿、红三条线分别表示阈值0.5、0.6、0.7,从图(c)中可以看出两个现象:
(1)不管阈值设为多少,三条线都呈现上升趋势,这说明检测器对框的坐标进行了回归,使之更准确,也就是与gt的iou更大
(2)三条线都在各自范围内效果最好,如红色线在输入阈值0.7之后,输出阈值才变为最大

根据这两个现象可以尝试,级联三个检测器,阈值分别为0.5、0.6、0.7,这样一来,假设一开始正负样本阈值为0.5,当候选框经过第一个检测器回归之后的iou变大了一点,假设变成0.6,这时候再经过第二个检测器进行坐标回归,此时样本的阈值正好适应第二个检测器阈值范围,经过回归之后再进入第三个检测器,这就实现了迭代来不断提升检测效果,这就是Cascade R-CNN的大致思路

Cascade R-CNN
1.首先简单说一下几种网络结构
Cascade R-CNN 笔记_第2张图片

(a)是Faster R-CNN框架, B 0 B_0 B0是RPN输出的经过初步回归的候选框, B 1 B_1 B1 C 1 C_1 C1是最终的坐标和类别
(b)是在Cascade R-CNN之前有人尝试的迭代回归坐标,用前一次的输出框作为下一次的候选框,但是它每次迭代都是相同阈值,也就是用相同的检测器迭代,我们知道当经过第一个检测器后,候选框的坐标已经更接近gt,也就是样本分布已经发生变化,这样继续迭代肯定效果不理想
(c)可以认为并联几个检测器来回归候选框,这几个检测器是不相关的
(d)就是Cascade R-CNN的思路,跟(b)类似,也是级联,迭代回归候选框坐标,区别是每个检测器阈值不同,上面分析过了,这样会更进一步精细候选框坐标

2.Cascade R-CNN 为何可行
Cascade R-CNN 笔记_第3张图片
每经过一个检测器进行坐标回归,候选框越准确,也就是候选框与gt的iou越大,从图中可以看出,经过检测器之后iou大的样本增加,这就说明Cascade R-CNN 这种级联方式可行,因为它不会因为后面的检测器提高阈值而发生正样本过少导致过拟合

其他
Cascade R-CNN基于Faster R-CNN,也是分阶段训练,训练和损失函数什么的都差不多

你可能感兴趣的:(Cascade R-CNN 笔记)