rcnn论文结合代码解读

RCNN的两个主要思想:

(1)将大型卷积神经网络(CNNs)应用于自下而上的候选区域region proposals 以定位和分割物体。

(2)当带标签的训练数据不足时,先针对辅助任务进行有监督预训练,再进行特定任务的调优,就可以产生明显的性能提升。

采纳了滑窗方法。拥有5个卷积层,并在输入图像上有非常大的感受野(195×195)and strides(32×32)。

测试时,我们的方法对输入图片产生了接近2000个与类别独立的区域推荐region proposals,对每个推荐先resize到固定大小之后再使用CNN抽取了一个固定长度的特征向量,然后使用特定类别的线性SVM对每个区域进行分类。

rcnn论文结合代码解读_第1张图片

在ILSVRC2013的200类检测数据集上,R-CNN表现更加卓越,mAP达到31.4%,大大超过了OverFeat的24.3%的表现。检测中面对的第二个挑战是标签数据太少,现在可获得的数据远远不够用来训练一个大型卷积网络。本文的第二个核心贡献是在辅助数据集(ILSVRC)上进行有监督预训练(分类的训练),再在(需要检测的数据集少的)小数据集上针对该特定问题进行调优,这是在训练数据稀少的情况下一个非常有效的训练大型卷积神经网络的方法。Krizhevsky的CNN可以用来作为一个黑盒的特征提取器,没有调优的情况下就可以在多个识别任务包括场景分类、细粒度的子分类和领域适应方面都表现出色。在实验之后进行分析,我们发现一个简单的框回归的方法会明显地削弱位置错位问题,而错位是我们的系统面对的主要错误模式。

由于R-CNN是在推荐区域上进行操作,所以可以很自然地扩展到语义分割任务上。通过很小的改动,我们就在PASCAL VOC语义分割任务上达到了很有竞争力的结果,在VOC2011测试集上平均语义分割精度达到了47.9%。

我们的目标检测系统有三个模块构成:第一个,产生类别无关的推荐区域,这些推荐定义了一个候选检测区域的集合,采用了选择性搜索SS来产生推荐区域;第二个是一个大型卷积神经网络,用于从每个区域抽取特定大小的特征向量,这里使用了Krizhevsky等人所描述的CNN的一个Caffe实现版本对每个推荐区域抽取一个4096维度的特征向量;第三个是一个指定类别的线性SVM。输入是277×277大小的RGB图像。

测试阶段的物体检测

在测试阶段,在测试图像上使用选择性搜索抽取2000个推荐区域(实验中,我们使用了选择性搜索的快速模式)。然后变形每一个推荐区域proposal ,再前向传播到CNN计算出特征。然后我们使用训练过的对应类别的SVM给每个特征向量中的每个类打分。给定一张图像中所有的打分区域,使用贪婪非最大值抑制算法(每个类别是独立进行的),如果一个区域和那些高分且已经被选中的区域的交叉( intersection-overunion(IoU) )重叠大于一个学习阈值,就会被拒绝(防止多次选择该目标)。

运行时分析。两个特性让检测变得很高效。首先,所有的CNN参数都是跨类别共享的。其次,通过CNN计算的特征向量相比其他通用方法得到的维度是很低的。从下图可以看到RCNN中的各个阶段的耗时,以后可以根据这里做相应的速度提升。

rcnn论文结合代码解读_第2张图片

有监督预训练。我们在大型辅助训练集ILSVRC2012分类数据集(没有约束框数据)上预训练了CNN。

特定领域的参数调优。为了让我们的CNN适应新的任务(即检测任务)和新的领域(变形后的推荐窗口)。我们只使用变形后的推荐区域对CNN参数进行SGD训练,方法是:替掉了ImageNet专用的1000路分类层,换成了一个随机初始化的(N+1)路分类层,其中N是类别数,1代表背景,而卷积部分都没有改变。对所有的推荐区域,如果其和真实标注的框的IoU重叠>= 0.5就认为是正例,否则就是负例。





你可能感兴趣的:(rcnn论文结合代码解读)