【论文学习】Rich feature hierarchies for accurate object detection and semantic segmentation

论文地址:R-CNN

1. Abstract

在经典的PASCAL VOC数据集测试的目标检测的性能在近些年中逐渐趋于稳定。其中性能最好的方法是复合系统,通常把多个低级的图像特征和高级的上下文组合在一起。本文中,作者提出了一种简单且可扩展的检测算法,提升了在VOC 2012数据集上30%的mAP,达到了53.3%。其主要的想法有两个:1.把大容量的卷积神经网络应用在自下而上的region proposal中以便定位和区别目标;2.如若标记的数据集不足时,先针对辅助任务进行监督预训练(supervised pre-training),然后针对特定域的调优,从而使性能显著提升。这样把CNN和与region proposals相结合的方法称之为R-CNN,即Regions with CNN features。作者也把R-CNN与OverFeat进行比较,发现在200个类的ILSVRC2013数据集上R-CNN的性能大幅超过OverFeat。

2. Motivation

作者开篇就说明特征很重要。过去十年因为SIFT和HOG的使用各种视觉识别任务取得了很大的进步,但是典型的视觉识别任务在2010年-2012年之间发展还是很缓慢的,微小的进步也是通过构建一些集成系统和采用一些成功方法的变种取得的。
CNN在上世纪90年代被广泛应用,但是后来由于支持向量机(SVM)的崛起而逐渐淡出视线。在2012年,Krizhevsky和他的导师Hinton在在ILSVRC上的出色表现重燃了人们对于CNN研究的兴趣。在当时ILSVRC2012工作组中关于ImageNet识别结果的重要性引起了激烈的讨论,其核心问题是:CNN在ImageNet上的分类结果在何种程度上可以泛化为PASCAL VOC的目标检测任务上?
作者弥补了图像分类和目标检测之间的空白回答了这个问题,本文首先提出在PASCAL VOC的目标检测任务上CNN可以比基于简单类HOG特征的系统有显著的性能提升。为了实现这一结果主要关注两个问题:用一个深度网络定位目标和在小规模的标注数据集上训练高容量的模型。
目标检测需要在一个图片内部定位许多物体,一种方式是把定位问题当作一个回归问题,但是Szegedy等人的工作结果表明这种策略在实践中效果不是十分明显——Szegedy等在VOC 2007数据集上仅实现了30.5%的mAP,而作者的方法实现了58.5%的mAP。另一种方法是建立一个滑动窗口检测器(sliding-window detector)。这种方式在之前已经有人使用了,但是只是用在一些受限的目标上。这些CNN为了保持高空间分辨率,通常只有两个卷积层和池化层。作者同样采用了这种方式,只是在网络中有5个卷积层,而且在输入图片的接受域(receptive fields)更大(195×195像素)、步长(strides)更长(32×32像素),这使在滑动窗口内精确定位成为开放的技术挑战。
相反,作者通过的“recognition using regions”的方式解决了CNN的定位问题,这种方式最早由Gu等人提出来,而且成功用于目标检测和语义分割。在测试的时候,这种方法对输入图片生成了2000种类别独立的region proposals,在每个proposal中用CNN的方式提取出固定长度的特征向量,然后用针对特定类别的线性SVM对每个region进行分类。利用仿射图像变换这种简单的技术可以从每一个region proposal计算出一个固定大小的CNN输入,而与region形状无关。
这里写图片描述
图1展示了相应方法的过程和实验结果。首先是输入一张图片,然后提取出大约2000种自下而上的region proposal,利用CNN给每一个proposal计算特征,最后利用特定类别的线性SVM进行分类。
在目标检测中另一个挑战就是标记数据过少,现有的数据不足以训练一个CNN大型网络。传统的解决方式是利用无监督预训练然后进行监督fine-tuning。这片论文的第二个核心贡献是提出了一种在一个大型辅助数据集(ILSVRC)上进行监督预训练,然后是在小型数据集(PASCAL)上进行特定区域fine-tuning的方法,这种方法在数据缺少时训练大型CNN网络十分有效。在实验中,fine-tuning可以提高检测8个百分点。
在计算速度方面,唯一特定类计算是相当小的矩阵向量积和贪心非最大值抑制算法。这种计算特性源自于特征在跨类别的共享,比之前使用区域特征的方式少了两个数量级的计算量。

3. Object detection with R-CNN

目标检测系统主要是由三个模块组成。第一个模块是类别独立region proposals。这些proposals共同成为了可以给检测器用来检测的候选区域。第二个是从每个region提取固定大小的特征向量的卷积神经网络。第三个模块是特定类的线性SVM集合。
在模块设计中,主要是两个方面的内容,分别是region proposals和feature extraction。在很多论文中有生成类别独立的region proposals的方法,比如对象性(objectness)、选择性搜索(selective search)、类别独立目标推荐(category-independent object proposals)、约束参数最小剪切(CPMC)等。R-CNN主要使用选择性搜索,便于与之前的检测工作进行比较。在每个region proposal中提取出一个4096维的特征向量,将减去均值的227×227的RGB图像通过5个卷积层和两个全连接层进行前向传播计算特征。在计算region proposal的特征时,要把图像数据转化为与CNN兼容的格式,最简单的方式,也是文章中的方式是把整个区域的大小缩放到所需的大小而不管候选区域的大小和横纵比。在变换前,扩大要缩放的区域使得在缩放后区域边界到现有区域边界的宽度为p像素。图2中p=16。
这里写图片描述
测试阶段,在测试图像上面进行选择性搜索提取出2000个region proposals。对每个proposal进行变换然后通过CNN进行前向传播计算特征。然后对每个类,利用针对该类训练的SVM给每个特征向量打分。给定图像的区域的所有得分,使用贪婪非最大值抑制的方式,如果IoU比阈值大则保留,小则丢弃。在实践中IoU的阈值采用0.3,过大或者过小都会影响最终的mAP,因此阈值的选择也至关重要。
两种特性保证了检测效率。第一,在所有类别中CNN参数是共享的。第二,CNN计算出的特征向量与其他方式计算出的维度低。参数共享的结果是计算region proposal和特征的时间在所有类上分摊。唯一的特定类的运算是特征与SVM权重的点积以及非最大值抑制。在实践中,一张图片的所有点积都是矩阵积,特征矩阵一般是2000×4096,SVM权重矩阵是4096×N,N是类别的数量。
在训练的时候,主要是用了监督预训练、特定区域fine-tuning以及目标类别分类。监督预训练即在ILSVRC2012分类数据集上(无bounding box标记)这种大型辅助数据集上预训练CNN模型。利用缩放后的region proposal对CNN参数进行SGD训练。
一旦特征被提取出来并应用了训练标签,便可以优化每个类的线性SVM。因为训练数据太大,作者采用标准的hard negative mining method。这种方法就是把之前训练出来的负样本和困难样本加入负样本集,然后再进行训练分类器,如此反复直到达到停止条件。主要是提升分类器判断false positive的能力。

4. Experimental & Analysis

对于在PASCAL VOC 2010-12数据集上的最终结果,对VOC 2012训练数据集上对CNN进行调优,并在VOC2012 trainval上优化检测SVM。表1是在VOC2010上完整的实验结果。表中的实验结果是R-CNN与DPM v5、UVA、Regionlets、SegDPM这四种baseline进行比较的。很显然,R-CNN的分类mAP比这四种baseline都要好,而R-CNN with bounding box比DPM v5的mAP提升了约20个百分点。
这里写图片描述
在ILSVRC2013检测数据集进行实验时使用了和PASCAL VOC数据集上相同的系统超参数,这里体现了之前提到的监督预训练,一方面提升性能,一方面提高运行效率。图3中是R-CNN与ILSVRC 2013比赛中的结果与OverFeat的比较。R-CNN实现了31.4%的mAP,优于OverFeat的24.3%。
这里写图片描述
在论文的后续,作者提出了一些其他的观点,对于其他的一些因素进行了测试和说,比如可视化、消融和错误模式等。

可视化学习到的特征

第一层的卷积核可以直观可视化,主要捕获定向边缘和相对颜色。为了理解后续层的作用,作者提出了简单的非参数化方法,直接显示网络学到的内容。
核心思想是在网络中列出一个特定的单元(特征),把它作为它自己的目标检测器。也就是说在大量的region proposal中计算这个单元的activation,把这些proposal按activation从高到低排序,然后执行非最大值抑制,显示最高的region。这些activation其实与输入有关。
可视化第5层的单元,这是网络的第五个最大化池化的输出也是最后一个卷积层。pool5的特征图为6×6×256=9216维。忽略掉边界效应的话,每一个pool5单元的接受域是195×195,pool5中间的单元几乎是一个全局视角,而边界单元视野较小。
这里写图片描述

消融研究

没有调优的逐层性能分析。在VOC2007数据集上分析CNN最后三层的作用,找到检测性能中至关重要的一些层。除了pool5以外,还有fc6fc7fc6是全连接于pool5的,它将pool5的特征图乘一个4096×9216的权重矩阵(重构成了一个9216维的向量)然后加上一个偏置向量,最后应用ReLU。fc7是网络中的最后一层,它将由fc6计算而得的特征乘以4096×4096的权重矩阵,再加上一个偏置向量,最后应用ReLU。
这里写图片描述
首先是在PASCAL没有进行fine-tuning的CNN结果,所有的CNN参数仅在ILSVRC 2012上进行了预训练,逐层分析其性能。表2中的1-3行显示fc7生成的整体特征比fc6的要差,这意味着29%的CNN参数可以除去而不损失mAP。而令人惊讶的是,仅使用6%的CNN参数计算pool5,除去fc6fc7也会有比较好的效果。这说明在CNN中,其大部分表达能力是卷积层而不是全连接层。在现在的很多网络中都将全连接层去掉了。
调优的逐层性能分析。fine-tuning的结果在表2的4-6行。fine-tuning使mAP提升了约8%,达到了54.2%。对于fc6fc7,fine-tuning对于pool5的性能提升要大得多,这表明在ImageNet中学习的pool5特性更具普遍性,而且大多数提升都是学习特定域的非线性分类器而得的。
这里写图片描述
网络架构主要两种,一种是Krizhevsky等提出的T-Net,另一种是Simonyan和Zisserman等提出的O-Net。表3是R-CNN使用两种架构的实验结果对比。显然,使用O-Net的R-CNN结果优于T-Net。但是文中提到,时间O-Net大约是T-Net的7倍。

Problem

R-CNN中有一些问题是不可避免的。比如
1.多个候选区域的特征图像需要提取,需要比较大的存储空间。
2.针对传统CNN输入固定尺寸的图片,利用warp进行变换之后的图片可能会造成信息的损失。
3.每一个region proposal都需要经过计算,重复的特征提取造成计算的浪费。
参考:这里写链接内容

阅读更多
文章标签: 深度学习 CNN
上一篇【论文学习】YOLOv3:An Incremental Improvement
下一篇【论文学习】Fast R-CNN
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭