文章目录
前言
本课程来自深度之眼,部分截图来自课程视频。
文章标题:Rich feature hierarchies for accurate object detection and semantic segmentation
作者:Ross Girshick, Jeff Donahue, Trevor Darrell, Jitendra Malik
发表时间:2016
感谢同学提供其他资料:https://www.cnblogs.com/skyfsm/p/6806246.html
导读
论文的研究背景、成果及意义
为大家解答为什么这篇论文成为了近几年来目标检测领域非常火热的论文。
目标检测的概念:
研究背景
分类:解决是什么的问题
定位:解决在哪里的问题
检测:综合分类和定位,解决是什么在哪里的问题
分割:分为实例分割和场景分割
目标检测要解决的核心问题:
1、目标可能出现在图像的任何位置
2、目标有各种不同的大小
3、目标可能有各种不同的形状
目前深度学习目标检测算法已超越传统检测方法,可以分两类:
1、基于区域提名的目标检测算法
区域提名,即针对图像中目标物体位置, 预先提出候选区域的方法。
主流的基于区域提名的目标检测算法主要 包括:R-CNN,Fast R-CNN, Faster R-CNN 等。
2、基于端到端学习的目标检测算法
该类方法无需预先提取候选区域,其代表 性方法为Y〇L〇和SSD。
研究成果
RCNN解决了目标检测中的两个关键问题。
1 . 目标检测速度
这篇文章提出通过预先的提取一系列可能是物体的候选区域之后,仅在这些候选区域上提取特征进行目标判断,这大大提高了目标检测的速度。
2 . 训练集
解决了如何在小规模的标注数据集上进行大规模网络训练的问题。
研究意义
Region CNN ( RCNN )可以说是利用深学习进行目标检测的开山之作。作者 Ross Girshick 多次在 PASCAL VOC 的目标检测竞赛中折桂, 2010 年更带领团队获得终身成就奖。
未来技术研究趋势
R-CNN:突破了传统的目标检测算法的思想,为深度学习在目标检测领域的首次成功突 破。该算法主要包括区域提名、归一化处理、特征提取、分类及回归等步骤。R-CNN算 法在目标检测精度上相较传统方法有了质的提升,但是也存在不少缺点。如候选框数量 众多导致运算量庞大,效率低、占用硬盘空间大、SVM模型仍然有待优化等。
Fast-RCNN和Faster-RCNN采用自适应尺度池化对整个网络进行优化,从而规避了 R-CNN中冗余的特征提取操提高了网络识别的准确率。
未来的研究方向将是无需预先提取候选区域,这种方法更加迅速,其代表方法位丫OLO 和 SSDO。
前期知识储备
精读
摘要
在PASCAL VOC数据集上测量的物体检测性能在过去几年已经趋于稳定。性能最好的方法是复杂的集成系统,通常组合多个低级图像特征和高级环境信息。本文提出一个简单的、可伸缩的检测算法,相对之前在VOC 2012数据集上最好的性能,mAP值提升了超过30%,达到了53%。
PS:Average Precision,即 平均精确度。mAP值:Mean Average Precision,即:平均AP值 。是对多个验证集个体求平均AP值 ,是衡量多分类任务的衡量标准。
我们的方法结合了两个关键的见解 :
(1) 可以将高容量的CNN应用到自底向上的 region proposals中来定位和分隔对象;
(2) 当标注训练数据缺乏时,可以监督预训练辅助任务,然后再做 domain- specific精调,可以获得显著的性能提升。
由于组合了region proposals和CNNs,因此方法命名为R-CNN。
三个知识点
1.Selective search
—种从图片中提取bounding box(边界框)的方法。主要思想是:
a) 使用Efficient Graph-Based Image Segmentation获取原始图片分割区域;
b) 根据各分割区域的颜色、小大、纹理、吻合等方面相似度合并分割区域。
2.NMS(non maximum suppression)
中文名非极大值抑制.非极大值抑制算法(Non-maximum suppression,NMS)的 本质是搜索局部极大值,抑制非极大值元素。
物体检测中应用NMS算法的主要目的是消除多余(交叉重复)的窗口,找到最佳物体检测位置。
3. Hard negative mining metthod
hard mining,就像是准备的错题集。错题集不会是每次所有做错的题目你都往上放。放上去的都是你最没有掌握的那些知识点(错的最厉害的),而这一部分是对你学习最有帮助的。具体一点的解释,假设要在一张厨房的图像里判别_只蜘蛛。由于厨房的图像里 objects(负样本)可能有许多,蜘蛛(正样本)样本却很少。这时候 hard mining的意义就是选出一些对训练网络有帮助的负样本部分,而不是所有负样本,来训练网络。比如说 ,training过程中,被当前模型误判成蜘蛛最厉害的那些负样本可以被挑出来,参与 loss运算以及 back propagation。
introduction
特征非常重要。最近几十年在许多的视觉识别任 务上基本上是基于SIFT[29]和 HOG[7]。但是如果看看在标准视觉识别任 务:PASCAL V〇C目标检测[15] 上的性能,通常公认在2010-2012 年间进展很慢;通过构建集成系统和采用成功方 法的变种获得很小的提升。
SIFT和HOG是块方向直方统计,在V1中可以粗略的与复杂单元关联的代表;是首要视觉路径的第一
个表面区域(这里有点译得不好)。但同时我们也知道识别发生在一系列下游阶段,这暗示对于视觉识别可能有层次的、多阶段的计算特征会更加有益。
Fukushima’s的“新认知机”是一个受生物学启发的、层次的移不变的模式识别模型,是这个过程的早期尝试。
但是新认知机缺乏监督预训算法。构建在 Rumelhart et al.[33]和Le Cun et al.[26]上,表明反向传播的随机梯度下降法对于训练卷积神经网络(CNNs)有效,CNNs是新认知机上扩展的一类模型。
然后CNN的历史说了几句,给出了12年CNN的讨论:
在ImageNet上分类结果多大程度上能够泛化到PASCAL VOC挑战赛的目标检测结果上。
我们通过桥接图像分类和目标检测的差异来回答此问题。
本文是第一个表明,与基于简单的HOG-like特征的系统比较CNN在 PASCAL VOC上目标检测性能有显著提升。为达到此结果,我们关注两个问题:
使用深度网络定位对象和使用少量标注的检测数据训练大容量的模型。
不同于图像分类,目标检测需要定位图像中的目标(通常多个)。
一种方法是将定位当做回归问题。
但是 Szegedy et al.[38]和我们做的研究表明这种策略实践中效果不好(VOC2007数据集上的mAP值为30.5%,与之相比较,我们的方法mAP到达58.5)。
另一种替代方案是构建滑动窗口检测器。
过去20年,CNN经常这样使用,特别是在受限的目标类型上,如人脸检测[32,40]和行人检测[35]。为了保持高的空间分辨率,典型的这些CNNs仅仅包含两个卷积和池化层。
我们也考虑了滑动窗口的方法,但是我们的网络神经元数量很大,有5个卷积层,有很大的接受区域(195×195像素)和步长(32×32像素),导致使用滑动窗口模式来精确定位成为一个开放的技术难题。
我们使用在对象检测[39]和语义分割[5]都取得成功的“ recognition using regions范式[21]来解决定位问题。
预测时,我们的方法为输入图像生成约2000个类别不相关的 region proposals,使用CNN从每个proposal提取固定长度的特征向量然后使用类别相关的线性SVMs分类。
对于每个 region proposal,不管形状如何,我们使用简单的仿射变形来计算出一个固定尺寸的CNN输入。
图 Figure1是我们方法的概览,并且我们高亮了我们的效果。我们的系统组合的 region proposals和CNNs,我们称之为R cNN:带CNN特征的 Regions.
检测中面对的第二个挑战是标注数据太少,现在可获得的数据远远不够用来训练一个大型卷积神经网络。
传统方法多是采用无监督预训练,再进行有监督精调(如[35])。本文的第二个核心贡献是在辅助数据集( LSVRC)上进行有监督预训练,再在小数据集( PASCAL)上针对特定问题进行精调,是在训练数据稀少
的情况下一个非常有效的训练大型卷积神经网络的方法。
我们的实验中,针对检测的精调将mAP提高了8个百分点。精调后,我们的系统在VOC2010上mAP达到了54%的mAP,远远超过基于HOG的 deformable part mode(DPM)[17,20]在高度优化后的33%。
我们也向读者推荐 Donahue et al[12]同时期的工作,他表明Krichevsky’scNN可以当做(没有精调)一个黑盒的特征提取器,没有精调的情况下就可以在多个识别任务上包括场景分类、细粒度的子分类和领域适应方面都表现出色。
我们的系统也非常高效,仅有一个合理小型矩阵向量乘积运算和贪婪非极大抑制的计算是类别相关的。
这个计算特性源自于跨类别共享的特征,维度比之前使用的区域特征(cf.[39])低了两个数量级。
理解我们方法的失败案例,对于进一步提高它很有帮助,所以我们借助 Hoiem et al.[23]检测分析工具做实验结果的报告。作为本次分析的直接结果,我们发现一个简单的边框回归的方法会明显地减少定位错误,而定位错误也是最主要的错误情况。
介绍技术细节之前,需要注意的是由于R-CNN是在区域上进行操作,因而可以很自然地扩展到语义分割任
务上。经过很小的改动,我们就在PASCAL VOC语义分割任务上达到了很有竞争力的结果,在VOC2011
测试集上平均语义分割精度达到了47.9%。
R-CNN目标检测的步骤
1选取一个网络训练一个分类模型(例如AlexNet)
2对该模型进行fine-tuning:讲分类数从1000改为20,去掉最后一个全连接层
3.特征提取
提取图像的所有候选框(选择性搜索)
对于每一个区域:修正区域大小以适合CNN的输入,做一次前向运算,将第五个池化层的输出(就是对候选框提取到的特征)存到硬盘。
4.训练一个SVM分类器来判断候选框里物体的区别
每个类别对应一个SVM,判断是不是属于这个类别,是就是 positive,反之 negative。比如下图就是狗分类的SVM
5.使用回归器精细修正候选框位置:对于每一类,训练一个线性回归模型去判定这个框是否框得正确。
R-CNN的三个模块
我们的目标检测系统包含三个模块。
第一个,产生类别无关的 region proposals。这些 proposals定义了一个候选检测区域的集合;
第二个是一个大型卷积神经网络,用于从每个 region抽取特定大小的特征向量;
第三个是一个类别相关的线性SVM。本节将展示每个模块的设计,并介绍他们的测试阶段的用法,以及参数是如何学习的细节,最后给出在 PASCAL VOC2010-12和SVRC2013上的检测结果。
① Region proposals(候选区域)
近来有很多研究都提出了生成类别无关region proposals的方法,比如:
objectness
selective search
category-independen object proposals
constrained parametric min-cuts(CPMC)
multi-scale combinatorial grouping
Ciresan
使用CNN在规律空间块裁剪上来检测有丝分裂细胞,也算是一种特殊的region proposal方法。R-CNN采用的 selective search和先前的工作[39,41]进行可控的比较。
region proposals的方法
取不同的大小的“框”
让框出现在不同的位置,得出这个框的判定得分
取得分最高的那个框
左上角的黑框:得分0.5;右上角的黑框:得分0.75;左下角的黑框:得分0.6;右下角的黑框:得分0.8。根据得分的高低,我们选择了右下角的黑框作为目标位置的预测。
②特征提取
我们使用 Krichevsky et al.[25]所描述的CNN的一个Caffe[24]实现版本对每个 region proposal抽取一个4096维的特征向量。通过前向传播一个减去均值后277×277大小的RGB图像到五个卷积层和两个全连接层来计算特征。读者可以参考[24,25]获得网络架构的更多细节。
为了计算 region proposal特征,首先需要将输入的图像数据转变成CNN可以接受的方式(我们架构中的CNN只能接受固定227×227尺寸)。任意形状的 region变换有很多办法,我们使用了最简单的一种。无论 region proposal是什么尺寸或长宽比,我们都把环绕该区域的紧贴边框内的所有像素变形到需要的尺寸。
这里有一个细节:变形之前,先放大边框以便在新的变形后的尺寸上,保证变形后图像上下文的p个像素都围绕在一个通用匹配流程(我们使用p=16)。图 Figure2展示了一些变形后的 region样例。变形的候选方法在附录A中有讨论。
在测试阶段,在测试图像上使用selective search抽取约2000个region proposals(所有实验都采用selective search’s “fast mode”)。然后变形每一个 region proposal,再通过cNN前向传播计算出特征。然后,对于每个类别,我们使用已训练好的类别相关的SVM给特征向量打分。2000个region会有很多重叠区域。
Run-time analysis
两个特性让检测变得很高效。首先,所有的CNN参数都是跨类别共享的。
其次,通过CNN计算的特征向量相比其他通用方法(比如 spatial pyramids使用的bag-of- vIsual word encodings)维度是很低的。
UVA检测系统[39]的特征比我们的要多两个数量级(360k vs 4k)
分析表明R-CNN可以扩展到上千个类别,而不需要借助于近似技术(如hashing)。即使有10万个类别矩阵乘法在多核CPU上只需要10秒而已。但这种高效不仅仅是因为使用了region proposals和共享特征。UVA系统由于高维特征,需要134GB的内存来存10万个线性预测器。而我们只要1.5GB,比我们高了两个数量级。
训练
监督预训练
我们在大型辅助训练集SVRC2012分类数据集(没有标注边框)上预训练了CNN。预训练采用了 Caffe的CNN库。简单地说,我们的CNN十分接近Krichevsky的网络的性能,在LSVRO2012分类验证集在top-1错误率上比他们高2.2%。
我们将所有与 ground- truth边框的IoU重叠>=0.5的 region proposals作为正例,其它作为负例。
SGD开始的学习率为0.001(是初始化预训练时的十分之一),这使得精调得以有效进行而不会破坏初始化的成
果。
每轮SGD迭代,我们统一使用32个正例窗口(跨所有类别)和96个背景窗口,即每个mini-bach的大小是128。
另外我们倾向于采样正例窗口,因为和背景相比他们很稀少。
PS:对象识别相关
思考一下检测汽车的二分类器。很显然,一个图像区域紧紧包裹着辆汽车应该就是正样本。
类似的,应该看不到任何汽车的背景区域,就是负样本。
较为不确定的是怎样标注哪些只和汽车部分重叠的区域。
我们使用loU重叠阈值来解决这个问题,低于这个阈值的就是负例。(就是框里面有部分汽车如何确定是否正实例)
这个阈值文章选择了0.3,在验证集上网格搜索{0,0,1,…0,5}集合选中的。
我们发现认真选择这个阈值很重要。如果设置为0.5,如[39],可以降低mAP5个点,设置为0,就会降低4个点。正样本仅仅就是每个类的ground-truth边框。
一旦特征提取出来,就应用标签数据,然后为每个类别优化一个线性SVM。由于训练数据太大,难以装进内存,我们选择了标准的困难负样本挖掘方法[17,37](hard negative mining method)。困难负样本挖掘收敛很快,实践中只要所有图像经过一轮,mAP就可以基本停止提升了。
实验结果比较
可视化学习到的特征
第一层特征过滤器可以直接可视化,并非常容易理解,它们主要捕获方向性边缘和对比色。难以理解的是后面的层。
Zeiler和 Fergus在[42]中提出了一种视觉优雅的去卷积方法。我们则使用了一种简单的非参数化方法,直接展示网络学到的东西。
这个想法是单一输出网络中一个特定神经元(特征),然后把它当做个正确类别的物体检测器来使用。方法是这样的,先计算所有抽取出来的 region proposals(大约1000万),计算每个region所导致的对应神经元的激
活值,然后按激活值对这些区域进行排序,然后进行非极大抑制,最后展示分值最高的若干个region。这个方法让被选中的神经元在遇到他想激活的输入时“自己说话”。避免平均化是为了看到不同的视觉模式和深入观察神经元计算出来的不变性。
我们可视化poo5的神经元,pool5最大池化网络的第5个和最后一个卷积层的输出。poo|5的特征图是6×6×256=9216维。忽略边界影响,每个pool5神经元拥有195×195的感受野,输入是227×227。
pool5中间的神经元,几乎有一个全局视角,而边缘的神经元有较小的带裁切的支持。
图 Figure4的每一行显示有最高激活的pool5神经元,这个实例来自于VOC2007上我们精调的CNN。
这里只展示了256个功能单元中的6个(附录D包含更多)。这些选中的神经元作为作为“网络学到什么"的样例代表。
消除学习
未精调下各层性能。
为了理解哪一层对于检测的性能十分重要,我们分析了cNN最后三层的每一层在VOC2007上面的结果。Pool5在3.1节中做过简单的描述。最后两层(全连接层6和7)下面来总结一下。
fc6层是一个与pool5连接的全连接层。为了计算特征,poo5的 feature map( reshape成一个9216维度的
向量)和一个4096×9216权重矩阵相乘,并加上一个偏置向量。中间的向量是逐个组件做半波整流(就是ReLU)(x<-max(0,x))。fc7是网络的最后一层。跟fc6之间通过一个4096×4096的权重矩阵相,也加上偏置向量,并使用ReLU。
我们先来看看没有精调的CNN在PASCAL上的表现,没有精调是指所有的CNN参数仅仅在LSVRC2012上预训练。分析每一层(见 Table2,1-3行)的性能显示,来自fc7的特征泛化能力不如fc6的特征。
这意味29%的CNN参数,也就是1680万的参数可以移除掉,而且没有降低mAP。
更令人惊奇的是即使同时移除fc和fc7,也能有非常好的结果;而pool5的特征的计算,只使用了CNN参数量的6%。可见CNN的主要表达力来自于卷积层,而不是更大更密集的全连接层。
这一发现表明,,通过仅使用cNN的卷积层来计算任意大小图像的HOG意义上的密集特征图的潜在效用。
这种表示使得使用滑动窗口的检测器实验(包括DPM),可以直接在pool5层特征上进行。
有精调下各层性能
我们来看看精调后在VOC2007上的结果表现。
提升非常明显(见 Table2,4-6行),mAP提升了8个百分点,达到了54.2%。精调对于fc6和fc7的提升明显优
于pool5,这说明pool5从ImageNet学习的特征是通用的,在它之上的层大部分提升主要来自学习特定领域的非线性分类器。
然后,文章还用R-CNN与DPM及几种变种基线进行了比较。
检测错误情况分析
我们使用来自 Hoiem的检测分析工具,为的是揭示我们方法的错误模式,明白精调怎么改变错误模式,并与DPM的错误类型比较。分析工具的完整概述超出本文的范畴,建议读者咨询一些更详细的细节(如" normalized AP")。因为最好的分析已经在吸收到相关的图中了,我们将在图 Figure5和 Figure6中加上讨论说明。
边框回归
基于错误分析,我们实施了一个简单的方法,减少定位错误。
受到DPM[17]中使用的边框回归训练启发,我们训练了一个线性回归模型在给定一个 selective
search region proposal 的 pool5特征时去预测一个新的检测窗口。详细的细节参考附录C。
表 Table1、Tabe2和图5的结果说明这个简单的方法,修复了大量的定位错误的检测情况,提升了3-4个百分点。
总结
R-CNN采用AlexNet
R-CNN采用 Selective Search技术生成 Region Proposal
R-CNN在| mageNet上先进行预训练,然后利用成熟的权重参数在 PASCAL VOC数据集上进行fine-tune
R-CNN用CNN抽取特征,然后用一系列的的SVM做类别预测
R-CNN的bbox位置回归基于DPM的灵感,自己训练了一个线性回归模型
R-CNN的语义分割采用CPMC生成 Region