Cascade R-CNN:Delving into High Quality Object Detection
Cascade R-CNN:一种致力于高质量目标检测的方法
作者: Zhaowei Cai Nuno Vasconcelosi
单位: UC San Diego
发表会议及时间: CVPR 2018
研究背景
单阶段算法
一次特征提取,同时对分类和检测的loss进行计算,反向传播更新参数
双阶段算法
stage1:产生高质量的框(先验框)
stage2:对高质量的框进行微调
分析背景,提出问题
- 目标检测中, 需要一个交并比(IOU)阈值来定义物体正负标签
- 低IOU阈值如0.5, 训练的目标检测器通常会产生噪声检测, 然而随着IOU阈值的增加, 检测性能趋于下降
分析原因
- 训练过程中由于正样本呈指数级消失而导致的过度拟合;
- 检测器为最优的IOU与输入假设的IOU之间在推断时不匹配;
提出解决方案
- 提出了一种多级目标检测体系结构——cascade R-CNN
- 它由一系列、 多级探测器组成, 不同级别探测器使用的IOU阈值不同, 且逐步提高( 具体为0.5/0.6/0.7三个阈值), 以便对接近的假阳性( FP) 的bbox有好的甄别效果
- 多级探测器是分阶段训练的, 上一级探测器的输出是下一级探测器的输入, 可以避免过拟合
- 推理阶段使用同样的级联结构
实验结论
- 具有实现简单、 效果优异的特点, 在COCO数据集的相关测试中, 超过了所有的单模型对象检测器
- 在目标检测问题上, Cascade R-CNN具有广泛的适用性, 可以为不用的检测算法带来一致的检测增益
知识补充
目标检测常见评价指标
IOU
IoU=两个矩形框相交的面积/两个矩形框相并的面积
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的值,取所有结果的平均值作为最终的结果
双阶段目标检测的演化
R-CNN
- 预测步骤:
- 输入测试图像
- 利用选择性搜索SelectiveSearch算法在图像中从下到上提取2000个左右的可能包含物体的候选区域RegionProposal
- 因为获取到的候选区域大小各不相同,所以需要将每个Region Proposal缩放(warp)成统一的227x227的大小并输入到CNN,将CNN的fc7层的输出作为特征
- 将每个RegionProposal提取到的CNN特征输入到SVM进行分类
-
缺点:
- R-CNN虽然不需要穷举所有框了,但是它需要对所有ss算法选取出的候选框regionproposal(2000多个)进行CNN提取特征+SVM分类,计算量很大,导致R-CNN检测速度很慢,一张图都需要47s
-
改进思路
- 只进行一次卷积提取特征
- 将region proposal在原图的位置映射到卷积层特征图上
- 映射后的各个proposal的特征输入到全连接层做后续操
Fast R-CNN
- 主要改进
- 一次卷积
- 最后一个卷积层后加了一个ROIpoolinglayer,
- 损失函数使用了多任务损失函数(multi-taskloss),将边框回归Bounding Box Regression直接加入到CNN网络中训练。
- 问题:
- 依旧是利用选择性搜索SelectiveSearch算法在图像中从下到上提取2000个左右的可能包含物体的候选区域
Faster R-CNN
最大的改进点:利用RPN网络取代 选择性搜索网络
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}
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到相应的输出尺寸
总结
-
R-CNN网络
- 在图像中确定约1000~2000个候选框(Selective Search)
- 每个候选框内图像块缩放至相同大小,并输入到CNN内进行特征提取
- 对候选框中提取出的特征,使用分类器判别是否属于一个特定类
- 对属于某一类别的候选框,用回归器进一步调整其位置
-
Fast R-CNN
- 在图像中确定约1000~2000个候选框(Selective Search)
- 将整张图片输入CNN网络得到feature map
- 找到每个候选框在feature map上的映射patch,将此patch作为每个候选框的卷积特征输入到SPP层以及之后的层
- 对候选框中提取出的特征,使用分类器判别是否属于一个特定类
- 对于属于某一类别的候选框,用回归器进一步调整其位置
-
Faster R-CNN
- 将整张图片输入CNN网络得到feature map
- 将卷积特征输入到RPN,得到候选框的特征信息
- 对候选框中提取出的特征,使用分类器判别是否属于一个特定类
- 对于属于某一类别的候选框,用回归器进一步调整其位置
当前目标检测的问题
Cascade RCNN 本质上是扩展了Faster-RCNN的两阶段体系结构,如下图3 (a)所示。第一阶段是一个Proposal子网络(“H0”),应用于整个图像,以产生初步的检测假设,称为目标推荐。在第二阶段,这些假设由ROI检测子网(“H1”)处理,表示为检测头。最终,分类得分(“C”)和边界框(“B”)被分配给每个假设框。本文主要专注于建模多级检测子网,采用但不限于RPN网络进行Proposal检测。
Bounding Box Regression
边界框b = (bx, by, bw, bh)由图像块x的四个坐标。边界框回归的任务是使用回归器f(x, b)将候选边界框b回归到目标边界框g中。这是从训练样本{gi, bi}中学习的,以便将边界框风险降至最低。
Lloc在距离矢量△=(δx、δy、δw、δh)上操作定义如下:
由于边界框回归通常对坐标b执行轻微调整,因此公式(2)的数值可能非常小。因此,公式(1)坐标回归的风险通常远小于分类风险。为了提高多任务学习的有效性,△通常由其均值和方差归一化,即δx替换为δ’x=(δx-μx)/σx。
一些论文认为,单一的回归模块不足以准确定位。因此可以考虑使用迭代f的方式精修回归框b。
这被称为迭代边界框回归,表示为iterative BBox
。它可以用图3(b)的推理体系结构实现,其中所有头都是相同的。然而,这个想法忽略了两个问题。
- 首先,如图1所示,在u=0.5处训练的回归器f对于较高IoU的假设是次优的。它实际上会降级大于0.85的IoU边界框。
- 其次,如图2所示,边界框的分布在每次迭代后都会发生显著变化。虽然回归器对于初始分布是最佳的,但在那之后它可能是相当次优的。
由于这些问题,iterative BBox
需要相当多的人力工程(包括 proposal accumulation、box voting等形式),并且有一些不可靠的增益。通常,两次以上的f没有任何好处。
Classification
分类器是一个函数h(x),它将图像块x分配给M+1类中的一个,其中类0包含背景和其余要检测的对象。h(x)是类上后验分布的M+1维估计,即 ,其中y是类标签。给定一个训练集(xi,yi),它是通过最小化分类风险来学习的:
其中Lcls 是类别的交叉熵损失。
Detection Quality
由于边界框通常包括对象和一定数量的背景,因此很难确定检测是正的还是负的。这通常通过IoU指标来解决。如果IoU高于阈值u,则该图像块将被视为类的正例。因此,通过如下公式表示前、背景:
其中gy是目标g的真实类标签。此IoU阈值u,我们定义其为一个检测器的质量。
目标检测的挑战性在于,无论阈值如何,检测设置都是高度对抗性的。当阈值u较高时,正例因素包含的背景较少,但要收集足够多的正例训练例子是很困难的。当阈值u较低时,能够得到一个更丰富和更多样化的正例训练集,但训练过的检测器几乎没有动机拒绝接近正确的假正例。一般来说,要求单个分类器在所有IoU级别上都表现得很好是非常困难的。在推理时,由于提案检测器产生的大多数假设(例如RPN或选择性搜索)质量较低,因此检测器必须对质量较低的假设更具鉴别力。这些相互冲突的要求之间的标准妥协是将阈值设为0.5
。然而,这是一个相对较低的阈值,导致大多数人类认为是接近正确的低质量检测,如图1(a)所示。
一个简单的解决方案是开发一个分类器的集合,具有图3©的体系结构,优化了针对不同质量级别的损失,
其中U是一组IoU阈值,U = {0.5, 0.55, · · · , 0.75},旨在适应COCO挑战的评估指标。根据定义,分类器需要在推理时集成。此解决方案未能解决上面公式6中不同损失在不同数量的正例上运行的问题。如图4的第一幅图所示,正样本集随着u迅速减少。这尤其有问题,因为高质量的分类器容易过拟合。此外,这些高质量的分类器需要在推理时处理质量极低的提案,而这些提案没有得到优化。由于所有这些,公式(6)的组合在大多数质量级别上都无法实现更高的精度,而且体系结构比图3 (a)的增益很小。