目标检测风云(一)two-stage之 RCNN

我先暴风哭泣一下,编辑了6个多小时,没有保存的我卷土重来了,大家使用markdown的时候记得及时保存

最近在看decetion的问题,整理了一下近些天来读的paper~

RCNN

问题

如何利用深度的神经网络去做目标的定位? 如何在一个小规模的数据集上训练能力强劲的网络模型?

解决

利用候选区域与 CNN 结合做目标定位 借鉴了滑动窗口思想,R-CNN 采用对区域进行识别的方案。

具体是:

  • 给定一张输入图片,从图片中提取 2000 个类别独立的候选区域。
  • 对于每个区域利用 CNN 抽取一个固定长度的特征向量。
  • 再对每个区域利用 SVM 进行目标分类。

利用预训练与微调解决标注数据缺乏的问题

  • 采用在 ImageNet 上已经训练好的模型,然后在 PASCAL VOC 数据集上进行 fine-tune。
  • 因为 ImageNet 的图像高达几百万张,利用卷积神经网络充分学习浅层的特征,然后在小规模数据集做规模化训练,从而可以达到好的效果。

测试过程

输入一张多目标图像,采用selective search算法提取约2000个建议框;

先在每个建议框周围加上16个像素值为建议框像素平均值的边框,再直接变形为227×227的大小;

先将所有建议框像素减去该建议框像素平均值后【预处理操作】,再依次将每个227×227的建议框输入AlexNet CNN网络获取4096维的特征【比以前的人工经验特征低两个数量级】,2000个建议框的CNN特征组合成2000×4096维矩阵;

将2000×4096维特征与20个SVM组成的权值矩阵4096×20相乘【20种分类,SVM是二分类器,则有20个SVM】,获得2000×20维矩阵表示每个建议框是某个物体类别的得分;

分别对上述2000×20维矩阵中每一列即每一类进行非极大值抑制剔除重叠建议框,得到该列即该类中得分最高的一些建议框;

分别用20个回归器对上述20个类别中剩余的建议框进行回归操作,最终得到每个类别的修正后的得分最高的bounding box。

能够生成候选区域的方法很多,比如:

objectness
selective search
category-independen object proposals
constrained parametric min-cuts(CPMC)
multi-scale combinatorial grouping
Ciresan
R-CNN 采用的是 Selective Search 算法。

特征抽取

R-CNN 抽取了一个 4096 维的特征向量,采用的是 Alexnet,基于 Caffe 进行代码开发。

需要注意的是 Alextnet 的输入图像大小是 227x227。

而通过 Selective Search 产生的候选区域大小不一,为了与 Alexnet 兼容,R-CNN 采用了非常暴力的手段,那就是无视候选区域的大小和形状,统一变换到 227*227 的尺寸。

有一个细节,在对 Region 进行变换的时候,首先对这些区域进行膨胀处理,在其 box 周围附加了 p 个像素,也就是人为添加了边框,在这里 p=16。

测试阶段的目标检测

在测试阶段,R-CNN 在每张图片上抽取近 2000 个候选区域。

然后将每个候选区域进行尺寸的修整变换,送进神经网络以读取特征,然后用 SVM 进行类别的识别,并产生分数。

候选区域有 2000 个,所以很多会进行重叠。

针对每个类,通过计算 IoU 指标,采取非极大性抑制,以最高分的区域为基础,剔除掉那些重叠位置的区域。

运行时分析

两个因素可以让目标识别变得高效。

CNN 的参数是所有类别共享的。 R-CNN 生成的特征向量维度较少。论文拿应用在 UVA 采用的空间金字塔技术相比,它们生成的特征维度是
360k,而 R-cnn 就 4K 多。也就是运行过程中,参数变少了,所以比传统的高效。

体现在提取特征的时间,如果用 GPU ,13s/张,CPU 53s/张。 R-cnn 能够处理 100k 种类别,在一个多核的 CPU
上只要花费 10 多秒。
与 UVA 相比,如果处理 100k 个预测,需要 134GB 内存空间,而 R-CNN 只要 1.5GB。

问题分析

1.selective search

采取过分割手段,将图像分割成小区域,再通过颜色直方图,梯度直方图相近等规则进行合并,最后生成约2000个建议框的操作。

2.为什么要将建议框变形为227×227?怎么做?

本文采用AlexNet CNN网络进行CNN特征提取,为了适应AlexNet网络的输入图像大小:227×227,故将所有建议框变形为227×227。
那么问题来了,如何进行变形操作呢?作者在补充材料中给出了四种变形方式:

① 考虑context【图像中context指RoI周边像素】的各向同性变形,建议框像周围像素扩充到227×227,若遇到图像边界则用建议框像素均值填充,下图第二列;
② 不考虑context的各向同性变形,直接用建议框像素均值填充至227×227,下图第三列;
③各向异性变形,简单粗暴对图像就行缩放至227×227,下图第四列;
④变形前先进行边界像素填充【padding】处理,即向外扩展建议框边界,以上三种方法中分别采用padding=0下图第一行,padding=16下图第二行进行处理;
经过作者一系列实验表明采用padding=16的各向异性变形即下图第二行第三列效果最好,能使mAP提升3-5%。

在这里插入图片描述

3.CNN特征如何可视化?

文中采用了巧妙的方式将AlexNet
CNN网络中Pool5层特征进行了可视化。该层的size是6×6×256,即有256种表示不同的特征,这相当于原始227×227图片中有256种195×195的感受视野【相当于对227×227的输入图像,卷积核大小为195×195,padding=4,step=8,输出大小(227-195+2×4)/8+1=6×6】;
文中将这些特征视为”物体检测器”,输入10million的Region
Proposal集合,计算每种6×6特征即“物体检测器”的激活量,之后进行非极大值抑制【下面解释】,最后展示出每种6×6特征即“物体检测器”前几个得分最高的Region
Proposal,从而给出了这种6×6的特征图表示了什么纹理、结构,很有意思。

4.为什么要进行非极大值抑制?非极大值抑制又如何操作?

先解释什么叫IoU。IoU即表示(A∩B)/(A∪B)
① 对2000×20维矩阵中每列按从大到小进行排序;
②从每列最大的得分建议框开始,分别与该列后面的得分建议框进行IoU计算,若IoU>阈值,则剔除得分较小的建议框,否则认为图像中存在多个同一类物体;
③ 从每列次大的得分建议框开始,重复步骤②;
④ 重复步骤③直到遍历完该列所有建议框;
⑤遍历完2000×20维矩阵所有列,即所有物体种类都做一遍非极大值抑制;
⑥ 最后剔除各个类别中剩余建议框得分少于该类别阈值的建议框。

在这里插入图片描述

5.为什么要采用回归器?回归器是什么有什么用?如何进行操作?

首先要明确目标检测不仅是要对目标进行识别,还要完成定位任务,所以最终获得的bounding-box也决定了目标检测的精度。
这里先解释一下什么叫定位精度:定位精度可以用算法得出的物体检测框与实际标注的物体边界框的IoU值来近似表示。

如下图所示,绿色框为实际标准的卡宴车辆框,即Ground Truth;黄色框为selective
search算法得出的建议框,即Region
Proposal。即使黄色框中物体被分类器识别为卡宴车辆,但是由于绿色框和黄色框IoU值并不大,所以最后的目标检测精度并不高。采用回归器是为了对建议框进行校正,使得校正后的Region
Proposal与selective search更接近,
以提高最终的检测精度。论文中采用bounding-box回归使mAP提高了3~4%。

在这里插入图片描述

回归器的设计【挖坑。。。。我也没看懂。捂脸哭……这只是暂时的!!!】

训练过程

有监督预训练

样本来源
正样本ILSVRC2012
负样本ILSVRC2012

ILSVRC样本集上仅有图像类别标签,没有图像物体位置标注;
采用AlexNet CNN网络进行有监督预训练,学习率=0.01;
该网络输入为227×227的ILSVRC训练集图像,输出最后一层为4096维特征->1000类的映射,训练的是网络参数。

特定样本下的微调

样本来源
正样本Ground Truth+与Ground Truth相交IoU>0.5的建议框
负样本与Ground Truth相交IoU≤0.5的建议框

PASCAL VOC 2007样本集上既有图像中物体类别标签,也有图像中物体位置标签;
采用训练好的AlexNet CNN网络进行PASCAL VOC 2007样本集下的微调,学习率=0.001【0.01/10为了在学习新东西时不至于忘记之前的记忆】;
mini-batch为32个正样本和96个负样本【由于正样本太少】;
该网络输入为建议框【由selective search而来】变形后的227×227的图像,修改了原来的1000为类别输出,改为21维【20类+背景】输出,训练的是网络参数。

SVM训练

样本来源
正样本Ground Truth
负样本与Ground Truth相交IoU<0.3的建议框

由于SVM是二分类器,需要为每个类别训练单独的SVM;
SVM训练时输入正负样本在AlexNet CNN网络计算下的4096维特征,输出为该类的得分,训练的是SVM权重向量;
由于负样本太多,采用hard negative mining的方法在负样本中选取有代表性的负样本,该方法具体见。

Bounding-box regression训练

样本来源
正样本与Ground Truth相交IoU最大的Region Proposal,并且IoU>0.6的Region Proposal

输入数据为某类型样本对N个:{(Pi,Gi)}i=1⋯N以及Pii=1⋯N所对应的AlexNet CNN网络Pool5层特征ϕ5(Pi)i=1⋯N,输出回归后的建议框Bounding-box,训练的是dx§,dy§,dw§,dh§四种变换操作的权重向量。具体见前面分析。

问题分析

什么叫有监督预训练?为什么要进行有监督预训练?

有监督预训练也称之为迁移学习,举例说明:若有大量标注信息的人脸年龄分类的正负样本图片,利用样本训练了CNN网络用于人脸年龄识别;现在要通过人脸进行性别识别,那么就可以去掉已经训练好的人脸年龄识别网络CNN的最后一层或几层,换成所需要的分类层,前面层的网络参数直接使用为初始化参数,修改层的网络参数随机初始化,再利用人脸性别分类的正负样本图片进行训练,得到人脸性别识别网络,这种方法就叫做有监督预训练。这种方式可以很好地解决小样本数据无法训练深层CNN网络的问题,我们都知道小样本数据训练很容易造成网络过拟合,但是在大样本训练后利用其参数初始化网络可以很好地训练小样本,这解决了小样本训练的难题。
这篇文章最大的亮点就是采用了这种思想,ILSVRC样本集上用于图片分类的含标注类别的训练集有1millon之多,总共含有1000类;而PASCAL VOC 2007样本集上用于物体检测的含标注类别和位置信息的训练集只有10k,总共含有20类,直接用这部分数据训练容易造成过拟合,因此文中利用ILSVRC2012的训练集先进行有监督预训练。

ILSVRC 2012与PASCAL VOC 2007数据集有冗余吗?

即使图像分类与目标检测任务本质上是不同的,理论上应该不会出现数据集冗余问题,但是作者还是通过两种方式测试了PASCAL 2007测试集和ILSVRC 2012训练集、验证集的重合度:第一种方式是检查网络相册IDs,4952个PASCAL 2007测试集一共出现了31张重复图片,0.63%重复率;第二种方式是用GIST描述器匹配的方法,4952个PASCAL 2007测试集一共出现了38张重复图片【包含前面31张图片】,0.77%重复率,这说明PASCAL 2007测试集和ILSVRC 2012训练集、验证集基本上不重合,没有数据冗余问题存在。

可以不进行特定样本下的微调吗?可以直接采用AlexNet CNN网络的特征进行SVM训练吗?

文中设计了没有进行微调的对比实验,分别就AlexNet CNN网络的pool5、fc6、fc7层进行特征提取,输入SVM进行训练,这相当于把AlexNet CNN网络当做万精油使用,类似HOG、SIFT等做特征提取一样,不针对特征任务。实验结果发现f6层提取的特征比f7层的mAP还高,pool5层提取的特征与f6、f7层相比mAP差不多;
在PASCAL VOC 2007数据集上采取了微调后fc6、fc7层特征较pool5层特征用于SVM训练提升mAP十分明显;
由此作者得出结论:不针对特定任务进行微调,而将CNN当成特征提取器,pool5层得到的特征是基础特征,类似于HOG、SIFT,类似于只学习到了人脸共性特征;从fc6和fc7等全连接层中所学习到的特征是针对特征任务特定样本的特征,类似于学习到了分类性别分类年龄的个性特征。

为什么微调时和训练SVM时所采用的正负样本阈值【0.5和0.3】不一致?

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

为什么不直接采用微调后的AlexNet CNN网络最后一层SoftMax进行21分类【20类+背景】?

因为微调时和训练SVM时所采用的正负样本阈值不同,微调阶段正样本定义并不强调精准的位置,而SVM正样本只有Ground Truth;并且微调阶段的负样本是随机抽样的,而SVM的负样本是经过hard negative mining方法筛选的;导致在采用SoftMax会使PSACAL VOC 2007测试集上mAP从54.2%降低到50.9%。

IoU的数值设置

IoU 的 threshold 它不是作者胡乱取值的,而是来自 {0,0.1,0.2,0.3,0.4,0.5} 的数值组合的。而且,这个数值至关重要,如果 threshold 取值为 0.5,mAP 指标直接下降 5 个点,如果取值为 0,mAP 下降 4 个点。一旦特征抽取成功,R-CNN 会用 SVM 去识别每个区域的类别,但这需要优化。因为训练的数据太大,不可能一下子填充到电脑内存当中,R-CNN 作者采取了一种叫做 Hard negetive mining 的手段。

R-CNN 的在 PASCAL-VOC 2010-12 的表现

R-CNN 是在 PASCAL VOC 2012 进行最终的 fine-tune,也是在 VOC 2012 的训练集上优化 SVM.
然后,还与当时 4 个强劲的对手,也就是 4 个不同的目标检测算法进行了比较。
在这里插入图片描述

值得关注的是,上面表格中 UVA 检测系统也采取了相同的候选区域算法,但 R-CNN 的表现要好于它。可视化、框架精简和错误检测。我们都知道,在卷积神经网络中,第一层可以直接用来显示,而且肉眼可视,通常他们是为了捕捉物体边缘,及突出的颜色信息,但越往后的卷积层越抽象,这个时候进行可视化就是一个挑战了。
Zeiler 和 Fergus 提出了一种基于反卷积手段的可视化研究,但 R-CNN 的作者直接提供了一个没有参数的方法,简单直接。思路是挑选一个特征出来,把它直接当成一个物体分类器,然后计算它们处理不同的候选区域时,activation 的值,这个值代表了特征对这块区域的响应情况,然后将 activation 作为分数排名,取前几位,然后显示这些候选区域,自然也可以清楚明白,这个 feature 大概是什么。
R-CNN 作者将 pool5 作为可视化对象,它的 feature map 是 6x6x255 的规格,可以理解为有 256 个小方块,每个方块对应一个特征。

下面的图表中显示了这以可视化的效果,这里只显示了 256 个特征中的 6 个,每个特征取 activation 值最高的 16 个区域。

在这里插入图片描述

框架精简AlexNet 有 7 层,那么那些层是关键指标呢?哪些层可有可无呢?

在这里插入图片描述

pool5 在上一小节已经讨论过了,那么 fc6 和 f7 就成了研究的对象。
fc6 与 pool5 构成全连接,为了计算 feature 它会乘以一个 4096x9216 的权重矩阵,然后在与一组 bias 相加,所以它有 3700 多万的参数。
fc7 是最后一层,它的权重矩阵是 4096x409,它的参数有 1678 万多的参数。
但经过作者在 PASCAL 上不做 fine-tune 处理,直接测试,可以发现 fc7 的意义没有 fc6 大,甚至移除它之后,对于 mAP 结果指标没有影响。
移除 fc7 就表示可以减少将近 1800 万个参数。

更惊喜的事情是,同时移除 fc6 和 fc7 并没有多大的损失,甚至结果还要好一点点
所以,神经网络最神奇的力量来自卷积层,而不是全连接层。
上面说的是没有 fine-tune 的情况,那么在 fine-tune 的情况是什么呢?
结果证明,fine-tune 后 fc6 与 fc7 提升的效果明显。

所以结论就是,pool5 从 ImageNet 训练集中学习了物体的泛化能力,而能力的提升则是通过特定领域的 fine-tune。

举个例子,神经网络在 ImageNet 数据集中学习到了 100 种猫的特征,而我自己的数据集只有两种猫,经过 fine-tune 训练后,这个神经网络可以更准确识别这两种猫了。
R-CNN 还与其他的特征方法进行了能力比较,作者选取了两种基于 DPM 的方法,DPM ST 和 DPM HSC,结果都证明,R-CNN 要好于它们。

目标检测错误分析

R-CNN 作者采用了 Hoiem 提出的目标检测分析工具,能够直观地揭露错误的模型,作者通过这个工具针对性地进行 fine-tune。

bbox 回归

bbox 的值其实就是物体方框的位置,预测它就是回归问题,而不是分类问题。
受 DPM 的启发,作者训练了一个线性的回归模型,这个模型能够针对候选区域的 pool5 数据预测一个新的 box 位置。具体细节,作者放在补充材料当中。

语义分割

区域分类技术是语义分割的标准做法,所以 R-CNN 也可以做语义分割,并且作者拿它跟 O2P 来比较。
R-CNN 进行语义分割分为 3 个阶段。

利用 CPMC 生成候选区域,然后将这些区域调整大小为 227x227,送到神经网络当中,这是 full 阶段,区域中有背景也有前景。
这个阶段只处理候选区域的前景,将背景用输入的平均值代替,然后背景就变成了 0 ,这个阶段称为 fg。
full + fg 阶段,将背景和前景简单拼接。

还存在的问题

还存在什么问题

很明显,最大的缺点是对一张图片的处理速度慢,这是由于一张图片中由selective search算法得出的约2k个建议框都需要经过变形处理后由CNN前向网络计算一次特征,这其中涵盖了对一张图片中多个重复区域的重复计算,很累赘;

知乎上有人说R-CNN网络需要两次CNN前向计算,第一次得到建议框特征给SVM分类识别,第二次对非极大值抑制后的建议框再次进行CNN前向计算获得Pool5特征,以便对建议框进行回归得到更精确的bounding-box,这里文中并没有说是怎么做的,博主认为也可能在计算2k个建议框的CNN特征时,在硬盘上保留了2k个建议框的Pool5特征,虽然这样做只需要一次CNN前向网络运算,但是耗费大量磁盘空间;

训练时间长,虽然文中没有明确指出具体训练时间,但由于采用RoI-centric sampling【从所有图片的所有建议框中均匀取样】进行训练,那么每次都需要计算不同图片中不同建议框CNN特征,无法共享同一张图的CNN特征,训练速度很慢;

整个测试过程很复杂,要先提取建议框,之后提取每个建议框CNN特征,再用SVM分类,做非极大值抑制,最后做bounding-box回归才能得到图片中物体的种类以及位置信息;同样训练过程也很复杂,ILSVRC 2012上预训练CNN,PASCAL VOC 2007上微调CNN,做20类SVM分类器的训练和20类bounding-box回归器的训练;这些不连续过程必然涉及到特征存储、浪费磁盘空间等问题。

再补充几点总结:
(1)数据总共有三个训练用途:CNN fine-tune、SVM training、bounding-box regression training;
(2)文中作者还分析了几种可能会对实验结果产生影响的因素,建议看一看,对以后自己想问题很有帮助:三种训练集数量、数据集选择、BB、RP这几种影响因素;
(3)文中作者还考虑了R-CNN和Overfeat算法的关系,并留下了如何提速R-CNN这一悬念;
(4)用R-CNN来做语义分割,计算features的两种策略:fg和full以及它们如何选择;
(5)附录中对于resized操作、Bounding-box regression、数据冗余等有详细介绍,可以看一看;

回顾

R-CNN 采用 AlexNet
R-CNN 采用 Selective Search 技术生成 Region Proposal.
R-CNN 在 ImageNet 上先进行预训练,然后利用成熟的权重参数在 PASCAL VOC 数据集上进行 fine-tune
R-CNN 用 CNN 抽取特征,然后用一系列的的 SVM 做类别预测。
R-CNN 的 bbox 位置回归基于 DPM 的灵感,自己训练了一个线性回归模型。
R-CNN 的语义分割采用 CPMC 生成 Region
R-CNN 灵活地运用了现有比较先进的工具和技术,并充分吸收,根据自己的逻辑改造,最终取得了很大的进步。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值