Cascade R-CNN 论文理解

paper:Cascade R-CNN: Delving into High Quality Object Detection
link:Cascade R-CNN paper
code:https://github.com/zhaoweicai/cascade-rcnn

摘要

  • 在目标检测中IOU(intersection over union)阈值用来判断候选框是positive还是negative,IOU阈值的提高会降低检测性能:
    • 正样本数量的急剧减少,会导致训练过程过拟合;
    • train和inference两个阶段的IOU阈值不同会导致mismatch;
  • 提出Cascade R-CNN,由一系列在IOU逐渐增加的情况下训练得到的检测器组成训练过程逐步进行,上一阶段检测器的输出能提供使下阶段训练出更高质量检测器的良好数据分布;

引言

  • 检测器需要同时解决识别和检测问题,需要面对大量的close false positives,与此同时需要找出true positive
Cascade R-CNN 论文理解_第1张图片
  • 对比图(a)和(b)发现当IOU阈值较低时有更多的误检;图©的横坐标表示输入的proposal和GT的IOU值,纵坐标表示经过regression后bbox和GT的IOU值,从图中可以发现在输入IOU在 [ 0.5 , 0.6 ] [0.5,0.6] [0.5,0.6]区间内 u = 0.5 u=0.5 u=0.5的performance最好,在 [ 0.6 , 0.75 ] [0.6,0.75] [0.6,0.75]区间内 u = 0.6 u=0.6 u=0.6的performance最好,在 [ 0.75 , 0.95 ] [0.75,0.95] [0.75,0.95]区间内 u = 0.7 u=0.7 u=0.7的performance最好;结论是:在不同IOU阈值情况下样本的分布不一样,导致同一阈值不能cover到所有样本,即proposal的IOU阈值和检测器训练阈值接近时检测器的性能才最好(避免mismatch的问题);
  • 为了训练高质量的检测器,直接在训练过程中提升IOU阈值是不可行的如图(b)所示,当IOU阈值提高到0.6时AP有提升但是提高到0.7时AP就会明显降低;原因:在训练阶段IOU阈值提升时,训练过程的正样本数量急剧减少,正负样本数据更加不平衡,使得训练过程更容易产生过拟合;
  • Cascade R-CNN的提出:既要保证proposal的同时又要保证正样本的数量,从图©的baseline可以看出,proposal在经过检测器后和GT的IOU会增加,因此如果proposal再经过用更高IOU阈值训练的检测器那么输出结果的IOU会更高;由此针对Cascade R-CNN提出一个新的训练思路:使用前一个stage的输出去训练下一个stage的检测器,每经过一个检测器proposal的IOU都会提高,那么即使下一阶段的检测器在训练的时候阈值设置提高也能保证正样本的数量避免过拟合

相关工作

  • 列举了当前一些目标检测器并分析其特点:
    • two stage:R-CNN、SPP-Net、Fast-RCNN、Faster-RCNN,还有在此基础上衍生的R-FCN等,已经加上了多尺度检测特性的FPN、MS-CNN结构;
    • one stage:yolo、SSD等缺点在于精度不及two stage的检测器,RetinaNet的提出缓解了正负样本不平衡问题在精度上甚至优于two stage的检测器;
    • multi stage:之前也有相关成果CRAFT、AttractioNet(和Fast-RCNN连接) ,将经典的级联结构嵌入目标检测网络中;

目标检测

Cascade R-CNN 论文理解_第2张图片

本文Cascade R-CNN的思路主要是在Faster R-CNN图(a)的基础上进行拓展,加入一个多阶段检测子网络对RPN产生的proposal进行逐步的refine;

bbox回归

Cascade R-CNN 论文理解_第3张图片
  • L l o c L_{loc} Lloc采用的是Faster RCNN中的Smooth L1 loss,其中bbox的encode和decode过程在这里我就不复述了(和其他检测框架的解析过程相同);
  • 图(b)表示所有HEAD network都相同的iterative bbox操作,每阶段的IOU阈值都相同,使得IOU在后面阶段很难提升,有两方面的问题:
    • 图一中的结论:单一的0.5IOU阈值无法cover所有IOU范围的proposal;
    • 每阶段的检测器会改变样本IOU的分布,使用相同的IOU阈值不合适;图二两行图示分别表示bbox(x,y,w,h)的偏移量和偏差量,每经过一个阶段的refine数据的分布改变很大,噪声数据的IOU也会增大图中红点表示提高IOU阈值后移除的噪声,refine过程可以理解为样本的重采样,在提高IOU阈值的情况下保证样本的质量

分类

  • L c l s L_{cls} Lcls采用的是经典的cross-entropy损失函数;

检测质量

  • 在目标检测中很难确定一个目标是正样本还是负样本,通常由IOU阈值来定义目标的类别属性,因此IOU阈值作为定义检测器质量的重要指标;
  • IOU的设置和检测性能是矛盾对立的:阈值设定过高,训练阶段没有足够的正样本;阈值设定过低会导致检测器很难鉴别close false positive,出现严重的误检情况;总体来说单个分类器很难再多IOU level上有好的表现,由于RPN、selective search等proposal检测器生成的proposal质量较低因此需要检测器对低质量的proposal具有更强的鉴别能力;目前大多数训练阶段IOU设定标准是0.5,但是这个阈值还是偏低了导致检测质量降低从而导致产生误检;
Cascade R-CNN 论文理解_第4张图片
  • 图3©算法方案为此使用了integral loss,使用不同的IOU阈值来对bbox进行分类然后融合分类结果进行类别的鉴定,但是没有对bbox回归使用级联结构;这种方案没有解决不同loss所作用的正样本数量不同的问题(这里解释有点绕口吧…其实就是老问题IOU越高正样本越少),图4(a)可以看出随着IOU的提升正样本数量迅速减少,and高质量的分类器更容易overfitting…;虽然IOU提高了,分类器依然要处理大量低质量的proposal没有得到优化,因此本质上检测精度没有得到什么提升;

Cascade R-CNN

Cascade R-CNN结构如图3(d)所示,上阶段的bbox输出作为下阶段的输入,每个阶段的IOU阈值逐步增加(其实Cascade R-CNN的结构很简单了,在Faster R-CNN RPN后面扩展了一个多阶段检测子网络)

  • Cascade R-CNN结构:backbone+RPN+3detector(iou:0.5,0.6,0.7);
  • detector:two stage检测器第二阶段的设计思路,不同的是每个阶段的输入输出是串联的;

实验结果

  • 文中对比了Cascade R-CNN based on FPN+和ResNet-101结构和一些优秀算法的对比,从AP指标上来看Cascade R-CNN对检测精度的提升很大;
Cascade R-CNN 论文理解_第5张图片
  • 同时还比对了Cascade R-CNN的参数量和速度,从表中可以发现参数量增加得比较多,但是inference和training的速度影响不大;
Cascade R-CNN 论文理解_第6张图片

总结

  • 本文提出了一个级联目标检测器Cascade R-CNN,给高质量目标检测器的设计提出一个好的方向;
  • Cascade R-CNN在提升IOU的同时避免了training阶段的过拟合以及inference阶段的检测质量mismatch;
  • 文中对比实验很充分:
    • 在proposal中添加GT bbox验证检测质量mismatch问题;
    • 和iterative bbox和integral loss两种方法进行对比;
    • 通过调整stages的数目来分析合适级联数,3stages级联综合表现最好;
    • 在现有two stage算法框架上加入cascade思想和原始实现进行对比;
    • Cascade R-CNN带来的检测结果还是很优秀的
  • 检测问题不同于分类问题,分类问题中样本的label是离散的可以很好区分正负样本,但是检测问题中bbox的信息不是离散的只能通过IOU阈值来判定正负样本,并且合适IOU阈值没法在训练中通过学习来调整优化,所以Cascade R-CNN核心思想主要集中在IOU的优化上,算是在高质量目标检测器设计思路上一次优秀的尝试;

你可能感兴趣的:(Object,Detection)