当前位置: 代码迷 >> 综合 >> (2014)Rich feature hierarchies for accurate object detection and semantic segmentation Tech report
  详细解决方案

(2014)Rich feature hierarchies for accurate object detection and semantic segmentation Tech report

热度:29   发布时间:2023-10-11 16:04:45.0

(2014)Rich feature hierarchies for accurate object detection and semantic segmentation Tech report(v5)

作者:Ross Girshick ;Jeff Donahue ;Trevor Darrell; Jitendra Malik; UC Berkeley

这篇文章是深度学习领域的经典著作,其提出的方法被称为RCNN,主要是应用在目标检测上。在上个博客中介绍的Overfeat方法在RCNN未出现之前是当时最好的目标检测算法,但是却难应用于工业界。而RCNN可以真正的应用于工业,后续在其基础上又有了Fast-RCNN、Faster-RCNN等更加有优势的算法。

1. 文章主要内容

RCNN(Regions with CNN features)将region proposal与CNN相结合用于检测任务。

1.1 文章创新点

  1. 文章使用CNN网络来提取图像特征,与原来使用SIFT和HOG(blockwise orientation histograms)相比更加有效。因为在CNN中提取特征的方法是自下而上的,这种模式更符合人的视觉系统。
  2. 检测模型的训练受制于有限的数据,少量的数据易产生过拟合问题。论文提出先使用大样本进行有监督的预训练,再使用少量的小样本对模型参数进行微调。

1.2 先前方法经验总结

  1. Szegedy等人将框定位视为回归问题,但其在VOC2007上mAP仅达到了30.5%这证明将定位问题简单的视为回归问题的效果并不好。
  2. 原来检测问题中多使用滑动窗口方法,但是随着网络层次的增加,使用滑动窗口法将使得模型训练更加困难。比如输入图片的感受野为195195,步长为3232,使用滑动窗口法计算难度将大大增加。

1.3 文章所提方法流程

(2014)Rich feature hierarchies for accurate object detection and semantic segmentation Tech report

  1. 从输入的图片中自下而上的提取2000个region proposals。
  2. 使用一个大型的卷积网络提取每个region proposal中固定长度的特征向量。
  3. 使用SVM将每个region分类。

2. RCNN方法细节

2.1 模型设计

Reigion Proposal: 通过selective search的方法获得region。selective search是通过将图像分割成小区域后,再经过颜色直方图计算,使用梯度直方图相近等规则进行合并,最后得出约2000个region proposal。(方法详细内容)
Feature extraction: 文章使用的是AlexNet网络模型从region proposal中提取出一个4096维的特征向量。(AlexNet模型详细内容)
在AlexNet模型中,输入大小固定为227*227,因此我们需要将region proposal进行大小调整,在这里文章通过在候选框周围添加16个像素(相当于padding大小,添加的像素是图像边界像素),采用各向异性缩放(定义在文章下面),使得mAp提高了3~5个百分点。

2.2 运行时检测(Test-time detection)

步骤: 在test image上提取出2000个region proposal。对每个region进行变形处理后输入CNN提取特征;在每个类中(一张图片可能得到多个类),训练SVM为每个提取出来的特征向量打分;对于一张图片上所有打分的区域,应用IoU方法将一些大于阈值的region删除。
性能分析: RCNN性能较好主要得益于两个优势:1.CNN模型所有类别参数共享;2.提取出来的特征相较于其他方法提取出的属于低维。
因为上述原因,计算region proposal以及特征的时间相当于被均分到了每个类上(类间参数共享),在GPU上13s/image,CPU上53s/image。不共享的计算就是每个类的特征与SVM权重进行矩阵乘法(点乘)和使用非最大值抑制(筛选region)。其中特征矩阵的大小为20004096,SVM权重大小为4096N(N是最终分类类别个数)。
从上述描述我们也可以看出R-CNN的另一个优势就是分类的数量可以随意变化,不需要其他手段进行调整。

2.3 Training

监督预训练(Supervised pre-training): 在进行真正的训练之前文章先使用了进行了图像标注,没有bounding-box标注的ILSVRC2012数据集进行预训练。
特定领域的微调(Domain-specific fine-tuning): 我们使用的模型是预训练模型,所以为了让模型适应新的任务,必须进行微调。文章仅在进行调整过的图片(warped region proposals)使用SGD进行训练。预训练数据集使用的是ImageNet,因此在预训练网络中最后会将其分为1000类,因此需要改初始化分类器为(N+1),其中N是最终的分类数,+1表示无任何物品的背景。在训练模型时把带有ground-truth且IoU的值大于等于0.5的region proposal视为positive样本,剩余的样本视为negative样本。
模型把SGD的学习率设为0.001(微调,学习率不宜太大,文章中提到此学习率是预训练时的1/10),每次SGD迭代,mini-bach的大小设置为128,其中包含32个positive样本,96个negative样本。
对象类别分类器(Object category classifiers): 我们都知道,包含整个物体的region是positive的,没有任何物体的背景图片是negative的,那么怎样去界定包含部分物体的region呢?文章利用IoU设置阈值来判定样本的正负,作者使用grid search方法在验证集范围{0,0.1,…,0.5}中选择了最合适的阈值0.5。
注意,在此模型中为图片中的每个类都选择一个线性SVM分类器。为了让庞大的训练数据适应内存文章使用了hard negative mining method。
在这里大家可能会产生疑问:为什么微调模型时正负样本设置的差异较大呢? 因为正样本非常少。

2.4 Result

文章主要在两个数据集上与其他方法进行了对比。

  1. PASCAL VOC 2010-12
    我们可以看到带有Bounding box regression的R-CNN模型取得了很好的结果。
    (2014)Rich feature hierarchies for accurate object detection and semantic segmentation Tech report
  2. ILSVRC2013
    左图显示R-CNN BB的mAP比OverFeat提高了很多。这里有一点需要注意,在OverFeat中没有单独计算每个类的AP,因此无法与Table1中的数据无法比较。
    (2014)Rich feature hierarchies for accurate object detection and semantic segmentation Tech report

3. Visualization, ablation, and modes of error

我理解ablation的意思是消除,消除模型中不必要的部分,但具体怎么翻译不太清楚,求指教。

3.1 可视化学习特征(Visualizing learned features)

这一部分主要讲怎样将学习到的特征可视化。

我们都知道第一层过滤器捕捉的特征是一些定向边和颜色。但是如何去查看后面层中得到的特征似乎并不容易。文章提出一个方法,在网络中挑选出一个unit,把它当作一个独立的对象检测器来使用。在一个大的region proposals上(大约1000万)计算这个单元的激活值,将结果按照由高到低的顺序排列,再执行非最大值抑制,显示出得分最高的区域,我们就可以知道这个unit着重提取什么特征了。文章中有个词形容这个方法很贴切–“speak for itself”。

文章对layerpool5layer pool_5layerpool5?提取出的特征进行可视化。在前文提到网络模型有固定的输入227227,除去我们所说的pixel padding(162 pixel)外,真正有意义的输入大小是195195。最终layerpool5layer pool_5layerpool5?的特征大小为66*256=9216维。

下图中每行有激活单元的16个激活值,是在VOC 2007上微调。在256个单元中选择了6个可以进行可视化的单元。
(2014)Rich feature hierarchies for accurate object detection and semantic segmentation Tech report

3.2 Ablation studies

Performance layer-by-layer, without fine-tuning: 这一部分主要讲解网络模型的最后三层哪一层对检测的性能影响最大,此过程使用数据集维VOC2007。pool5pool_5pool5?前面已经讲过了。fc6fc_6fc6?是全连接层,其权重维数为40969216,fc7fc_7fc7?的权重维数为40964096,两层都添加了偏差,使用half-wave修正(x?max(0,x))。

文章使用数据集PASCAL训练CNN,且未进行微调。CNN模型的所有参数都仅使用了ILSVRC 2012进行预处理。

作者发现使用fc7fc_7fc7?得到的特征比使用fc6fc_6fc6?得到的特征效果更好,这也就意味着在不降低mAP的前提下可以减少29%的参数,大约16.8million个。同时,作者也提出直接使用pool5pool_5pool5?层得到的特征也能得到很好的结果,这也意味着仅使用6%的参数就可以。

Performance layer-by-layer, with fine-tuning: 使用的数据集依然是VOC 2007。从表中可以看出经过微调,与pool5pool_5pool5?相比,fc6fc6fc6fc7fc7fc7带来的提升要大很多,这也说明pool5pool_5pool5?学习到的特征是普遍特征(没有针对性),而在其上层的对特定领域(具体学习某个类别)学习的非线性分类器更能获得针对性的特征。

上述所有均在下表体现。
(2014)Rich feature hierarchies for accurate object detection and semantic segmentation Tech report

3.3 网络结构

在前面我们提到的很多结果都是使用的AlexNet,但是这里作者提出在VOC2007数据集上使用16-层网络获得的效果更好,该网络结构由13层3*3的卷积核组成,中间穿插了5个最大池化层,顶部有3个全连接层,这个网络结构被称为"O-Net",下表中与网络结构"T-Net"做了对比。其中在R-CNN中使用的O-Net预处理使用的是VGG ILSVRC 16 layers模型权重。
(2014)Rich feature hierarchies for accurate object detection and semantic segmentation Tech report

3.4 Detection 错误分析

下图中显示了每种模型在六个不同情况(occlusion,truncation,bounding-box area,aspect ration,viewpoint,part visibility)下的AP值。其中FT表示模型进行了微调,BB表示使用课Bounding box regressor。可以看出微调不会降低灵敏度(最大值和最小值之间的差异),但会显著改善几乎所有特性的最高和最低性能子集。也显示出微调可以提高每种情况的最差表现。
(2014)Rich feature hierarchies for accurate object detection and semantic segmentation Tech report
从下图可以看出RCNN方法与DPM相比,更多的错误出现在不正确的定位(Loc)上,而不是与背景混合或者错误的分类。丢失正确的定位很有可能是因为模型使用了自下而上的区域获取方法和使用预处理的CNN对整张图片进行分类的位置不变性造成的。第三列显示出了使用bounding-box regression方法后修复了很多定位错误的信息。
(2014)Rich feature hierarchies for accurate object detection and semantic segmentation Tech report

4. The ILSVRC2013 detection dataset

4.1 数据集总览

文章使用的是ILSVRC数据集,将其划分成三个部分:训练集(395,918),验证集(20,121)以及测试集(40,152)。其中验证集与测试集中的数据都被详细的标注过了,包括bounding box。训练集中的数据具有更可变的复杂性,并倾向于单一居中对象的图像。而且训练集中的数据都没有被标注过。除了这些图像集以外,每类(class)图像额外附有negative images。

文章中提到positive样本主要来源于验证集,还有一些来自于训练集。为了让验证集同时满足训练和验证,作者将验证集粗略的划分成两部分"val1{val_1}val1?“与”val2{val_2}val2?"。如何将验证集划分的相对平衡?利用验证集图像的类数作为特征进行聚类,生成每个候选分割,然后进行随机化的局部搜索,以改善分割平衡。

4.2 Region proposals

上面说到文章使用的数据集是ILSVRC,模型使用Selective research方法运行在fast mode上(fast mode详见论文OverFeat),需要调整的一点是改进fast mode上selective research上的scale variant。因为ILSVRC数据集上图像的尺寸大小不一,所以先将"val1{val_1}val1?“与”val2{val_2}val2?"中的图像大小统一调整为500 pixels。在验证集上一张图片平均产生约2403个候选区域,这些区域与真实bouding-box大约有91.6%的召回率,在ILSVRC上的召回率明显低于在PASCAL(98%)的召回率。论文中提到这是可以改进的一个地方。

4.3 Training data

训练数据集包含val1{val_1}val1?中的selective search和ground-truth boxes以及训练集中每个类中的N个ground-truth boxes。文章中把这个数据集称为val1+trainNval_1 + train_Nval1?+trainN?

4.4 与OverFeat的关系

OverFeat方法可以看为R-CNN的一个特例。只不过OverFeat方法只有一个bounding-box regressor,而R-CNN每个类都有一个bounding-box regressor。并且,OverFeat方法比R-CNN方法大约快9倍。这是因为OverFeat方法中的滑窗,即不需要弯曲调整图片而且滑动窗口的重叠部分之间参数共享。

5. Semantic segmentation

CNN features for segmentation:
文章使用三种策略来计算CPMC regions上的特征,当然首先需要将region调整到227*227。
第一个策略(full):这个策略忽视了region的形状并直接使用CNN计算warped region中的特征。
第二个策略(fg):第二个策略仅计算region的foreground mask。
第三个策略(full+fg):将full与fg相结合。
(2014)Rich feature hierarchies for accurate object detection and semantic segmentation Tech report
(2014)Rich feature hierarchies for accurate object detection and semantic segmentation Tech report

疑问解答

1.对图片进行变形处理。

在文章中提到使用padding=16的各向异性变形效果最好。
各向同性缩放:长宽缩放相同的倍数。

  • tightest square with context:把region proposal的边界延展成正方形,需要延展的部分用原始图像中的边缘像素填充,如下面图中的(B)列所示。
  • tightest square without context:把region proposal的边界进行扩展延伸成正方形,灰色部分不填补,如下面图中的?列所示。

各向异性缩放, 长宽放缩的倍数不同。

  • 不管图片是否扭曲,长宽缩放的比例可能不一样,直接将长宽缩放到227*227,如下图(D)所示。
    下图中第一行padding=0;第二行padding=16。
    (2014)Rich feature hierarchies for accurate object detection and semantic segmentation Tech report

2. 非极大值抑制方法

IoU又称为交并比,顾名思义就是region proposal与ground-truth box交集与并集的比。我们都知道物体检测中,一个图像中的某个物体可能会有多个预测框,而IoU方法就是将一个物体的多个框进行筛选,去除得分很低的候选框。
具体的过程如下:此过程参照博客(地址)

  1. 对2000*20维矩阵中每列从大到小进行排列。
  2. 从每列最大的得分建议框开始,分别与该列后面的得分建议框进行IoU计算,如果IoU>阈值,则删除两个框中得分较低的建议框,否则保留这个建议框,认为图像中存在多个物体。
  3. 再从每列次大的得分建议框开始,重复步骤2。
  4. 重复步骤3直至遍历万所有的建议框。
  5. 遍历完2000*20维矩阵所有的列,也就是所有种类的物体都做了一遍非极大值抑制。
  6. 最后剔除各个类别中剩余建议框得分少于该类别阈值的建议框。

3. 为什么进行SVM训练的样本与CNN训练的样本负样本IoU定义不同?

  1. 进行微调时,正样本选自与ground-truth>0.5的region做正样本,小于等于0.5的做负样本。
  2. 训练SVM时,正样本为ground-truth,负样本为与ground-truth相交<0.3的建议框。
    为什么两者的定义差别较大呢,因为CNN训练需要的样本数是大量的,而在数据集中正样本的数量很小,所以将阈值设置为0.5。而训练SVM并不需要大量数据,因此对数据要求严格一些更有利于提高训练精度。
  相关解决方案