R-CNN论文解读

论文链接:https://arxiv.org/abs/1311.2524

论文题目:《Rich feature hierarchies for accurate object detection and semantic segmentation》2014
【用于精确物体定位和语义分割的丰富特征层次结构】

先来介绍一下几个基本的概念:

  • 分类是对图像中仅有的主体分类;
  • 定位就是对图像中仅有的主体进行分类并给出位置;
  • 检测则是对多个主体进行定位和分类;
  • Bounding box:(bx, by, bw, bh),bx和by分别为要识别主体的中心点坐标,而bw和bh为识别主体的长宽,这样只需要四个参数就可以将主体的位置确定。

Abstract

在规范的PASCAL VOC数据集上,目标检测的性能在过去多年已经趋于稳定,效果最好的方法是将多种低层次的图像特征和高层次的上下文环境结合在一起的复杂系统。在本篇论文中,我们提出了一种简单且可扩展的检测算法,它相比了之前在VOC 2012上最好的结果将平均准确率均值(map)提高了30%——达到了53.3%。我们的方法结合了两个关键点:
在这里插入图片描述

  1. 一是在候选区域自底向上的使用高性能的CNN网络,用以定位和分割目标对象;
  2. 二是当带有标签的训练数据不足时,使用迁移学习,对在大规模数据集上已经做过训练的神经网络进行微调(fine-tune),这样可以有一个比较大的性能提升;

由于我们将候选区域(Region Proposals)和 CNNs 结合在了一起,所以我们的方法叫做 R-CNN:Regions with CNN features。我们也将R-CNN 和 OverFeat(最近提出的一种基于类似的CNN结构的滑动窗口检测)进行了对比,发现 R-CNN 在200类的 ILSVRC2013 数据集上性能明显优于 OverFeat。

1. Introduction

自从AlexNet在2012 ImageNet大赛夺得冠军,卷积神经网路就收到了越来越多的关注,于是一个新的问题就出现了:如何将卷积神经网络在ImageNet上的训练结果泛化到目标检测领域?
我们回答这个问题是通过在图像分类和目标检测之间建立联系,这篇论文是第一次将CNN运用在PASCAL VOC数据集上大幅度提高目标性能的成果,为了实现这个结果,我们聚焦于两个问题:

  1. 使用神经网络做定位
  2. 如何使用小样本来训练一个高性能的模型

不同于图像分类,检测是要在一张图片中定位多个物体,一种方法是把定位看作一个回归问题,然而Szegedy等人的工作表明这不是一个好方法;另一种方法是使用滑动窗口检测器,问题在于滑窗的大小,步长,选择几种窗口?理论上为了遍历图像上的所有目标,可能要生成数以万计的候选框,因此只用滑窗的方法是不可行的。我们的方法是使用SS算法生成2000个候选框。

第二个问题的解决我们是通过迁移学习,后面会展开介绍。

2. Object detection with R-CNN

我们的目标检测系统由三个模块组成。第一个产生类别无关的候选区域,这些候选区域定义了我们的检测器要探测区域的集合;第二个模块是一个大型卷积神经网络,它会从每个区域抽取特定大小的特征向量;第三个模块是制定类别的SVM的集合。在本节中,我们展示了每个模块的设计、描述了它们在测试阶段的用法、以及参数如何学习的细节,并且展示了在 PASCAL VOC 2010-12 和 ILSVRC2013 上的检测结果。

2.1 Model design

候选区域
最近大量的论文都提出了产生类别无关的候选区域的方法,主要包括:

  • objectness
  • selective search
  • category-independent object proposals
  • constrained parametric min-cuts(CPMC)
  • multi-scale combinatorial grouping
  • Ciresan等

在这里我们选择的是selective search选择候选区域,它是一种基于特点规则筛选候选框的方法,这种方法无需训练,运行传统分割算法提取很多初始候选框,按照相似度合并候选框,最终留下固定数量的候选框,一般这个具体的数量选择2000个。

特征提取
在这里插入图片描述在这里我们选择的卷积神经网路是AlexNet,它的结构如上图所示,包括五个卷积层和三个全连接层。由SS算法选取得到的2000个候选框区域,由于大小不一致我们先要集体resize为227x227的RGB图像,每个候选框通过五个卷机层和两个全连接层由FC7输出4096-D的特征向量,则2000个候选框共可以得到2000*4096维度的特征。

如何将2000个大小不一的候选框统一转换为 227x227 的尺寸呢?这个转换有很多办法,我们使用了最简单的一种。无论候选区域是什么尺寸和宽高比,我们都把候选框变形成想要的尺寸。具体的,变形之前,我们现在候选框周围加上16的padding,再进行各向异性缩放。

2.2 Test-time detection

在测试时,我们先在测试图片上通过SS算法选择2000个候选框,然后扭曲每个候选框resize到227x227,再通过卷积神经网络得到 2000*4096 维度的特征。训练这样就得到了所有打分区域,我们应用贪心非极大值抑制对和该类得分最高的候选框IoU值超过一定阈值的框舍弃。

Run-time分析

两个属性使得检测很高效:

  1. 类别之间的CNN参数是共享的;
  2. 与其他的方法(spatial pyramids with bag-of-visual-word encodings)相比,通过CNN计算得到的特征向量的维度是低维的。使用UVA检测系统得到的特征向量维度比我们高两个数量级(360k vs. 4k-dimensional);

共享的结果就是计算候选框特和特征的耗时可以分摊到所有类别上(GPU:每张图片13s,CPU:每张图片53s)。唯一和类别有关的计算是特征之间的点积、SVM的权重、NMS。实践中,所有的点积都可以批量化成一个单独矩阵间运算。特征矩阵的典型大小是2000×4096,SVM权重的矩阵是4096xN,其中N是类别的数量。

分析表明R-CNN不需要使用近似技术(比如hashing)就可以扩展到上千个类别,即使有10万类,结果矩阵乘法在现代多核CPU上也只需要10s。这种高效性不只是因为候选框和特征共享。由于较高维度的特征,UVA系统存储100k linear predictors需要134GB的内存,而我们只要1.5GB,比我们高了两个数量级。

有趣的是R-CCN和最近Dean等人使用DPMs和hashing做检测的工作相比,他们用了1万个干扰类, 每五分钟可以处理一张图片,在VOC2007上的mAP能达到16%。我们的方法1万个检测器由于没有做近似,可以在CPU上一分钟跑完,达到59%的mAP(3.2节)。

2.3 Training

带监督的预训练

我们使用caffe训练的AlexNet做迁移学习,获得的CNN性能几乎匹配Krizhevsky等人的结果,在ILSVRC2012大型辅助测试集上的top-1错误率仅仅高了2.2个百分点,这种差异是因为我们简化了训练过程。

特定域的微调

为了将我们的CNN用在新的检测任务和新的域(扭曲之后的候选框)上,我们继续使用SGD算法训练参数。除了将原来的AlexNet的最后一层1000神经元(因为ImageNet数据集是1000分类的)将它改为(N+1)个神经元(其中N代表目标检测的种类数,多的“1”代表背景类),CNN结构没有变化。对于VOC,N=20,对于ILSVRC2013,N=200。

有一个问题是微调时每个框的标签是什么呢?答案就是一个21维的特征向量,如果该框域某一类的ground truth的IoU值大于等于0.5,就将其作为该类的正样本,其余的为负样本,另外正样本还包括了ground truth。SGD开始的learning_rate为0.001(是初始化预训练时的十分之一),这使得调优得以有效进行而不会破坏初始化的成果。每轮SGD迭代,我们统一使用32个正例窗口(跨所有类别)和96个背景窗口,即每个mini-batch的大小是128。另外我们倾向于采样正例窗口,因为和背景相比他们很稀少。

目标分类器

这里的训练样本的标签如何准备的呢?训练每一个类别的分类器时,对每个候选框计算与该类别的ground truth的IoU值,IoU值小于0.3的作为该类别的负样本,正样本为严格的ground truth,其余的全部丢弃。每个候选框对应的标签就是0或者1,它代表该框属不属于这个类;那么SVM算法的输入是4096维度的特征向量,输出为一个在0到1之间的概率值,然后关于20个类别训练得到20分类器,在测试阶段对2000个候选框的每一个候选框使用每一个分类器来判断它属于每一个类的概率

上面的0.3是基于网络结构搜索出来的,在{0,0.1,…,0.5}之间进行验证,我们发现设置为0.5时map会降低5个百分点,设置为0时会降低4个百分点。

一旦特征提取出来,并应用标签数据,我们优化了每个类的线性SVM。由于训练数据太大,难以装进内存,我们选择了标准的hard negative mining method

【难负例挖掘算法,用途就是正负例数量不均衡,而负例分散代表性又不够的问题,hard negative
就是每次把那些顽固的棘手的错误,再送回去继续练,练到你的成绩不再提升为止.这一个过程就叫做
’hard negative mining‘】

高难负例挖掘算法收敛很快,实践中只要在所有图像上经过一轮训练,mAP就可以基本停止增加了。附录B中,我们讨论了,为什么在fine-tunning和SVM训练这两个阶段,我们定义得正负样例是不同的。

【fine-tunning阶段是由于CNN对小样本容易过拟合,需要大量训练数据,故对IoU限制宽松:
 IoU>0.5的建议框为正样本,否则为负样本; SVM这种机制是由于其适用于小样本训练,
 故对样本IoU限制严格:Ground Truth为正样本,与Ground Truth相交IoU<0.3的建议框为负样本。】

我们也会讨论为什么训练一个分类器是必要的,而不只是简单地使用来自调优后的CNN的最终fc8层的输出。

【为什么单独训练了一个SVM而不是直接用softmax,作者提到,刚开始时只是用了ImageNet
预训练了CNN,并用提取的特征训练了SVMs,此时用正负样本标记方法就是前面所述的0.3,
后来刚开始使用fine-tuning时,也使用了这个方法,但是发现结果很差,于是通过调试选择了
0.5这个方法,作者认为这样可以加大样本的数量,从而避免过拟合。然而,IoU大于0.5就作
为正样本会导致网络定位准确度的下降,故使用了SVM来做检测,全部使用ground-truth样
本作为正样本,且使用非正样本的,且IoU小于0.3的“hard negatives”,提高了定位的准确度】。

2.4 Results on PASCAL VOC 2010-12

遵循了PASCAL VOC 的最佳实践步骤,我们是在 VOC 2007 的数据集上验证我们的设计思想和超参数,在VOC 2012数据集上对CNN网络进行微调,并优化SVM。我们最终分别提交了有和无边框回归的算法。
在这里插入图片描述表一展示了在VOC 2010上的比较结果。

2.5 Results on ILSVRC2013 detection

在这里插入图片描述从上图可以看出来,R-CNN的结果远远领先于OverFeat,在这里使用到神经网络结构的算法有OverFeat、NEC-MU、UvA-Euvision、Toronto A 和 UIUC-IFP,这表明如何将CNN用到物体检测是非常重要的,这将会导致不同的结果。

3. Visualization,ablation,and modes of error

3.1 可视化学习到的特征

第一层卷积核学习到的特征很容易理解,他们捕捉的是定向的边缘和颜色特征,理解后面的层越来越难,我们提出了一种非参数方法来直接展示网络学习到了什么。
在这里插入图片描述我们可视化了第五个池化层,第五个池化层的feature map大小为 6x6x256=9216-D,忽略边界效应,每个池化层单元的感受野为195x195,中心的pool5单元几乎是全局视角,而接近边缘有较小的带剪裁的支持。

在Figure 4中每行展示了调优过后的CNN网络结构pool5单元的最大的16个激活值,256个不同单元的可视化在附录D中。这些单元被选择作为整个网络学习到的代表采样,在第二行,观察到狗脸和点阵时单元激活,第三行时一个红色物体的探测器,这个网络似乎学到了一些类别调优相关的特征,这些特征都是形状、纹理、颜色和材质特性的分布式表示。而后续的fc6层则对这些丰富的特征建立大量的组合来表达各种不同的事物。

3.2 Ablation studies

没有调优之前的各层表现力

我们主要看一下最后三层的表现力,pool5在上面已经说过,fc6是和pool5紧跟着的全连接层,为了计算特征,它是在pool5的输出上乘了一个4096 x 9216的权重矩阵,并加了偏置。fc7是网络的最后一层,它是在fc6的输出上乘了一个4096x4096的矩阵。我们先来看没有调优之前的网络,分别使用pool5、fc6、fc7作为特征向量来做分类的表现力。可以看出来,fc7层的特征泛化能力不如fc6层,这意味着29%的CNN参数(大于1680万)可以直接移除,更令人惊喜的是,将fc6和fc7层直接移除仍然会产生很好的结果(相当于仅保留了6%的参数量)。这说明了CNN网络的主要表达力来自于卷积层,而非全连接层,这个发现提醒我们在计算一个密集的feature map时仅仅使用卷积层的可能性,这表示可以直接在pool5的特征图上进行滑动窗口的实验。
在这里插入图片描述
调优之后的各层表现力

通过调优可以使得map增加8个百分点,并且调优对fc6和fc7层的提升要大于对pool5层的提升,这说明从ImageNet学习到的pool5层的特征泛化能力强,而在全连接层主要是要学习和特定训练集相关的非线性分类器。

与其他方法的学习到的特征的比较

具体的细节可以在论文中查看,上表table 2中的8-10是用其他方法学习到特征的map。

3.3 Network architecture

在这里插入图片描述在这篇论文中大多数结果使用的网络结构都是AlexNet,然后我们发现不同的网络会对R-CNN的检测产生不同的影响。如上表中的T-Net是TorontoNet,O-Net是一个16层的网络结构——13个3x3的卷积层,5个最大池化层,3个全连接层。

3.4 Detection error analysis

我们应用了Hoiem等人的检测分析工具来对我们的方法的错误模式进行分析,来理解调优到底是如何修正错误的,并和DPM的错误类型进行了对比。一个完整的分析工具的总结不在我们这篇论文的论述范围内,但是我们鼓励读者自己去了解一些细节。下面我们展示了我们的分析结果:
在这里插入图片描述在这里插入图片描述

3.5 Bounding-box regression

基于上面的错误分析,我们可以看出来定位导致的map下降要比其他三种类型严重很多,因此受到DPM中边框回归的灵感,我们也训练了一个线性回归模型来对pool5的特征进行预测。具体的细节下面会展开描述,通过前面的table1、table2、Figure 5都可以看出来使用了Bounding-box会将map提升3-4个百分点。

我们使用了一种简单的边框回归算法来提高定位表现力,在用每个类别的SVM算法对SS删选出来的候选框进行打分之后,我们使用该类别的边框回归模型对边框进行预测。这和用在deformable part models中的边框回归模型类似,主要的不同在于我们的方法中回归模型的输入特征是CNN计算得到的,而不想DPM中是根据几何特征计算推理得到。

具体细节:https://blog.csdn.net/v1_vivian/article/details/80292569

值得一提的是,我们并没有使用候选框的中心坐标和长宽来作为回归模型的输入,ground truth的中心坐标和长宽作为标签直接构建模型;而是采用pool5的特征作为输入,tx,ty,tw,th作为标签来构建回归模型,通过回归模型学习到w*.

在做边框回归时,我们发现了两个微妙的问题:

  1. 我们在做回归模型时使用到了正则化,其中参数设置为1000;
  2. 在进行回归时,我们并非是使用所用的候选框来作为样本,而是对于每个类分别建立回归模型,然后挑选出与该类IoU大于等于0.6的候选框作为该类的样本;

在测试阶段,我们先对每个候选框使用SVM做类别评分,然后根据类别使用回归模型调整边框位置。最后再逐类通过非极大值抑制删除了一些边框就得到了我们最后的检测框。看到这里,整个R-CNN的流程应该已经全部介绍完了,我们总结一下它的流程绘成图如下:
在这里插入图片描述

参考文章:

https://blog.csdn.net/v1_vivian/article/details/78599229
https://blog.csdn.net/u014380165/article/details/72851035

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值