R-CNN阅读笔记

摘要

R-CNN前几年的目标检测发展缓慢,表现最优的方法是将大量低层次图像特征信息和高层次语义信息复杂组合成一个检测系统。RCNN提出了一种简单的检测算法,核心思想主要包括两方面:1.应用高效率的卷积神经网络来处理候选区域(region proposals),来进行定位和物体分割;2.当有标签数据较少,使用有监督的预训练和fine-tuning能够极大提高模型性能。

plateau 平稳,停滞;mAP-mean average precision;scarce 缺乏的;auxiliary 辅助的,补充的

1.简介

R-CNN是第一篇说明CNN在目标检测上比传统(类似HOG特征提取)方法有引人瞩目的表现的文章,可以说是深度学习在目标检测领域的开山之作。本文主要聚焦与两个问题:一是如何用深度神经网络进行目标定位,二是如何用较少的高质量有标签检测数据训练大型模型。
首先解决目标定位和分类问题:与图像分类不同的是检测需要定位一个图像内的许多物体。作者认为,将定位问题单纯作为回归问题其解决效果并不好;由于网络层次较深,输入图片有很大的感受野和步长,使用滑动窗口的方法很困难。作者的采取的办法是:对每张输入图片生产2000个与类别无关的region proposals,用CNN提取每个proposal的特征(Alexnet网络去掉最后一层,故一个proposal的特征是一个4096维向量),再将这个特征送入N(N=数据集类别数目+1)个线性SVM中进行分类。

RCNN

图1.R-CNN基本步骤

第二是解决有标签数据太少,无法训练大型CNN问题:传统方法是首先在CNN进行无监督的预训练,再利用有监督数据进行fine-tuning。R-CNN的方法是用数据量大的ILSVRC分类数据集进行有监督预训练,在小数据集PASCAL上进行fine-tuning,实验表明这将mAP提高了8%。

DPM:多尺度形变部件模型,连续获得07-09的VOC检测冠军。DPM把物体看成了多个组成的部件(比如人脸的鼻子、嘴巴等),用部件间的关系来描述物体,这个特性非常符合自然界很多物体的非刚体特征。DPM可以看做是HOG+SVM的扩展,很好的继承了两者的优点,在人脸检测、行人检测等任务上取得了不错的效果,但是DPM相对复杂,检测速度也较慢,从而也出现了很多改进的方法。
OverFeat:改进了Alex-net,并用图像缩放和滑窗方法在test数据集上测试网络;提出了一种图像定位的方法;最后通过一个卷积网络来同时进行分类,定位和检测三个计算机视觉任务,并在ILSVRC2013中获得了很好的结果。

variant 变形;blockwise orientation histograms 块方向直方图;annotate 有标注的;paradigm 范式;technique 技术,方法;regardless 无论如何

2.R-CNN目标检测

R-CNN目标检测主要由三个模块组成。
1.生成与类别无关的region proposals,这些proposals组成候选检测区域集合。
2.利用CNN对每个region提取固定长度的特征向量。
3.将特征向量送入到可进行分类的线性SVMs中。
4.对bbx进行回归

2.1R-CNN主要步骤

R-CNN对region proposals算法不关心,选用了selective search算法,利用该算法对每张图片提取到2000个region proposals。

selective search算法:首先,对输入图像进行分割算法产生许多小的子区域。其次,根据这些子区域之间相似性(相似性标准主要有颜色、纹理、大小等等)进行区域合并,不断的进行区域迭代合并。每次迭代过程中对这些合并的子区域做bounding boxes(外切矩形),这些子区域外切矩形就是通常所说的region proposals。

文中采用AlexNet(去掉最后一层输出层)对每个region proposal进行特征提取:先将每一个proposal转变成227×227大小,然后送入到训练好的Alexnet中输出得到该个proposal的4096维特征向量。作者在附录A中讨论了用什么方法将每个region proposal转变成227×227大小是最好的。
用训练好的每个类别的SVM来对该特征向量进行打分。(疑问:每个SVM都是二分类的,如何进行打分?)得到每个proposal的得分后,利用非极大抑制方法来舍弃重叠较多的区域(每个类别独立进行)。这样就得到了对一张图片的目标检测结果(bbx、类别及置信度)。

作者认为两个方面减少了检测的时间:1.所有类别的CNN参数是共享的,即虽然每个proposal都要利用CNN提取特征,但是毕竟都用的同一个CNN。2.特征向量只有4096维,相较于其他方法少很多。

2.2模型训练

显然,如2.1所示,用于特征提取CNN网络和用于分类的SVMs都需要进行训练,作者采用的训练方法如下。本节主要是将R-CNN应用于VOC 2012-12数据集。

2.2.1 特征提取器CNN训练

首先采用有监督预训练。作者利用ILSVRC2012图像分类数据集对CNN进行了预训练,训练结果和Alex的结果差不多。
由于该CNN最终是要用于目标检测,而不是分类,并且是对proposal特征提取,所以还要对模型进行fine-tuning。关于正样本和负样本的选取,文中规定当在图像中得到的region proposal与真实标注框IOU<50%则认为是正样本,小于50%则为负样本(背景)。采用学习率为0.001(预训练时的十分之一),每轮迭代为128个batch,其中32个包含各种类别的正样本,96个负样本(背景)。通过SGD方法对模型进行微调,其中输出由Alexnet的1000改为N+1(N为数据集类别数,1为背景)。作者用VOC2012进行fine-tuning。

2.2.2 SVM分类器训练

根据作者实验结论,将IOU小于0.3proposals的作为负样本,正样本则是数据集中的标注框,来训练每个类别的SVM。
训练完成后,再用CNN提取出的特征对每个类别的SVM进行微调。
(显然SVM正负样本的选取比CNN要求严格)
由于训练数据太大,作者选择了hard negative mining method(高难负例挖掘算法?用途就是正负例数量不均衡,而负例分散代表性又不够的问题?)进行fine-tuning

这里可能会有两个疑惑:
1.作者为什么在微调CNN和训练SVM时选取正负样本的方式差别不同
上面已经提到,在训练SVM时,正样本为groundtruth,与ground truth的IoU小于0.3的候选区域为负样本。简单来说fine-tuning是担心过拟合,要扩大正样本的样本量,所以定义比较宽松,但是SVM是最终用于分类的分类器,而且SVM原理就是最小的距离最大化,越难分的数据越有利于SVM的训练,所以对样本的定义比较严格,另外,SVM本来就是一种更适合小样本训练的分类器。
2.为何不直接用CNN的softmax分类而用SVM
因为在训练CNN的时候数据本来就不是很准确,且负样本是随机抽样的,而SVM的训练使用的经过hard negative mining方法筛选的,比较严格,所以用SVM分类效果会更好。在采用softmax会使PSACAL VOC 2007测试集上mAP从54.2%降低到50.9%。

2.2.3 Bounding-box回归

根据3.3的预测错误分析,以及参考DPM算法,作者训练了一个线性Bounding-box回归模型对proposal进行回归,得到最后的结果。实验证明这个方法是有效的,详细内容在6.2中。

2.3 在PASCAL VOC 2010-12上的结果

作者先是利用VOC2007数据集进行了调参和验证,然后在VOC2010-12数据集上进行了测试,CNN的fine-tuning和SVMs的训练都是利用VOC2012数据集。最终提交了没有bbx回归和有bbx回归的两个结果,最好为53.7%。与以往其他方法的对比也可以一目了然。
在这里插入图片描述

implementation 执行;ratio 比例;tight 紧的;warp 弯曲,变形;forward propagate 前向传播;extract 提取;non-maximum suppression 非极大抑制; stochastic gradient descent SGD; domain 领域;initialization 初始化;binary 二维的,二元的;tightly 紧紧的;optimize 优化

3 可视化、消融实验和预测错误分析

3.1 可视化

第一层的过滤器往往很直观并容易理解,其往往包含一些边缘和对比色等信息,但是后续层就很抽象了。作者采用了一种简单的非参数化的方法来对网络学到的东西可视化。
作者将最后一个pool层(pool5,池化层也是卷积层)可视化
pool5层的特征图尺寸为6×6,其感受野为195×195,这样可以将pool5的特征图映射到原图中,白色方框就是感受野,位置应该就是原region proposal的位置。得到的结果如下所示。左上角的激活值的算法还不是很明白。
在这里插入图片描述

3.2 消融实验

作者分别讨论了是否进行fine-tuning后的各层性能,结果表明微调前fc7的性能甚至不如fc6好,这意味fc7的29%的CNN参数,也而且不影响mAP,甚至去掉fc6和fc7,模型性能也不错,这表明CNN的主要处理能力来自于卷积层,而不是全连接层。调优后上述三层的性能都得到提升,fc6和fc7的提升明显优于pool5,这说明pool5从ImageNet学习的特征通用性很强。具体结果如下图所示。

在这里插入图片描述
同时,作者还提出网络结构对模型性能影响也很大,更深的网络结构能较好的提高模型mAP,但是会极大增加处理时间。

3.3 预测错误分析

作者利用Hoiem检测分析工具,针对假阳性样本FP,来对预测错误来源进行分析,并且与DPM方法进行了比较。其错误来源更多是由于错误定位所致,而不是与背景或其他对象类别造成的混淆,用这个分析来对bbx回归模型进行修正。

capture 俘获;single out 挑选; receptive fields 感受野;ablation studies 消融实验

4 ILSVRC2013目标检测数据集及实验结果

作者采用了和VOC一样的超参数设置,当然这对于ILSVRC2013数据集而言肯定不是最优参数,但是本文不是一个调参文,所以作者就没管了。
ILSVRC2013目标检测数据集一共有200个类别, ILSVRC2013数据集包含三个部分:训练集(395918),验证集(20121),测试集(40152),难度和PASCAL VOC差不多。训练集只有部分有标签,是半监督的。而验证集和测试集都有bbx标注,并且训练集与验证集和测试集有不同的样本分布,作者选择了验证集作为主要训练样本,并将验证集分为大致相等的val1和val2子集(用作验证集),训练集作为辅助正样本来源
这种方法的问题在于,验证集的数据比较少,最少的一类只有31个,有一半的类别不超过110个。作者提出了一种基本平衡的val1和val2划分方法,并作者公布了划分val1和val2的代码。

4.1 Region proposals

训练集等与上文提到的一样的方法,作者采用selective search算法在val1、val2和测试集上提取region proposals。在划分的两个验证集上,每张图片大约有2403个region proposals,与ground-truth的bbx召回率为91.6%(0.5IoU阈值),这显然比PASCAL数据集的结果98%低,故还有提高的空间。

4.2 CNN、SVM训练

作者将val1上所有图片selective search得到的proposals、val1的gt bbx以及每个类别至多N个gt bbx组成一个训练集V,称为val1+trainN
第二章已经说明,一共有三个地方需要用到这个训练集V,分别是:CNN的微调fine-tuning、SVM分类器训练和bbx回归训练。采用SGD对CNN进行微调,并迭代了5万轮。SVM训练时,使用了训练集V中所有的gd bbx作为正样本,从训练集V中随机选择了IoU<0.3的5000图片作为负样本(论文说与把训练集V中所有IoU<0.3的图片作为负样本相比,这样只用了一般的时间,而mAP只降低了0.5%)。用val1进行了bbx回归训练。所有的超参数的选择都是选取PASCAL相同的值。

4.3 测试集验证与评估

作者将训练好的模型利用val2来验证,包括验证CNN微调结果和SVM的分类结果,并且采用实验来说明如何选取CNN微调和SVM训练的训练集。实验证明红色框出的是最好的方案。即N=1000,SVM和CNN都用val1+train1000来训练。
可以看出val2上的mAP与测试中的mAP非常接近,这说明val2上的mAP是测试集性能的良好指标,并且val1和val2的划分也是很恰当的。
在这里插入图片描述

图4.1 最终采用的训练方法即结果

在这里插入图片描述

图4.2与其他方法的对比

在这里插入图片描述

图4.3箱型图对比

在这里插入图片描述

图4.4 一部分结果预览

4.4 R-CNN与OverFeat的关系

OverFeat可以大致视为R-CNN的特例。如果要用规则正方形区域的多尺度金字塔替换selective search region proposals,并将每类bounding-box回归更改为单个bounding-box回归,则这两个系统将非常相似。但是R-CNN的速度大约是OverFeat的9倍,作者提出这是R-CNN后续可以改进的地方。

OverFeat:改进了Alexnet,并用图像缩放和滑窗方法在test数据集上测试网络;提出了一种图像定位的方法;最后通过一个卷积网络来同时进行分类,定位和检测三个计算机视觉任务,并在ILSVRC2013中获得了很好的结果。

原文中第五章语义分割部分,由于作者描述比较少,本人也暂时不懂,此处就不写了。

5 结论

R-CNN在PASCAL VOC2012上的实验结果相较于之前的方法提高了30%,其主要通过两个方面达到这个效果:1.利用卷积神经网络来对region proposals进行特征提取,便于后续进行分类等;2.提出了一种在有标签训练数据较少时,如何有效训练大型卷积神经网络的方法。即可以利用大型的分类任务数据集进行有监督预训练,再用目标数据集(有标签数据较少)进行检测任务的fine-tuning。

6 附录

6.1 讨论如何将region proposal变成227×227大小以输入CNN

作者提出了各向同性和各向异性两大类变化图像大小的方法。
先按列看。图中A列为原始proposal(peoson:尺寸大于227,car:尺寸小于227)。B列和C列属于各向同性方法,即将图像按照原有宽高比来进行拉伸,使长/宽达到227。B和C的不同是,将proposal长拉升到227后,B的宽用原图内容填充到227,而C的宽用proposal像素均值填充到227。D属于各向异性,即暴力的改变原图像宽高比,直接拉升到227×227。
按行看。作者还考虑了用padding对原始proposal进行边缘填充,最后一行和倒数第三行是padding=16的图像填充结果,实验得出padding=16比padding=0的mAP高3-5%。
在这里插入图片描述

6.2 Bounding-box回归器

回归器其实就是对经过NMS后的proposal进行平移和缩放,主要通过CNN进行训练得到。其输入是region proposal的中心点的坐标和长宽,用P表示(P是pool5输出的一个特征向量)。用G来表示ground-truth的坐标和长宽,如下所示(省略了上标i):
在这里插入图片描述在这里插入图片描述
平移量和缩放量都是一个与P相关的函数,即可以看做一个映射关系。只要求出平移量,再加上原坐标,并对原长宽进行缩放,就可以得到回归之后的bbx。其计算公式如下:在这里插入图片描述
每一个d(P )都与pool5输出的特征向量之间存在一个线性映射关系,我们P表示为φ5(P )。故这四个变换可以表示为: d ⋆ ( P ) = w ⋆ T ϕ 5 ( P ) d_{\star}(P)=\mathbf{w}_{\star}^{\mathrm{T}} \boldsymbol{\phi}_{5}(P) d(P)=wTϕ5(P),其中 ⋆=x,y,h,w。我们的目标就是要学出这么一个向量w
求w 可以转化为一个无约束极值问题,即:

w ⋆ = argmin ⁡ w ^ ⋆ ∑ i N ( t ⋆ i − w ^ ⋆ T ϕ 5 ( P i ) ) 2 + λ ∥ w ^ ⋆ ∥ 2 \mathbf{w}_{\star}=\underset{\hat{\mathbf{w}}_{\star}}{\operatorname{argmin}} \sum_{i}^{N}\left(t_{\star}^{i}-\hat{\mathbf{w}}_{\star}^{\mathrm{T}} \boldsymbol{\phi}_{5}\left(P^{i}\right)\right)^{2}+\lambda\left\|\hat{\mathbf{w}}_{\star}\right\|^{2} w=w^argminiN(tiw^Tϕ5(Pi))2+λw^2

上式中, t ⋆ t_{\star} t定义为:

t x = ( G x − P x ) / P w t y = ( G y − P y ) / P h t w = log ⁡ ( G w / P w ) t h = log ⁡ ( G h / P h ) \begin{aligned} t_{x} &=\left(G_{x}-P_{x}\right) / P_{w} \\ t_{y} &=\left(G_{y}-P_{y}\right) / P_{h} \\ t_{w} &=\log \left(G_{w} / P_{w}\right) \\ t_{h} &=\log \left(G_{h} / P_{h}\right) \end{aligned} txtytwth=(GxPx)/Pw=(GyPy)/Ph=log(Gw/Pw)=log(Gh/Ph)

这样就可以通过特征向量得到w ,并进行bbx回归。

7 总结

R-CNN整体思路:
1. 用selective search算法,每张图得到2000个region proposal
2. 将每个proposal变换成227×227,输入训练好的CNN得到该个proposal的4096维特征向量
3. 将特征向量输入到N+1个SVM分类器中得到每个proposal的得分
4. 采用非极大值抑制方法去除一张图中1900多个proposal,初步得到目标检测结果
5. 对第四步得到的bounding box利用训练好的回归器进行回归,结束一张图的目标检测

6.
关于CNN、SVMs和回归器训练见第四章和附录吧。

7.1 优缺点

优点:
原文已经说得差不多了,即:

  1. 利用CNN和SVM的结合很好的完成目标检测,并且mAP碾压了其他方法。
  2. 提出了一种少标签数据集训练大型神经网络的方法,即先用成熟数据集训练,再用有标签数据集微调。

缺点:

  1. 用selective search选取2000个region proposal,显然有特别多重复冗余的候选区域。
  2. 上述问题会极大增加后续CNN和SVMs分类计算量,这导致了训练和检测都需要极大的时间和内存开销。(检测一张图都需要47S)
  3. 特征提取和分类评分两个任务是分开的,导致训练也很麻烦,是否有更好的办法集成到一起,甚至将bbx回归也集成到一起?

7.2 仍旧疑惑的地方?

  • 1.如何用N+1个SVM分类器对每个proposal评分的?
  • 2.对pool5可视化那部分的激活值是如何计算得到的?
  • 3.hard negative mining method

参考:

https://blog.csdn.net/Jwenxue/article/details/107747230
https://blog.csdn.net/v1_vivian/article/details/78599229
https://blog.csdn.net/kk123k/article/details/86515513

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值