赞
踩
大多数论文的实验结果部分,我都是不翻译的。请大家自行参考原文把。
由于我是从Faster R-CNN,Fast R-CNN,R-CNN这样倒着读过来的,所以本篇文章我就挑重要的部分来翻译,就不全部翻译了,主要是借助R-CNN来更加准确的理解Faster R-CNN和Fast R-CNN。
从2012年起,ImageNet的成功引起了激烈的反响和讨论。对于目标检测来说,其核心问题是:ImageNet上CNN的分类结果能够多大程度上的泛化到PASCAL VOC的目标检测结果上?
我们通过桥接图像分类和目标检测来回答这个问题。本文是第一篇展示相比于基于HOG特征建立的系统,CNN可以引导出非常好的目标检测结果,针对PASCAL VOC。为了达成这个结果,我们着眼于以下两个问题:使用深度网络定位物体和使用少量标注过的检测数据来训练一个大容量的模型。
不像图像分类问题,检测需要在图像里定位物体(可能是多个)。一种方法就是将定位视作一个回归问题。然而,跟我们同期进行的另一个实验告诉我们这种策略实际中并不能取得很好的结果。另一种方法就是使用滑动窗口检测器。卷积网络已经被当做滑动窗口检测器至少二十年了,尤其是在固定了目标分类的情况下,如人脸识别和行人检测。为了维持一个高空间分辨率,这些CNN往往只有2个卷积池化层。我们同样也考虑过使用滑动窗口,但是我们的网络有5层,这就使得每个神经元对于输入图像最后会有巨大的感受野(
195
×
195
195\times 195
195×195像素)和步长(
32
×
32
32\times 32
32×32像素),这就使得滑动窗口的精确定位成为一个开放性的技术问题。
因此,我们通过使用“recognition using regions”模式来解决CNN定位问题,这个模式在目标检测和语义分割中已经取得了成功。在测试时,对于输入图像我们生成2000个类别独立的区域预测框,使用CNN从每个预测框中提出一个固定长度的特征,然后使用特定类线性支撑向量机来对每个预测框的特征进行分类。我们使用简单的技术(仿射图像变换)来对每个预测框(无论预测框什么形状)计算一个固定大小的CNN输入。图1展示了我们方法的概况,因为我们的系统结合了区域预测框和CNN,所以我们将我们的方法命名为R-CNN:Regions with CNN features。
图1:目标检测系统概述。我们系统(1)得到一张输入图像,(2)提出大约2000个区域候选框,(3)使用卷积神经网络对于每个候选框计算特征,然后(4)使用线性SVMs对每个框进行分类。
检测面临的第二个挑战是标注数据太少,而且目前有的量不足以训练一个大型的CNN。对于这个问题传统的解决方法就是采用无监督预训练和有监督的精细调节。本文的第二个原则就是当使用相对大的数据集(ILSVRC)对模型进行有监督的预训练,然后在使用小数据集(PASCAL)进行检测精细调节。这是在数据量很少的情况下的一个有效的训练大容量CNN的一个方法。在我们的实验中,经过检测精细调节mAP提升了8个百分点。
我们的目标检测系统包含三个模块。第一个模块生成类别独立的区域候选框。这些候选框就定义了检测器能够运用的候选框集合。第二个模块是从每个候选框提取出固定长度特征向量的卷积神经网络。第三个模块是线性SVMs。在本节中我们会介绍每个模块的设计决策。
Region proposals. 近期大量的文章都提供了生成类别独立候选框的方法。比如:objectness,selective search,category-independent object proposals,constrained parametric min-cuts(CPMC),multi-scale combinatorial grouping。因为R-CNN对于特定的区域候选方法的效果是未知的,为了能够和之前的检测任务做对比,我们选择使用SS。
Feature extraction. 我们使用AlexNet从每个候选框中提取出4096维的特征向量。网络输入一张经过归一化的
227
×
227
227\times227
227×227的RGB图像,然后经过5个卷积层和2个全连接层。
为了能够对候选框进行特征计算,我们首先必须将图像数据转换到能够配合CNN的大小(
227
×
227
227\times227
227×227像素)。对于任意形状区域的许多可能的转换方法,我们选择了其中最简单的一种。无论候选区域的大小和纵横比如何,我们将所有像素形变到固定大小。具体的细节请参考原文附录A。
在测试时,我们在测试图片上运行SS来提取大约2000个候选框(SS的“快速模式”)。我们对每个框进行形变,然后输入到网络中进行前向传播计算特征。然后对于每个类,我们使用训练过的该类的SVM对特征向量进行打分。对于一张图片的所有打了分的区域,我们进行贪婪非极大值抑制(每种类独立进行)。
Run-time analysis. 两个性质使得检测高效。第一,所有的CNN的参数在所有类别都是共享的。第二,CNN提取出的特征维度相对较低,相比于其他方法,如UVA测试系统中用到的特征就比CNN的特征维度多出2个量级(360K vs. 4K)。
这种共享的结果是候选区域和特征的计算所消耗的时间(GPU上13s一张图片,CPU上53s一张图片)被分摊到所有类上。特定于类的计算就是特征与SVM权重以及NMS的点乘计算。在实际中,对于一张图片的所有点乘结果被batch到单独的矩阵-矩阵的乘积当中。特征矩阵是
2000
×
4096
2000\times4096
2000×4096,SVM权重矩阵是
4096
×
N
4096\times N
4096×N,这里N是类别数。
这个分析说明R-CNN扩展到上千的物体类别的,并不需要求助于任何近似技术比如哈希。即使是100K个类,结果矩阵的计算在现代的多核CPU上也就只要花费10秒钟。这个高效性不仅仅是使用了区域候选框和共享特征的结果。UVA系统由于其特征的高维度,会2个量级上慢于我们的系统,而且还需要使用134GB的存储空间来存储100K个线性预测器,而我们只需要1.5GB就够了。
Supervised pre-training. 我们使用了ILSVRC2012分类数据集来预训练我们的CNN,数据集仅仅只有分类信息,边框label是没有的。
Domain-specific fine-tuning. 为了使得我们的CNN能够适应新的任务(检测)和新的领域(变换后的预测框窗口),我们仅仅使用变换后的预测框窗口来对CNN的参数进行SGD训练。整个网络基本没有改变,除了将CNN的ImageNet 1000分类层替换为一个随机初始化的 N + 1 N+1 N+1 维的分类层(N是分类数,额外的1是用来标识背景)。那么对于VOC来说, N = 20 N=20 N=20,对于ILSVRC2013, N = 200 N=200 N=200。我们将与gt框 IoU大于0.5的预测框标记为正样本,其余的标记为负样本。我们使用0.001的学习率进行SGD(是预训练初始学习率的1/10)。在每个SGD周期,我们均匀采样32个正窗口和96个背景窗口来构建一个128样本大小的mini-batch。
Object category classifiers. 考虑训练一个二分类器来检测车。明显一个图像区域刚好围住一辆车应该是个正样本。相似的,背景区域(没有车的)是负样本。但是对于一个区域重叠了一部分车我们应该怎样标注就不是那么显然了。我们使用IoU重叠阈值来解决这个问题,低于阈值被认为是负样本。我们选取的重叠阈值0.3,是在验证集上通过在
0
,
0.1
,
.
.
.
,
0.5
{0, 0.1, ..., 0.5}
0,0.1,...,0.5上进行网格检索最终选择的。我们发现仔细选择这个阈值是很重要的。如果使用0.5,那么mAP会降低5个百分点。相似的,如果设置为0,mAP会降低4个百分点。正样本就简单的定义为每个类的gt框。
一旦特征被提取,训练标签被标定,我们就可以优化每个类的SVM。由于训练数据太大不能全部放入到存储空间中,我们采用标准的难例挖掘方法。难例挖掘能够快速收敛,并且实际中mAP会在遍历过所有图像之后停止上升。
第一层卷积核是可以直接可视化的,而且也容易理解。它们主要是提取有方向的边缘和对立颜色。理解后面层就变得具有挑战性了。Zeiler和Fergus提出了一种视觉上的反卷积方法。而我们呢,用一种不带参数的简单方法来直接展示网络学到了什么。
我们的思路是将网络中的一个特定的神经元(特征)单独提出来,然后将它视作一个目标检测器。也就是说,我们在大量的留存的候选框上计算该神经元的激活值,然后按激活值从高到低对候选框进行排序,再实施NMS,最后展示出top-scoring区域。我们的方法是让被选择的神经元通过展示什么样的输入使它fire来让它“自己发声”。为了能够观察不同的视觉模式并且从神经元的方差中发现深层次的东西,我们避免求取平均。
我们对pool5层的神经元进行可视化,pool5层是对网络的第五层也就是最后一层卷积层输出进行最大池化。pool5的特征图大小为
6
×
6
×
256
=
9216
6\times6\times256=9216
6×6×256=9216维。忽略边缘效应,每个pool5的单元拥有在原有的
227
×
227
227\times227
227×227像素输入上
195
×
195
195\times195
195×195像素的感受野。pool5上位于中央的单元几乎拥有全局视野,而靠近边缘的单元具有更小和不全的视野。
图2中每一行分别展示了使用VOC 2007 trainval 精细调节后的CNN输出的pool5层神经元的top16激活值对应的regions。我们只从256个神经元中提取出6个独立元进行可视化(参考附录D查看更多)。这些神经元被选择出来展示这个网络到底学到了什么样具有代表性的样本。在第二行我们发现这个神经元在狗脸和点列上被激活。第三列对应的神经元是一个红色团探测器。这里还有人脸的检测器以及一些更加抽象模式的检测器,如文本和窗户的三角结构。这个网络仿佛学习到了结合少量类调谐特征和一些关于形状,纹理,颜色和材质等分布式表征的一种表达。紧接着的全连接层fc6就有能力去构建一个由这些丰富的特征进行组合的一个庞大的集合。
图2:6个pool5神经网的top regions。感受野和激活值均以白色在图像中标识。有些神经元可以归于某种概念,比如人(第一排)和文本(第四排)。其他的神经元主要提取纹理和材质,比如点列(第二排)和镜面反射(第六排)。
Performance layer-by-layer, without fine-tuning. 为了理解哪些层对于检测来说更加重要,我们利用在VOC 2007数据集上得到的结果对于CNN的最后三层进行分析。pool5层我们在3.1中已经讲过了。最后的两层在下面进行总结。
fc6是与pool5全连接的。为了计算特征,会在pool5特征图上乘上一个
4096
×
9216
4096\times 9216
4096×9216的权值矩阵(这里pool5的特征被平铺成一个9216维的向量)然后加上一个偏置项。然后这个结果在经过ReLU函数。
fc7是网络的最后一层。那么这一层就是对前一层特征乘上一个
4096
×
4096
4096\times4096
4096×4096的权值矩阵再加上一个偏置项,再经过ReLU。
我们首先看CNN在没使用PASCAL进行精细调节的结果,也就是经过预训练后的所有CNN参数。分析结果在表1的1-3行,我们发现fc7层生成的特征比fc6层生成特征的泛化效果要差。这意味着,29%,16.8M个CNN参数可以被移除。更加令人惊讶的是,移除fc6和fc7,仅使用pool5特征也能取得很好的结果,这仅仅只需要CNN 6%的参数。这说明CNN的表达能力绝大部分来自于卷积层的特征提取而不是密集的全连接层。这个发现说明在计算任意大小图像的密集特征图时仅使用CNN卷积层就潜在效用。这个特征表达使得滑动窗口检测器可以基于pool5的特征进行实验。
表1:VOC 2007 test,平均检测准确率(%)。1-3行展示没经过精细调节的R-CNN的性能。4-6行展示经过精细调节后的CNN的性能。第7行包含了简单的边框回归阶段减少了定位误差。8-10行提供了DPM方法作为baseline。
Performance layer-by-layer, with fine-tuning. 我们现在看看经过精细调节的CNN的结果。结果明显提高,这个提高更多的来自于fc6和fc7,这说明pool5的从ImageNet上学到的特征是泛化的,是普遍的而更多的提高来自于非线性器对于特定领域的学习。
基于误差分析,我们实施了一个简单的方法来减小定位误差。受启发于DPM里的边框回归,我们基于pool5的特征训练了一个线性回归模型来预测一个新的检测窗口。具体细节请参考附录C。这个方法修复了大量误定位检测,使得mAP提高3到4个百分点。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。