文章目录

  • 原文
  • 初识
  • 相知
    • Challenge to High Quality Detection
    • Cascade RCNN
    • 与相似工作的异同
    • 扩展到实例分割
  • 回顾
  • 参考

原文

https://arxiv.org/pdf/1906.09756

初识

回顾只是:在RCNN这类两阶段检测器中,第二阶段的训练需要指定候选框是正类还是负类【背景类】,一般的方法是衡量候选框与gt之间的iou是否大于某个值,如果大于则认为是正类→执行分类+回归任务,如果不是则认为是负类,只考虑分类loss

本文主要解决的一个问题就是消除检测结果中的close false positives,在rcnn的训练过程中,postivenegative是通过iou阈值u来定义的【bounding box与groundtruth之间的iou>u则认为是正类】。而这个值通常设置为0.5,这其实是一个非常宽松的阈值,这会导致检测结果产生很多的false positives(但人眼可以很轻松地进行剔除),如下图(a)所示。而采用较高的u值进行训练,则可以得到一个较好的预测效果,如图(b)所示。

文中的quality of a detection hypothesis表示预测框与groundtruth之间的iou,quality of a detector表示训练过程中使用的iou阈值u,上图( c )展示了不同的quality

由上图来看,那不是直接提升训练时的u就能解决问题了吗?别急着下结论,作者又马上丢出下面一组实验结果:

作者选取不同的u值训练模型(0.5 - 0.7),上图依次展示了在不同阈值下的定位、分类和整体的性能。其中图(a)说明了,每个检测器都在input iou接近训练阈值u时提升最大【离baseline的增幅最大】;图(b)展示的是分类器的损失,峰值也出现在阈值u附近,并且可以看出来loss值也越高;图( c )中,u=0.6在iou阈值较高时,性能好于u=0.5的检测器,但u=0.7的却出现模型退化的情况(比u=0.6差),这说明了要提升模型的性能,不能简单的增加u值。

显然,高质量的检测结果需要高质量的候选框,但这不能通过简单地提升训练时的阈值u来实现。作者分析其原因在于两点:① 样本不均衡的问题,提升阈值u必然会大大减少训练过程中的正类候选框数量,这很容易导致过拟合;② 训练和测试时提供的候选框质量不一致,在训练时提供的都是高质量的候选框,训练得到的是高质量检测器,而测试集对于新的数据不一定能生成这么高质量的候选框,导致检测器与候选框不匹配。归根结底,其实过高的u导致模型 “过拟合”

而本文为了解决这个问题,提出了一种新的框架Cascade RCNN。主要利用图2(a)的观察:回归器的输出 IoU 几乎总是优于其输入IoU,因此以某个阈值训练的检测器可以为下一个阶段提供更好的候选框,因此下一个阶段可以使用更高的阈值。采用这种结构后,候选框的质量从一个阶段逐渐增加到下一个阶段,从而解决了那两个问题:① 样本不均衡,因为经过前一个阶段的回归后,候选框的质量得到提升,正样本的数量得到保证;② 在推理时使用相同的级联结构,也会产生一组质量逐渐提高的候选框,与高质量探测器得到很好的匹配,从而提高检测精度。

Cascade RCNN可以很方便地应用在各类基于RCNN的模型中,并且得到较为显著的提升,除了检测之外,也可以很方便地应用到实例分割中,比如Cascade Mask RCNN。不管是在各大数据集中,Cascade RCNN都能取得较好的结果,并且在各大比赛上也成为了主流模型。

相知

Challenge to High Quality Detection

作者这里再次提及到了高质量检测器【减少false positive】所面临的挑战:首先是分析了历史原因,之前的数据集对算法的检测性能要求比较宽松,在测试时只要预测框和GT之间的IoU阈值大于0.5即认为检测成功。而由于数据集和算法的发展,目前的数据集开始考虑更高质量的检测结果了,比如COCO和KITTI,其中COCO会综合考虑iou阈值u=[0.5 : 0.05 : 0.95]的mean AP。其次是这个任务本身比较难,虽然已经有一些方法在提升高质量假设框方面做出了努力(比如FPN),但上面也分析过了,高质量的假设框需要与高质量检测器互相匹配【文中称为paradox of high quality detection】。

Cascade RCNN

再次明确,cascade rcnn的目标是同时增加假设框与检测器的质量,从而达到高质量目标检测。

虽然Cascade RCNN可以应用各种网络结构中,但这里还是以最经典的Faster RCNN作为基础模型进行叙述


Cascade RCNN的网络如图(b)所示,相比于(a)的Faster RCNN,其主要区别在于引入了级联回归器,每个回归器ftf_tft​都针对前一个回归器输出的检测框btb^tbt进行优化,逐渐提升候选框的质量。如下所示(一共包含T个回归器):

训练时,后一个回归器区分正/负样本的阈值u会大于前一个回归器的u u={0.5, 0.6, 0.7}

下图展示了不同阶段的候选框质量分布(横轴表示候选框与GT之间的iou),可以看到如果不使用Cascade架构,RPN输出的u>0.7的候选框只有2.9%。而使用级联策略后,经过前一个阶段的回归器调整后,候选框的质量得到提升。即使后面回归器增加阈值u,这能够为其提供足够的正样本。

下图展示了不同阶段的候选框与GT之间的回归距离分布。可以看到每经过一次回归,候选框就更靠近GT一些,距离分布也在逐渐更接近中心【红色框表示经过阈值u剔除后的候选框】。

总结一下,这种级联结构对于检测器的训练有三个主要优点:① 减少了由于高阈值u导致的过拟合;② 不同的高阈值u都有一个对应的检测器;③ 随着u的增加,剔除了不少异常值,增加后阶段检测器的学习有效性。

Cascade R-CNN对于候选框和检测器质量的同步改进,使其能够解决paradox of high quality detection。在测试时应用相同的级联,依次提高候选框的质量,更高质量的检测器只需要对更高质量的候选框进行回归,并且对于这些候选框,它们是最优的。

与相似工作的异同

再回过头来看这张图,可以发现Cascade RCNN与( b )( c )两个工作存在一些相似之处,特别是( c ),只有检测头的区别,这里谈谈它们之间的异同。

图( c )展示了iterative BBox的网络结构,其主要在测试时对检测结果进行多次迭代。与Cascade RCNN主要区别在于:iterative BBox本质是一种后处理程序,其在训练时并没有级联设置,在测试用同一个检测器多次迭代。而Cascade是一种重采样机制,不同阶段处理不同分布的候选框,Cascade训练和测试都采用级联形式。

并且这种模型存在两个问题:① 根据某个阈值u训练得到检测器是次优的,比如图2中input iou>0.85时以u=0.5训练的检测器反而会出现退化;② 每次迭代后的分布会发生变化,而检测器却仍是同一个【检测器在训练时只针对一个分布训练】,这也是次优的。

图( c )展示了Intergral Loss的网络结构,其使用多分类器集成的方式:训练时构造不同的head进行分类任务,不同分类器采用不同的阈值u作为正负样本的评判标准,联合计算loss,如下所示。测试时使用多个分类器进行集成。

其与Cascade RCNN的区别和其主要缺点在于:① 无法处理高阈值下正负样本不均衡的问题【如图4所示】,不像cascade rcnn为不同阈值下的检测器调整了分布;② 在训练和测试时,高质量分类器都需要处理大量的低质量检测框,而不像Cascade RCNN中后阶段的高质量检测器只需要处理高质量的检测框分布。

实验也表明,Cascade RCNN比这两种方法提升了不少:

扩展到实例分割

Cascade RCNN架构很容易地就能扩展了实例分割任务中,用于Mask RCNN框架。

关于Mask RCNN,可以参考此博客Mask R-CNN-论文解读


相比于目标检测,MaskRCNN多了一个分割分支,要将Cascade RCNN架构应用进去,面临两个问题:在哪里加入分割分支?以及加入多少分割分支?

因此作者设计了( b )( c )( d )三种结构,值得注意的是,在测试时无论是哪种结构,都只采用最后一个阶段输出的检测框包含的ROI进行分割【在(d)结构中,会送入三个分支进行预测然后ensemble】。实验表明,三种设计的性能都优于Mask RCNN。

其他实验只放出这张与其他SOTA方法的比较,其他消融实验见原论文:

回顾

Cascade RCNN这种策略其实在传统的机器学习与模式识别中就已经得到应用了,比如著名的VJ人脸检测器。但Cascade RCNN从实验现象开始挖掘,工作定位于“高质量的目标检测器”,通过实验分析,发现一些规律性的现象,因此采用级联的策略来解决的这个问题,不是单纯地套用结构。

这种级联的思想能够很容易地应用在各种two-stage工作中(RCNN系列),并且在各种数据集上也展现了提升。但这种策略并不一定适用于所有情况,比如在博主参加过的一个细胞实例分割的比赛中,发现应用cascade mask rcnn反而没有原始的mask rcnn好,个人猜测这是由于cascade rcnn本身是用于提升准确率的【降低false positive】,解决的是误检的问题,而细胞分割本身比较严重的问题是漏检,提升准确率的同时,必然会降低一部分召回率。大家在应用的时候,还是根据自己任务的实际情况为准,并进行调参,比如阈值u

代码就不贴了,推荐大家使用MMdetection

参考

[1] https://neg5bl8b86.feishu.cn/docs/doccnny3gq2MZZJISDUYRivmcjb
[2] https://www.bilibili.com/video/BV1a3411B71E?spm_id_from=333.999.0.0【视频资源】

PAMI19 - 强大的级联RCNN架构《Cascade R-CNN: High Quality Object Detection and Instance Segmentation》相关推荐

  1. Cascade R-CNN: High Quality Object Detection and Instance Segmentation(级联R-CNN:高质量目标检测与实例分割)

    Cascade R-CNN: High Quality Object Detection and Instance Segmentation Zhaowei Cai, and Nuno Vasconc ...

  2. 【R-CNN】Rich feature hierarchies for accurate object detection and semantic segmentation (2014) 全文翻译

    作者 Ross Girshick, Jeff Donahue, Trevor Darrell, Jitendra Malik (UC Berkeley, {rbg,jdonahue,trevor,ma ...

  3. R-CNN(Rich feature hierarchies for accurate object detection and semantic segmentation)论文理解...

    论文地址:https://arxiv.org/pdf/1311.2524.pdf 翻译请移步: https://www.cnblogs.com/xiaotongtt/p/6691103.html ht ...

  4. R-CNN 《Rich Feature Hierachies for Accurate Object Detection and Semantic Segmentation》论文笔记

    本学弱喜欢在本子上记笔记,但字迹又丑. 望看不懂我的字的大佬不要喷我,看得懂的大佬批评指正.

  5. cascade rcnn:delving into high quality object detection

    轻松掌握 MMDetection 中常用算法(五):Cascade R-CNN - 知乎文@ 0000070 摘要本篇主要介绍目前主流常用的高性能目标检测算法中最广为人知的算法之一 Cascade R ...

  6. 深度学习论文阅读目标检测篇(一):R-CNN《Rich feature hierarchies for accurate object detection and semantic...》

    深度学习论文阅读目标检测篇(一):R-CNN<Rich feature hierarchies for accurate object detection and semantic segmen ...

  7. 目标检测论文阅读:Cascade R-CNN: Delving into High Quality Object Detection(CVPR2018)

    Cascade R-CNN: Delving into High Quality Object Detection(CVPR2018) 论文链接:https://arxiv.org/abs/1712. ...

  8. Cascade R-CNN: Delving into High Quality Object Detection(个人学习笔记)

    论文基本信息 标题:Cascade R-CNN: Delving into High Quality Object Detection 作者:Zhaowei Cai,Nuno Vasconcelos ...

  9. 目标检测经典论文——R-CNN论文翻译:Rich feature hierarchies for accurate object detection and semantic segmentation

    Rich feature hierarchies for accurate object detection and semantic segmentation--Tech report (v5) 用 ...

最新文章

  1. Windows 7无法使用Telnet命令
  2. 高频运行脚本案例 $$
  3. Leetcode 134. 加油站 解题思路及C++实现
  4. Nginx + PHP/PHP-FPM安装配置示例
  5. 偷懒大法好,用 selenium 做 web 端自动化测试
  6. hibernate 表关系映射详解之多对多
  7. 一个理性战胜感性的成功案例:P2P投资和活期理财,纠结中提炼出来的1个数学问题...
  8. 共享内存简介及docker容器的shm设置与修改
  9. 使用onclick跳转到其他页面/跳转到指定url
  10. 【Rayeager PX2】Rayeager PX2开发板上安装FreeBSD
  11. 消息队列MQ夺命连环11问:kafka、rabbitmq、rocketmq、activemq
  12. C# 调用Dll中非托管C++代码时,函数参数的类型对照
  13. autocad2007二维图画法_AutoCAD2007中文版机械制图教程
  14. Extjs介绍及视频教程
  15. linux安装之后缺少命令,linux下rarlinux安装后找不到rar命令处理方法
  16. Android 打开第三方APP
  17. java泡泡屏保,js 模拟气泡屏保效果代码
  18. 【转发】SAP ABAP ZBA_R001 查询用户下的角色
  19. uni-app获取当前时间日期及之后7天和星期几
  20. 关于mysql Error 1045(28000):Access denied for user ‘root‘@‘localhost‘(using password:YES)的处理方法

热门文章

  1. VS2019切换中英文
  2. Android studio 出现一直在同步Syncing only active variant
  3. 基于Spring Security 的Java SaaS应用的权限管理
  4. mybatis报错 Invalid bound statement (not found)
  5. Halcon复习专题-镜头/匹配/标定/边缘/拟合/缺陷检测/
  6. [笔记]快乐的Linux命令行《二》文件系统中跳转
  7. Color类颜色对照表
  8. 英语学习单词篇(14)
  9. 天翼云服务器性能评测,4H8G贵阳节点性能跑分
  10. stm32f105vct6例程_stm32f105例程 CAN500K USART_LED