计算机视觉(一)RCNN

14 篇文章 0 订阅
11 篇文章 7 订阅

R-CNN全名叫《Rich feature hierarchies for accurate object detection and semantic segmentation》2014【用于精确物体定位和语义分割的丰富特征层次结构】下载链接:https://arxiv.org/abs/1311.2524v3

在RCNN之前,OverFeat已经是深度学习做目标检测公认的方法(https://www.cnblogs.com/coolqiyu/p/9410612.html),但RCNN是第一个可以真正可以工业级应用的解决方案。R-CNN系列论文(R-CNN,fast-RCNN,faster-RCNN)都是使用深度学习进行物体检测的论文,其中fast-RCNN以及faster-RCNN都是沿袭R-CNN的思路。

计算机视觉主要解决图像的分类、定位和对象检测与分割等。

这里写图片描述

简单来说,分类、定位和检测的区别如下:
classify:是什么?
localization:在哪里?是什么?(单个目标)
detection:在哪里?分别是什么?(多个目标) 

论文概述:

摘要

过去几年,在权威数据集PASCAL上,物体检测的效果已经达到一个稳定水平。效果最好的方法是融合了多种低维图像特征和高维上下文环境的复杂融合系统。在这篇论文里,我们提出了一种简单并且可扩展的检测算法,可以将mAP在VOC2012最好结果的基础上提高30%以上——达到了53.3%。我们的方法结合了两个关键的因素:

  1. 使用一个高容量的卷积神经网络将区域特征(region proposals)自底而上的传播,用来定位和分割目标。
  2. 如果有标签的训练数据比较少,可以使用训练好的参数作为辅助,进行微调(fine tuning)提升识别效果。

因为我们把region proposal和CNNs结合起来,所以该方法被称为R-CNN:Regions with CNN features。我们也把R-CNN效果跟OverFeat比较了下(OverFeat是最近提出的在与我们相似的CNN特征下采用滑动窗口进行目标检测的一种方法),结果发现RCNN在200类ILSVRC2013检测数据集上的性能明显优于OVerFeat。

正文

如何将ImageNet上的CNN分类结果运用到VOC挑战的检测任务上。 

第一个问题:需要定位一个图像中的许多物体。一个方法是将框定位看作是回归问题。但将定位问题单纯看作回归问题并不好。另一种方法是使用滑动窗口探测器,但感受视野太大,也不好使。我们通过“recognition using regions”方法,解决CNN的定位问题。测试时,对每张图片,产生了接近2000个与类别无关的region proposal(候选区域),region的大小不同,但都是缩放成同一大小,输入CNN当中,对每个CNN抽取一个固定长度的特征向量,然后借助专门针对类别数据的线性SVM对每个区域进行分类。

论文方法使用滑动窗口探测器,该方法使用CNNs已有20年历史,通常用于一些特定的种类如人脸,行人等。为了获得较高的空间分辨率,这些CNNs都采用了两个卷积层和两个池化层。我们本来也考虑过使用滑动窗口的方法,但是由于网络层次更深,输入图片有非常大的感受野(195×195)and 步长(32×32),这使得采用滑动窗口的方法充满挑战。

我们是通过操作”recognition using regions”范式,解决了CNN的定位问题。测试时,对这每张图片,产生了接近2000个与类别无关的region proposal,对每个CNN抽取了一个固定长度的特征向量,然后借助专门针对特定类别数据的线性SVM对每个区域进行分类。我们不考虑region的大小,使用放射图像变形的方法来对每个不同形状的region proposal产生一个固定长度的作为CNN输入的特征向量(也就是把不同大小的proposal放到同一个大小)。图1展示了我们方法的全貌并突出展示了一些实验结果。 

这里写图片描述

第二个问题:标签数据太少。传统的方法采用无监督训练,再进行有监督训练。本文的第二个核心就是在辅助数据集上(ILSVRC)上进行有监督预训练,再在小数据集上针对特定问题进行调优。这是在训练数据稀少的情况下一个非常有效的训练大型卷积神经网络的方法。远超高度优化的基于HOG的可变性部件模型(deformable part model,DPM)。

DPM:多尺度形变部件模型,连续获得07-09的检测冠军。DPM把物体看成了多个组成的部件(比如人脸的鼻子、嘴巴等),
用部件间的关系来描述物体,这个特性非常符合自然界很多物体的非刚体特征。DPM可以看做是HOG+SVM的扩展,很好的继承了两者的优点,
在人脸检测、行人检测等任务上取得了不错的效果,但是DPM相对复杂,检测速度也较慢,从而也出现了很多改进的方法。

我们的系统也很高效,都是小型矩阵向量相乘和贪婪NMS这些特定类别的计算。这个计算特性源自于特征在不同类别之间的共享(对于不同类别,CNNC提取到的特征是一样的),这比之前使用的区域特征少了两个数量级的维度。HOG-like特征的一个优点是简单性:能够很容易明白提取到的特征是什么,那我们能可视化出CNNC提取到的特征吗?全连接层有超过5千4百万的参数值,这是关键吗?这些都不是,我们将CNN切断,会发现,移除掉其中94%的参数,精度只会下降一点点。相反,通过网络中的探测单元我们可以看到卷积层学习了一组丰富的特性,如图3。

分析我们方法的失败案例,对于进一步提高很有帮助,所以我们借助Hoiem等人的定位分析工具做实验结果的报告和分析。分析结果,我们发发现主要的错误是因为mislocalization,而使用了bounding box regression之后,可以有效的降低这个错误。
介绍技术细节之前,我们提醒大家由于R-CNN是在推荐区域上进行操作,所以可以很自然地扩展到语义分割任务上。只要很小的改动,我们就在PASCAL VOC语义分割任务上达到了很有竞争力的结果,在VOC2011测试集上平均语义分割精度达到了47.9%。

训练

这里写图片描述

这里写图片描述

物体检测有三个模块构成。第一个,产生类别无关的region proposal。这些推荐定义了一个候选检测区域的集合;第二个是一个大型卷积神经网络,用于从每个区域抽取特定大小的特征向量;第三个是一个指定类别的线性SVM。

1.区域推荐(region proposal)有很多类别无关区域推荐的方法,我们采用了选择性搜索方法。近来有很多研究都提出了产生类别无关区域推荐的方法。比如: objectness(物体性),selective search(选择性搜索),category-independent object proposals(类别无关物体推荐),constrained parametric min-cuts(受限参最小剪切, CPMC),multi-scal combinatorial grouping(多尺度联合分组),以及Ciresan等人的方法,将CNN用在规律空间块裁剪上以检测有丝分裂细胞,也算是一种特殊的区域推荐类型。由于R-CNN对特定区域算法是不关心的,所以我们采用了选择性搜索以方便和前面的工作进行可控的比较。
2.特征提取(Feature extration)用Krizhevsky等人所描述的CNN的一个Caffe实现版本对每个推荐区域抽取一个4096维度的特征向量把一个输入为277*277大小的图片,通过五个卷积层和两个全连接层进行前向传播,最终得到一个4096-D的特征向量。读者可以参考AlexNet获得更多的网络架构细节。为了计算region proposal的特征,我们首先要对图像进行转换,使得它符合CNNC的输入(架构中的CNNC只能接受固定大小:277*277)。这个变换有很多办法,我们使用了最简单的一种。无论候选区域是什么尺寸和宽高比,我们都把候选框变形成想要的尺寸。具体的,变形之前,我们现在候选框周围加上16的padding,再进行各向异性缩放。 这种形变使得mAp提高了3到5个百分点。在补充材料中,作者对比了各向异性和各向同性缩放缩放方法。

测试阶段,在测试图像上使用selective search抽取2000个推荐区域(实验中,我们使用了选择性搜索的快速模式)。然后变形每一个推荐区域,再通过CNN前向传播计算出特征。然后我们使用对每个类别训练出的SVM给整个特征向量中的每个类别单独打分。

直接可视化第一层filters非常容易理解,它们主要捕获方向性边缘和对比色。难以理解的是后面的层。Zeiler and Fergus提出了一种可视化的很棒的反卷积办法。我们则使用了一种简单的非参数化方法,直接展示网络学到的东西。这个想法是单一输出网络中一个特定单元(特征),然后把它当做一个正确类别的物体检测器来使用。
方法是这样的,先计算所有抽取出来的推荐区域(大约1000万),计算每个区域所导致的对应单元的激活值,然后按激活值对这些区域进行排序,然后进行最大值抑制,最后展示分值最高的若干个区域。这个方法让被选中的单元在遇到他想激活的输入时“自己说话”。我们避免平均化是为了看到不同的视觉模式和深入观察单元计算出来的不变性。
我们可视化了第五层的池化层pool5,是卷积网络的最后一层,feature_map(卷积核和特征数的总称)的大小是6 x 6 x 256 = 9216维。忽略边界效应,每个pool5单元拥有195×195的感受野,输入是227×227。pool5中间的单元,几乎是一个全局视角,而边缘的单元有较小的带裁切的支持。
图4的每一行显示了对于一个pool5单元的最高16个激活区域情况,这个实例来自于VOC 2007上我们调优的CNN,这里只展示了256个单元中的6个(附录D包含更多)。我们看看这些单元都学到了什么。第二行,有一个单元看到狗和斑点的时候就会激活,第三行对应红斑点,还有人脸,当然还有一些抽象的模式,比如文字和带窗户的三角结构。这个网络似乎学到了一些类别调优相关的特征,这些特征都是形状、纹理、颜色和材质特性的分布式表示。而后续的fc6层则对这些丰富的特征建立大量的组合来表达各种不同的事物。

所有的CNN的参数都是跨类别共享,也就是每个候选区域通过的都是同样的CNN网络。

在表4中,我们给出了VOC 2011测试集上的结果。比较我们的最佳执行方法,fc6(full+fg),对抗两个强大的baselines。我们的方法在21个类别中的11个达到最高的分割精度,最高的总体分割精度为47.9%,平均跨类别(但可能与O2P结果在任何合理的误差范围内)。通过微调可能会取得更好的成绩。

有监督的预训练
我们在大型辅助训练集ILSVRC2012分类数据集(没有约束框数据)上预训练了CNN。预训练采用了Caffe的CNN库。总体来说,我们的CNN十分接近krizhevsky等人的网络的性能,在ILSVRC2012分类验证集在top-1错误率上比他们高2.2%。差异主要来自于训练过程的简化。

特定领域的参数调优
为了让我们的CNN适应新的任务(即检测任务)和新的领域(变形后的推荐窗口)。我们只使用变形后的推荐区域对CNN参数进行SGD训练。我们替换掉了ImageNet专用的1000-way分类层,换成了一个随机初始化的21-way分类层,(其中20是VOC的类别数,1代表背景)而卷积部分都没有改变。我们对待所有的推荐区域,如果其和真实标注的框的IoU>= 0.5就认为是正例,否则就是负例。SGD开始的learning_rate为0.001(是初始化预训练时的十分之一),这使得调优得以有效进行而不会破坏初始化的成果。每轮SGD迭代,我们统一使用32个正例窗口(跨所有类别)和96个背景窗口,即每个mini-batch的大小是128。另外我们倾向于采样正例窗口,因为和背景相比他们很稀少。

目标种类分类器
思考一下检测汽车的二分类器。很显然,一个图像区域紧紧包裹着一辆汽车应该就是正例。同样的,没有汽车的就是背景区域,也就是负例。较为不明确的是怎样标注哪些只和汽车部分重叠的区域。我们使用IoU重叠阈值来解决这个问题,低于这个阈值的就是负例。这个阈值我们选择了0.3,是在验证集上基于{0, 0.1, … 0.5}通过网格搜索得到的。我们发现认真选择这个阈值很重要。如果设置为0.5,可以降低mAP5个点,设置为0,就会降低4个点。正例就严格的是标注的框。

【IOU<0.3被作为负例,ground-truth是正例,其余的全部丢弃】

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

Hard negative sample是指容易被模型预测为positive sample的negative sample,即假阳性False positive。Hard negative mining训练方法是:先用初始样本集(随机选择正负样本)去训练网络,再用训练好的网络去预测负样本集中剩余的负样本,选择被判断为正样本的负样本,即Hard negative sample,加入负样本集中,重新训练网络,循环往复,网络的分类性能越来越强,负样本与正样本之间也越来越相似。

在目标检测中,我们会事先标记好ground_truth,接下来在图片中随机提取一系列sample,与ground_truth重叠率IoU超过一定阈值的(比如0.3),则认为它是positive sample,否则为negative sample。

负例样本数量远远大于正例,通常采用3:1的比例设置训练集训练模型,Hard negative sample类似于错题集,反复地复习错题集,以后遇到类似题目就不会错了。

结论

最近几年,物体检测陷入停滞,表现最好的检测系统是复杂的将多低层级的图像特征与高层级的物体检测器环境与场景识别相结合。本文提出了一种简单并且可扩展的物体检测方法,达到了VOC 2012数据集相对之前最好性能的30%的提升。
我们取得这个性能主要通过两个方面:第一是应用了自底向上的候选框训练的高容量的卷积神经网络进行定位和分割物体。另外一个是使用在标签数据匮乏的情况下训练大规模神经网络的一个方法。我们展示了在有监督的情况下使用丰富的数据集(图片分类)预训练一个网络作为辅助性的工作是很有效的,然后采用稀少数据(检测)去调优定位任务的网络。我们猜测“有监督的预训练+特定领域的调优”这一范式对于数据稀少的视觉问题是很有效的。最后,我们注意到能得到这些结果,将计算机视觉中经典的工具和深度学习(自底向上的区域候选框和卷积神经网络)组合是非常重要的。

 

参考:

R-CNN论文详解(论文翻译)https://blog.csdn.net/v1_vivian/article/details/78599229

R-CNN https://www.jianshu.com/p/381ffa6e525a

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值