• 【目标检测】Cascade R-CNN 论文解析


    @

    0. 论文链接

    Cascade R-CNN

    1. 概述

      这是CVPR 2018的一篇文章,这篇文章也为我之前读R-CNN系列困扰的一个问题提供了一个解决方案:R-CNN在fine-tuning使用IOU threshold = 0.5来防止过拟合,而在分类阶段,使用softmax因为之前0.5的设定太过宽松(loose),而导致精度下降较多,因此单独训练了一个新的SVM分类器并且更改了IOU阈值(文章中对这样做进行大量的实验对比以及证据十分有力),而在Fast R-CNN中我看到也是用的0.5作为阈值,却通过实验证明softmax比SVM要好一些, 在R-CNN系列的总结我也提了一些可能的原因。而这片文章正好解决大多数分类器的问题,IOU阈值的设定难题。

      对于一个detector来说,如果IOU threshold太低,会学习到很多背景框,引入很多噪声,比如上图中a),可以发现很多噪声框。但如果IOU threshold太高则会导致两个问题:1.样本会以指数级的速度消失2.会在inference阶段出现detector最优的阈值与输入proposal的IOU值发生mismatch。这里解释一下为什么会mismatch:detector通常在proposal自身的IOU值与detector训练的IOU阈值较为接近的时候才会有更好的结果,如果一味的提高IOU阈值很容易出现mismatch导致性能很差,可以看下图关于RPN生成proposal的IOU值分布更好的理解一下(因为高IOU的proposal很少,大多数都是较低IOU的proposal):

      所以对于a single detector来说,很难抉择一个合适的IOU,无论高低都是有很大弊端的,这篇文章提出了一种级联检测器,他利用前一个检测器输出“a good data distribution“来作为下一个检测器的输入,同时相应的提高训练时的IOU阈值,使得IOU阈值与proposal的IOU值较为接近,这样训练3个检测器最后输出结果会好很多,在inference阶段使用同样的网络结构合理的提高了IOU的阈值而不会出现之前所说的问题。文章中通过大量的实验证明了这种网络结构的合理性。

    2. 网络结构的合理性

      这样网络设计是需要有几个事实支持的,之所以说是事实支持而不是理论支持,因为这些结论大多数通过大量实验验证出的结果,很难用理论严格的证明。

    1. 一个检测器通常只在一个小范围的IOU阈值内(a single quality level)性能最好,从之前图片中c)可以发现,在0.55-0.6的范围内阈值为0.5的detector性能最好,在0.6~0.75阈值为0.6的detector性能最佳,而到了0.75之后就是阈值为0.7的detector了,比IOU阈值过高过低的proposal都会导致检测器性能下降,因此保证检测器训练时的IOU阈值与输入proposal 的IOU相近是十分重要并且有必要的。
    2. 通过观察图c可以发现,几乎所有检测器输出的检测框的IOU都好于输入proposal的IOU(曲线几乎都在灰色对角线之上),因此这保证了我们通过一个检测器输出的检测框整体IOU相对输入的proposal的IOU都会提高,可以作为下一个使用更高IOU阈值训练检测器一个很好的数据输入。因此每个检测器输出的检测框质量都会变高,阈值的提高其实也相当于一个resample的过程,一些异常值也可以去掉,提高了模型的鲁棒性。
    3. 读到这里最大困惑就是,一直提高阈值,那正样本会不会减少,导致过拟合呢? 作者通过详细的实验证明了每个阶段大于对应IOU阈值的proposal数量基本没有改变,甚至还有所提升,实验结果如下:

    3. 网络结构

      网络结构其实真的比较简单,文章中也列举了其他3种结构,但是一般人首先想到的确实是本文这种结构,其他结构反而更难想到一些,其他结构通过结构图也很容易理解,关于其他模型的优劣文中也有提到,比如BBox 迭代训练2次以上几乎是没有作用的,这些原因我们通过文章几个实验结论以及结构图都是可以发现的,在此不多赘述,结构如下图:

      检测器文中使用了Faster R-CNN, R-FCN, FPN,具体实验细节与结果也不再赘述。

    4. 参考链接

    Cascade RCNN算法笔记
    Cascade R-CNN 详细解读
    目标检测论文阅读:Cascade R-CNN: Delving into High Quality Object Detection

  • 相关阅读:
    VBS控制鼠标移动和点击(附源代码下载)
    用VBS控制鼠标的实现代码(获取鼠标坐标、鼠标移动、鼠标单击、鼠标双击)
    vbs鼠标方法——模拟鼠标按键
    vbs 获取当前目录的实现代码
    如何在VBS脚本中显示“选择文件对话框”或“选择目录对话框”
    loadrunner使用socket协议来实现客户端对服务器产生压力实例。(通过发送心跳包,达到连接多个客户端的目的)
    loadunner使用socket协议来实现多客户端连接同一服务器脚本(使用到IP欺骗技术)
    Loadrunner中参数和变量的使用
    LoadRunner学习知多少--IP欺骗使用
    Linux下tar bz gz等压缩包的压缩和解压
  • 原文地址:https://www.cnblogs.com/kk17/p/9757500.html
Copyright © 2020-2023  润新知