CascadeRCNN 论文及二阶段检测网络学习总结

Cascade R-CNN:Delving into High Quality Object Detection
Cascade R-CNN:一种致力于高质量目标检测的方法
作者: Zhaowei Cai Nuno Vasconcelosi
单位: UC San Diego
发表会议及时间: CVPR 2018

研究背景

单阶段算法

一次特征提取,同时对分类和检测的loss进行计算,反向传播更新参数
image.png

双阶段算法

stage1:产生高质量的框(先验框)
stage2:对高质量的框进行微调
image.png

分析背景,提出问题

  1. 目标检测中, 需要一个交并比(IOU)阈值来定义物体正负标签
  2. 低IOU阈值如0.5, 训练的目标检测器通常会产生噪声检测, 然而随着IOU阈值的增加, 检测性能趋于下降

分析原因

  1. 训练过程中由于正样本呈指数级消失而导致的过度拟合;
  2. 检测器为最优的IOU与输入假设的IOU之间在推断时不匹配;

提出解决方案

  1. 提出了一种多级目标检测体系结构——cascade R-CNN
  2. 它由一系列、 多级探测器组成, 不同级别探测器使用的IOU阈值不同, 且逐步提高( 具体为0.5/0.6/0.7三个阈值), 以便对接近的假阳性( FP) 的bbox有好的甄别效果
  3. 多级探测器是分阶段训练的, 上一级探测器的输出是下一级探测器的输入, 可以避免过拟合
  4. 推理阶段使用同样的级联结构

实验结论

  1. 具有实现简单、 效果优异的特点, 在COCO数据集的相关测试中, 超过了所有的单模型对象检测器
  2. 在目标检测问题上, Cascade R-CNN具有广泛的适用性, 可以为不用的检测算法带来一致的检测增益

知识补充

目标检测常见评价指标

IOU

IoU=两个矩形框相交的面积/两个矩形框相并的面积
image.png

TODO IOU计算代码

AP

coco评测中的AP指标

  • coco的语境下AP便是mAP,这里的AP已经计算了所有类别下的平均值
  • 同时 coco中的AP不仅考虑了类别的PR曲线,也考虑了IOU阈值,计算方法如下:
    PR曲线上采样了100个点进行计算。而且Iou的阈值从固定的0.5调整为在0.5-0.95的区间上每隔0.5计算一次AP的值,取所有结果的平均值作为最终的结果

image.png

双阶段目标检测的演化

R-CNN

  • 预测步骤:
    • 输入测试图像
    • 利用选择性搜索SelectiveSearch算法在图像中从下到上提取2000个左右的可能包含物体的候选区域RegionProposal
    • 因为获取到的候选区域大小各不相同,所以需要将每个Region Proposal缩放(warp)成统一的227x227的大小并输入到CNN,将CNN的fc7层的输出作为特征
    • 将每个RegionProposal提取到的CNN特征输入到SVM进行分类

image.png

  • 缺点:

    • R-CNN虽然不需要穷举所有框了,但是它需要对所有ss算法选取出的候选框regionproposal(2000多个)进行CNN提取特征+SVM分类,计算量很大,导致R-CNN检测速度很慢,一张图都需要47s
  • 改进思路

    • 只进行一次卷积提取特征
    • 将region proposal在原图的位置映射到卷积层特征图上
    • 映射后的各个proposal的特征输入到全连接层做后续操

Fast R-CNN

image.png

  • 主要改进
    • 一次卷积
    • 最后一个卷积层后加了一个ROIpoolinglayer,
    • 损失函数使用了多任务损失函数(multi-taskloss),将边框回归Bounding Box Regression直接加入到CNN网络中训练。

image.png

  • 问题:
    • 依旧是利用选择性搜索SelectiveSearch算法在图像中从下到上提取2000个左右的可能包含物体的候选区域

Faster R-CNN

最大的改进点:利用RPN网络取代 选择性搜索网络

image.png

RPN 网络

  • 在特征提取网络最后一层featuremap上滑动一个3x3的窗口,每次滑窗的中心处产生9个anchor,用来生成RPN网络训练所需要的anchor样本。
  • 将上一步生成的低维向量送入两个1x1的卷积层,一个是bbox的回归层,一个是bbox的分类层(根据iou阈值,分出正负样本)
  • 滑动窗口的位置提供了物体的大体位置信息
  • 框的回归提供了框更精确的位置
Anchor
  • Anchor是为了训练RPN网络提供样本的
  • 在RPN网络的每个33的窗口中心生成一系列anchor,6040(RPN作用的卷积层大小)的卷积特征图上每个点都生成了一系列的anchor
  • 三种面积

{128128,256256,512*512}
三种长宽比例{1:1,1:2,2:1}

image.png

RPN 整体流程
  • Positive Labels

    • Anchors与GroundTruth有最高IOU重叠的anchor标为正类;
    • 与任意GroundTruth的IOU大于0.7的anchor均可标为正类;
  • Negative Labels

    • 与所有GroundTruth的IOU均小于0.3的anchor标为负类;
  • 既不是正类也不是负类的anchors,以及跨越图像边界的anchors均舍弃

  • 6000个带有标签的正负anchor,随机挑选256作为一个mini_batch(1:1),更新一次RPN权重

  • RPN训练好后,采用NMS对生成的ROI区域(准备送往ROI的区域)进行过滤(过滤至2000个左右)

ROI pooling

  • RPN网络生成的ROI区域和之前的feature maps一起作用完成ROI pooling过程
  • 根据ROI区域将feature maps中的对应区域抠出来,再resize到相应的输出尺寸

总结

  1. R-CNN网络

    • 在图像中确定约1000~2000个候选框(Selective Search)
    • 每个候选框内图像块缩放至相同大小,并输入到CNN内进行特征提取
    • 对候选框中提取出的特征,使用分类器判别是否属于一个特定类
    • 对属于某一类别的候选框,用回归器进一步调整其位置
  2. Fast R-CNN

    • 在图像中确定约1000~2000个候选框(Selective Search)
    • 将整张图片输入CNN网络得到feature map
    • 找到每个候选框在feature map上的映射patch,将此patch作为每个候选框的卷积特征输入到SPP层以及之后的层
    • 对候选框中提取出的特征,使用分类器判别是否属于一个特定类
    • 对于属于某一类别的候选框,用回归器进一步调整其位置
  3. Faster R-CNN

    • 将整张图片输入CNN网络得到feature map
    • 将卷积特征输入到RPN,得到候选框的特征信息
    • 对候选框中提取出的特征,使用分类器判别是否属于一个特定类
    • 对于属于某一类别的候选框,用回归器进一步调整其位置

当前目标检测的问题

Cascade RCNN 本质上是扩展了Faster-RCNN的两阶段体系结构,如下图3 (a)所示。第一阶段是一个Proposal子网络(“H0”),应用于整个图像,以产生初步的检测假设,称为目标推荐。在第二阶段,这些假设由ROI检测子网(“H1”)处理,表示为检测头。最终,分类得分(“C”)和边界框(“B”)被分配给每个假设框。本文主要专注于建模多级检测子网,采用但不限于RPN网络进行Proposal检测。

image.png

Bounding Box Regression

边界框b = (bx, by, bw, bh)由图像块x的四个坐标。边界框回归的任务是使用回归器f(x, b)将候选边界框b回归到目标边界框g中。这是从训练样本{gi, bi}中学习的,以便将边界框风险降至最低。
image.png

Lloc在距离矢量△=(δx、δy、δw、δh)上操作定义如下:
image.png

由于边界框回归通常对坐标b执行轻微调整,因此公式(2)的数值可能非常小。因此,公式(1)坐标回归的风险通常远小于分类风险。为了提高多任务学习的有效性,△通常由其均值和方差归一化,即δx替换为δ’x=(δx-μx)/σx。

一些论文认为,单一的回归模块不足以准确定位。因此可以考虑使用迭代f的方式精修回归框b。
image.png

这被称为迭代边界框回归,表示为iterative BBox。它可以用图3(b)的推理体系结构实现,其中所有头都是相同的。然而,这个想法忽略了两个问题。

  • 首先,如图1所示,在u=0.5处训练的回归器f对于较高IoU的假设是次优的。它实际上会降级大于0.85的IoU边界框。
    image.png
  • 其次,如图2所示,边界框的分布在每次迭代后都会发生显著变化。虽然回归器对于初始分布是最佳的,但在那之后它可能是相当次优的。
    image.png

由于这些问题,iterative BBox需要相当多的人力工程(包括 proposal accumulation、box voting等形式),并且有一些不可靠的增益。通常,两次以上的f没有任何好处。

Classification

分类器是一个函数h(x),它将图像块x分配给M+1类中的一个,其中类0包含背景和其余要检测的对象。h(x)是类上后验分布的M+1维估计,即 h k ( x ) = p ( y = k x ) h_k(x) = p(y = k|x) ,其中y是类标签。给定一个训练集(xi,yi),它是通过最小化分类风险来学习的:

image.png

其中Lcls 是类别的交叉熵损失。

Detection Quality

由于边界框通常包括对象和一定数量的背景,因此很难确定检测是正的还是负的。这通常通过IoU指标来解决。如果IoU高于阈值u,则该图像块将被视为类的正例。因此,通过如下公式表示前、背景:

image.png

其中gy是目标g的真实类标签。此IoU阈值u,我们定义其为一个检测器的质量。

目标检测的挑战性在于,无论阈值如何,检测设置都是高度对抗性的。当阈值u较高时,正例因素包含的背景较少,但要收集足够多的正例训练例子是很困难的。当阈值u较低时,能够得到一个更丰富和更多样化的正例训练集,但训练过的检测器几乎没有动机拒绝接近正确的假正例。一般来说,要求单个分类器在所有IoU级别上都表现得很好是非常困难的。在推理时,由于提案检测器产生的大多数假设(例如RPN或选择性搜索)质量较低,因此检测器必须对质量较低的假设更具鉴别力。这些相互冲突的要求之间的标准妥协是将阈值设为0.5。然而,这是一个相对较低的阈值,导致大多数人类认为是接近正确的低质量检测,如图1(a)所示。

一个简单的解决方案是开发一个分类器的集合,具有图3©的体系结构,优化了针对不同质量级别的损失,
image.png

其中U是一组IoU阈值,U = {0.5, 0.55, · · · , 0.75},旨在适应COCO挑战的评估指标。根据定义,分类器需要在推理时集成。此解决方案未能解决上面公式6中不同损失在不同数量的正例上运行的问题。如图4的第一幅图所示,正样本集随着u迅速减少。这尤其有问题,因为高质量的分类器容易过拟合。此外,这些高质量的分类器需要在推理时处理质量极低的提案,而这些提案没有得到优化。由于所有这些,公式(6)的组合在大多数质量级别上都无法实现更高的精度,而且体系结构比图3 (a)的增益很小。

image.png

Cascade R-CNN的提出

Cascade R-CNN

(完)