【深度学习-目标检测】01 - R-CNN 论文学习与总结

论文地址:Rich feature hierarchies for accurate object detection and semantic segmentation

论文学习

摘要(Abstract)

  1. 对象检测性能的现状:
    • 在PASCAL VOC数据集上测量的对象检测性能在过去几年已经达到了一个高点。
    • 最佳性能的方法通常是复杂的集成系统,结合了多种低级图像特征和高级上下文。
  2. R-CNN方法的提出:
    • 作者提出了一种简单且可扩展的检测算法,该算法在VOC 2012上的平均精度均值(mAP)比之前的最佳结果提高了30%以上,达到了53.3%
    • 这种方法结合了两个关键见解:
      • 可以将高容量的卷积神经网络(CNN)应用于自下而上的区域提议,以定位和分割对象 (将CNN应用到目标检测领域)
      • 当标记训练数据稀缺时,针对辅助任务的监督预训练,随后进行特定领域的微调,可以显著提升性能。(应用预训练模型+微调 可以显著提高性能)
  3. R-CNN的命名与特点:
    • 由于这种方法结合了区域提议(Region Proposal)CNN,因此被称为R-CNN(带有CNN特征的区域)。
    • 论文还展示了一些实验,提供了对网络学习内容的洞察,揭示了一个丰富的图像特征层次结构。

1. 引言(Introduction)

在这部分作者强调了特征在视觉识别任务中的重要性,提出了以CNN为特征提取网络的想法。

特征的重要性

  1. 过去十年,视觉识别任务的进展很大程度上依赖于 SIFT(尺度不变特征变换)以及 HOG(方向梯度直方图)等特征的使用,尽管这些特征在多个视觉任务中表现出色,但是在PASCAL VOC这一经典的视觉识别任务中,2010-2012年的进展相对来说比较缓慢
  2. SIFT(尺度不变特征变换)与HOG(方向梯度直方图)与视觉通路中初级皮层区域V1的复杂细胞相关联,但是实际上识别过程发生在多个阶段,通过这两种方式获得的特征还不够拥有足够的信息量。
    (过去目标检测用的SIFT以及HOG,发展缓慢,且效果不好)
  3. CNN在2012年AlexNet网络中发挥了非常大的作用,展示出了CNN在图像分类上任务的优秀性能,是提取特征的优秀的方式,在提高目标检测性能方面具有很大的潜力(CNN提取特征效果号,CNN有希望取代这两种方式以获取更有信息量的特征)

CNN在对象检测中的应用与关联

  1. CNN的兴起,2012年因为AlexNet的提出,并且在ImageNet竞赛中,展现出了CNN在图像分类上的强大能力,标志CNN在视觉识别领域的重要进展。
  2. 在ILSVRC 2012研讨会上,展开了激烈的讨论,特别是关于CNN在图像分类上的成果能在多大程度上推广到PASCAL VOC挑战上的对象检测中
  3. 作者通过将图像分类和对象检测之间的差距桥接起来,明确的回答了这个问题,在这篇论文中展示了CNN可以显著提高对象检测性能的研究,从而证明了CNN在对象检测任务中的有效性和潜力

2. 对象检测与R-CNN

R-CNN方法概述

  1. R-CNN方法的核心:
    • R-CNN 方法结合了 区域提议(Regin Proposals) 和 卷积神经网络(CNN)的特征。
    • 这种方法通过在测试的时候生成大约2000个类别独立的区域提议,然后使用CNN从每个区域提议中提取固定长度的特征向量,并且使用线性SVM(支持向量机)对每个区域进行分类
  2. R-CNN的设计和效率:
    • R-CNN 使用一种简单的技术(仿射图形变形)从每个提议区域中计算固定大小的CNN输入,不论区域的形状如何。(使用这种技术统一了不同大小尺寸的区域提议的特征向量大小
    • 系统的设计使得类别特定的计算仅包括相对较小的矩阵-向量乘积和贪婪的非最大抑制,这是由于特征在所有类别中共享,并且维度比以前使用的区域特征低两个数量级。
  3. R-CNN的训练挑战:
    • 在对象检测中面临的一个挑战是标记数据稀缺,现有的数据量不足以训练大型CNN模型。
    • 作者提出的解决方案是:先在大型辅助数据集上进行监督预训练,然后在特定领域的小数据集上进行微调。(使用预训练+微调可以改善数据稀缺的问题,并且能够提高性能)
  4. R-CNN的性能提升:
    • 在PASCAL VOC 2010 数据集上,经过微调后R-CNN系统在平均精度上达到 54%,相比于之前基于HOG的模型 33% ,有显著提升。(R-CNN 比 HOG等模型更优秀
  5. R-CNN的应用拓展:
    • 由于R-CNN在区域上操作,自然可以将其扩展到语义分割任务。经过轻微修改后,R-CNN在PASCAL VOC分割任务上也取得了最先进的结果。(R-CNN也能在分割任务获得不错的表现
      在这里插入图片描述

区域提议与特征提取

  1. 区域提议(Region Proposals):
    • R-CNN 首先生成大约2000个类别独立的区域提议,这些提议定义了检测器可用的候选检测集。
    • 为了生成这些区域提议,R-CNN 使用了多种方法,主要方式是 选择性搜索(Selective Search)方法。
  2. 特征提取(Feature Extraction):
    • 对于每一个区域提议,R-CNN 使用一个大型卷积神经网络(CNN)来提取固定长度的特征向量
    • 这些特征向量随后被用于后续的分类过程。
  3. 特征向量的计算:
    • R-CNN 通过一种简单的技术(仿射图像变形)从每个区域提议中计算固定大小的CNN输入,无论区域的形状如何。
    • 这种方法允许从各种形状和大小的区域中提取一致的特征表示。

测试时检测

  • 在测试的时候,会使用选择性搜索(Selective Search)方法在测试图像中提取大约2000个区域提议,这些区域提议定义了检测器可用的候选检测集。
  • 对于每个区域提议,通过CNN前向传播来提取特征向量,然后对于每个类别,使用该类别训练的SVM对提取的特征向量进行评分。
  • 在得到所有的区域提议的评分后,R-CNN会对每个类别独立的应用非极大抑制(NMS),通过这个步骤排除拒绝那些与得分更高的选定区域具有较高交并比(IOU)重叠的区域。

运行时分析

  1. 检测效率的关键属性:
    • 首先,所有CNN参数在所有类别之间共享
    • CNN计算的特征向量维度较低。
  2. 计算时间的分配:
    • 生成区域提议和计算特征的时间在所有类别中被摊销(在GPU上为每张图像13秒,在CPU上为53秒)。
    • 类别特定的计算仅包括特征与SVM权重直接按的点积运算和非极大抑制(NMS)。
  3. R-CNN的可拓展性:
    • R-CNN 可以拓展到数千个对象类别,无需使用近似技术(如哈希)
    • 即使有10万类别,相关的矩阵乘法在CPU上只需要10秒。

3. 训练R-CNN

监督预训练

  1. 预训练的目的和过程:
    • R-CNN在大型辅助数据集(如ILSVRC 2012)上进行了监督预训练,该数据集包含图像级注释(即没有边界框标签)。
    • 预训练使用开源的Caffe CNN库进行,旨在训练CNN以识别大量不同的图像类别
  2. 预训练的结果:
    • 经过预训练的CNN在ILSVRC 2012验证集上的表现接近Krizhevsky等人的结果,顶级错误率仅高出2.2个百分点。
    • 这种差异主要是由于训练过程中的简化所导致。
  3. 预训练的重要性:
    • 监督预训练是训练大型CNN的有效方法,特别是在标记数据稀缺的情况下。
    • 通过在大型数据集上进行预训练,CNN能够学习到丰富的特征表示,这对后续的特定任务(如对象检测)至关重要。

领域特定微调

  1. 微调的目的:
    • 为了适应新任务(对象检测)和新领域(变形的VOC窗口),作者继续使用随机梯度下降(SGD)训练CNN参数,但仅使用来自VOC的变形区域提议。
  2. CNN架构的调整:
    • 除了将CNN的ImageNet特定的1000类分类层替换为随机初始化的21类分类层(20个VOC类别加上背景)外,CNN架构保持不变。
  3. 微调过程:
    • 微调开始时,学习率设为0.001(初始预训练率的1/10),这允许微调取得进展,同时不破坏预训练的初始化。
    • 在每次SGD迭代中,均匀采样32个正样本窗口(跨所有类别)和96个背景窗口,构成大小为128的小批量(mini-batch)。
    • 采样过程偏向于正样本窗口,因为与背景相比,它们极为罕见。
  4. 正负样本的定义:
    • 所有与地面真实框有大于或等于0.5的交并比(IoU)重叠的区域提议被视为该框类别的正样本,其余的被视为负样本。

对象类别分类器

  1. 分类器的训练:
    • 对于每个对象类别,训练一个二元分类器(如用于检测汽车的分类器)。
    • 明确区分正样本(紧密包围对象的图像区域)和负样本(与对象无关的背景区域)。
  2. 处理部分重叠的区域:
    • 对于部分与对象重叠的区域,使用交并比(IoU)阈值来定义是否将其视为负样本。
    • 通过在验证集上的网格搜索,选择了0.3作为IoU阈值。
  3. 正样本的定义:
    • 正样本简单地定义为每个类别的地面真实边界框。
  4. 线性SVM的优化:
    • 提取特征并应用训练标签后,为每个类别优化一个线性支持向量机(SVM)。
    • 由于训练数据太大,无法全部装入内存,因此采用标准的硬负采样(hard negative mining)方法。
  5. 硬负采样的收敛:
    • 硬负采样迅速收敛,在实践中,平均精度均值(mAP)在单次遍历所有图像后停止增长。

4. R-CNN在PASCAL VOC上的结果

  1. R-CNN的表现:
    • R-CNN在VOC 2010测试集上的平均精度均值(mAP)达到了50.2%。当使用边界框回归(Bounding Box Regression, BB)后,mAP提升到53.7%。
  2. 与其他方法的比较:
    • R-CNN的表现与几个强基线方法进行了比较,包括SegDPM、UV A系统、Regionlets等。
    • 相比于这些方法,R-CNN在mAP上取得了显著提升,同时运行速度更快。
  3. R-CNN的优势:
    • R-CNN相比于使用多特征、非线性核SVM方法的UV A系统,实现了从35.1%到53.7%的大幅度mAP提升。
    • R-CNN在VOC 2011/12测试集上也取得了类似的表现(53.3% mAP)。
  4. 方法的验证:
    • 所有设计决策和超参数在VOC 2007数据集上进行了验证。
    • 在VOC 2010-12数据集上的最终结果是在VOC 2012训练集上微调CNN,并在VOC 2012训练验证集上优化检测SVM。

5. 可视化、消融研究与错误模式

  1. 可视化学习特征:
    • 通过可视化CNN的不同层,研究者们能够理解网络学习到的特征。例如,第一层的过滤器捕捉到了定向边缘和对立颜色。
    • 对于更深层次的网络,使用非参数方法直接展示网络学习到的内容。这包括选择特定的单元(特征),并将其作为一个独立的对象检测器来使用。
  2. 消融研究:
    • 通过逐层分析CNN的最后三层(pool5、fc6、fc7),研究者们评估了每层对检测性能的贡献。
    • 发现去除fc7层后,性能并没有显著下降,表明CNN的卷积层比全连接层对其表示能力贡献更大。
  3. 错误模式分析:
    • 通过分析检测失败的模式,研究者们能够改进R-CNN方法。例如,引入简单的边界框回归方法显著减少了定位错误,这是主要的错误模式之一。
  4. 不同层性能的比较:
    • 没有在PASCAL VOC上微调的CNN(仅在ILSVRC 2012上预训练)的分析显示,从fc6层提取的特征比fc7层的特征更具泛化性。
    • 即使去除了fc6和fc7层,仅使用pool5层的特征也能取得不错的结果,这表明CNN的大部分表示能力来自其卷积层。

6. 边界框回归

  1. 减少定位错误的方法:
    • 作者实现了一种简单的边界框回归方法来减少定位错误。这种方法受到DPM中使用的边界框回归的启发。
    • 通过训练一个线性回归模型来预测新的检测窗口,基于选择性搜索区域提议的pool5特征。
  2. 边界框回归的实现细节:
    • 边界框回归的完整细节在补充材料中给出,论文中并未提到。
    • 这种方法通过调整检测窗口的位置和大小,以更准确地覆盖真实的对象。
  3. 边界框回归对性能的提升:
    • 使用边界框回归后,平均精度均值(mAP)提高了3到4个百分点。
    • 这表明边界框回归有效地修正了许多由于定位不准确而导致的错误检测。
  4. 错误分析:
    • 通过错误分析,作者发现R-CNN相比于其他方法(如DPM),更多的错误是由于定位不准确,而不是与背景或其他对象类别的混淆。
    • 这表明CNN特征比HOG特征更具辨别力,但由于使用自下而上的区域提议和CNN在整图分类中学习到的位置不变性,导致了较宽松的定位。

7.语义分割

  1. 语义分割挑战:
    • 为了直接与当前领先的语义分割系统(称为O2P,即“二阶池化”)进行比较,作者在O2P的开源框架内工作。
    • O2P使用CPMC(Constrained Parametric Min-Cuts)生成每张图像的150个区域提议,然后使用 支持向量回归(SVR)预测每个区域对每个类别的质量。
  2. CNN特征用于分割:
    • 作者评估了三种计算CPMC区域上特征的策略,所有策略都从将矩形窗口变形为227x227开始。
    • 第一种策略(full)忽略区域的形状,直接在变形窗口上计算CNN特征。
    • 第二种策略(fg)仅在区域的前景掩码上计算CNN特征。
    • 第三种策略(full+fg)简单地将full和fg特征连接起来。
  3. VOC 2011上的结果:
    • 在VOC 2011验证集上,full+fg策略取得了平均准确率47.9%的最佳结果,比O2P的结果略高。
      fg策略略优于full策略,表明掩蔽区域形状提供了更强的信号。
  4. VOC 2011测试集上的结果:
    • 在VOC 2011测试集上,与两个强基线方法(R&P和O2P)相比,R-CNN的full+fg策略在11个类别中取得了最高的分割准确率,总体分割准确率为47.9%。

8. 结论

  1. 对象检测性能的提升:

    • 近年来,对象检测性能有所停滞。最佳的系统是复杂的集成,结合了多种低级图像特征和高级上下文。
    • 本文提出了一个简单且可扩展的对象检测算法,在PASCAL VOC 2012上相比以前的最佳结果实现了30%的相对提升。
  2. 关键洞察:

    • 第一个关键洞察是将高容量的卷积神经网络应用于自下而上的区域提议,以定位和分割对象。
    • 第二个关键洞察是一种训练大型CNN的范式,即在标记数据稀缺时,先对辅助任务进行监督预训练,然后针对目标任务进行微调。
  3. 预训练和微调的有效性:

    • 作者推测,对于许多数据稀缺的视觉问题,“监督预训练/领域特定微调”范式将非常有效。
  4. 计算机视觉与深度学习的结合:

    • 作者指出,通过结合计算机视觉的经典工具(如自下而上的区域提议)和深度学习(如卷积神经网络),取得了这些成果。
    • 这两个领域不是对立的科学探索线路,而是自然且不可避免的合作伙伴。

这篇论文《Rich Feature Hierarchies for Accurate Object Detection and Semantic Segmentation》的主要创新点和贡献可以总结如下:

  1. R-CNN方法的提出
    • 论文提出了区域卷积神经网络(R-CNN)方法,这是一种结合了区域提议和卷积神经网络(CNN)的对象检测方法。这种方法在对象检测领域是创新性的,因为它有效地将深度学习技术应用于对象检测任务。
  2. 高容量CNN的应用
    • R-CNN利用高容量的CNN来从自下而上的区域提议中提取特征,用于定位和分割对象。这种方法的创新之处在于它如何有效地利用深度学习来提取和利用复杂的图像特征。
  3. 监督预训练和领域特定微调
    • 论文展示了在标记数据稀缺时,先对辅助任务(如图像分类)进行监督预训练,然后针对目标任务(如对象检测)进行微调的有效性。这种方法提高了CNN在特定任务上的性能,是深度学习在数据稀缺领域的一个重要应用。
  4. 显著提高检测性能
    • R-CNN在PASCAL VOC数据集上实现了显著的性能提升,相比之前的最佳方法在平均精度均值(mAP)上提高了30%以上。这一成果证明了R-CNN方法的有效性和实用性。
  5. 可视化和错误模式分析
    • 论文还包括了对CNN学习特征的可视化分析,以及对R-CNN错误模式的深入分析。这些分析有助于理解CNN是如何工作的,以及如何进一步改进对象检测方法。
  6. 语义分割的应用
    • 论文还探讨了将R-CNN应用于语义分割任务的可能性,并展示了在这一任务上的初步结果。这表明R-CNN方法不仅限于对象检测,还可以扩展到其他视觉识别任务。

R-CNN

在这里插入图片描述

R-CNN 整体工作流程详解:

  1. 使用选择性搜索(Selective Search)来选取大约2000个候选区域,也成为区域提议,简单来说就是按照某个特定的算法(选择性搜索),在原始图像中画出大约2000个框,接下来的工作全部围绕这2000个框来开展。

  2. 选择一个主干卷积神经网络(VGG、AlexNet等等)来进行特征提取,这些主干卷积神经网络在输出层之前被截断,因为我们需要的是它们的提取的特征图。

  3. 以上2000个框,就是区域提议将会经过一定的方法(论文中是仿射图形变形),将大小不一,形状不一的各个区域提议变形为CNN特征提取网络输入的形状,这样,对于大约2000个框,都能得到它的特征图,这里值得一提的是:R-CNN是对每个区域提议单独进行CNN特征提取,虽然是共享CNN特征提取网络,但是需要进行大约2000次特征提取,速度是比较慢的。

  4. 经过对之前所有区域提议的处理,现在我们获得了大约2000个特征图,每个特征图都需要经过 分类类别数 个 SVM 分类器(假设有1000个类别,就有1000个SVM分类器),每个分类器负责判断一个区域提议是否包含其对应的对象类别,输出通常是一个评分,实数值,代表该区域提议属于该SVM代表分类的可能性或者置信度,最后,假设有1000个类别,每个区域提议将经过1000个SVM分类器处理,获得1000个置信分数,通常选取最大的置信分数,且需要超过一定的阈值。

  5. 同时我们利用获得的每个区域提议的特征图,进行预测框回归,也就是对区域提议进行微调。

  6. 至此,对于每一个区域提议,我们可以获得两个结果:

    • 该区域对每个类别的置信分数。
    • 该区域微调后的结果。
  7. 对于每个对象类别,R-CNN使用非最大抑制(NMS)来合并重叠的检测结果。NMS排除那些与得分更高的检测重叠度较高的检测,从而减少重复检测。

    • 非极大抑制(NMS)具体过程
      1. 排序
        所有的区域提议(或检测框)根据它们的置信度评分进行排序。置信度评分通常由分类器(如SVM)提供,表示该区域提议中包含特定对象的可能性。
      2. 选择最高评分的检测框
        • 从排序后的列表中选择最高评分的检测框作为参考框。
      3. 计算重叠度
        • 计算这个参考框与列表中其他所有检测框的交并比(Intersection over Union, IoU)。IoU是两个框的交集区域与它们的并集区域的比例。
      4. 去除重叠度高的检测框
        • 如果任何其他检测框与参考框的IoU超过预设的阈值(例如0.3或0.5),则将其从列表中去除。这一步骤旨在去除与参考框重叠度高的、可能是重复检测的框。
      5. 重复过程
        • 从剩余的检测框列表中再次选择最高评分的框作为新的参考框,并重复上述过程,直到所有的检测框都被考虑过。
      6. 输出最终检测结果
        • 经过NMS处理后,剩余的检测框被认为是最终的检测结果。这些框既不会有过多的重叠,也是置信度评分最高的。
  8. 输出最终检测结果:
    经过上述步骤后,R-CNN输出每个检测到的对象的类别、置信度(由SVM得分决定)和边界框位置。

以上内容旨在记录自己的学习过程以及复习,如有错误,欢迎批评指正,谢谢阅读。

最近更新

  1. TCP协议是安全的吗?

    2023-12-28 19:48:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-28 19:48:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-28 19:48:04       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-28 19:48:04       20 阅读

热门阅读

  1. RBE306TC Computer Vision Systems Lab Manuals and Reports

    2023-12-28 19:48:04       31 阅读
  2. centos 配置 git 连接 github

    2023-12-28 19:48:04       39 阅读
  3. C# 中 加盐(salting)

    2023-12-28 19:48:04       42 阅读
  4. 《LIO-SAM阅读笔记》3.后端优化

    2023-12-28 19:48:04       35 阅读
  5. CSS中浮动float带来的高度塌陷问题及4种解决方案

    2023-12-28 19:48:04       37 阅读
  6. 抽象工厂模式(Abstract Factory)

    2023-12-28 19:48:04       43 阅读
  7. HTML生成图片

    2023-12-28 19:48:04       36 阅读
  8. 对于Cookie和Session的认识

    2023-12-28 19:48:04       32 阅读
  9. 在树莓派Ubuntu 23.10上编译opencv3.4.14

    2023-12-28 19:48:04       37 阅读
  10. MATLAB基础:从入门到熟悉

    2023-12-28 19:48:04       37 阅读
  11. Mybatis 动态 SQL - script,bind,多数据库支持

    2023-12-28 19:48:04       38 阅读
  12. [spark] dataframe的cache方法

    2023-12-28 19:48:04       44 阅读