转载自:http://blog.csdn.net/u014696921/article/details/52703610
学习目标检测的三种方法:RCNN, Fast RCNN, Faster RCNN
目标检测(Object detection1):给定一张图片,对其中的某些目标进行检测,输出相应的目标类别和包围盒(bounding box)。
目标检测主要有四个基本步骤:
候选区域生成(region proposal)
特征提取(feature extraction)
分类(classification)
位置精修(rectangle refine)
在RCNN2中,为4个步骤除了最后两个同时进行外均是依次进行;在Fast RCNN3中,后3个步骤被统一起来;在Faster RCNN4中,所有步骤都被统一到了一个深度网络框架内,大大提高了运行速度。这里主要使用Faster RCNN进行实验。
RCNN可以说是利用深度学习进行目标检测的开山之作,算法具体分为以下4个步骤:
对每张图像生成大约2000个候选区域
对每个候选区域,使用CNN提取特征
特征输入每一类的SVM分类器进行类别判断
使用回归器精细修正包围盒位置
使用Selective Search5方法从一张图像生成大约2000个候选区域,步骤如下:
使用一种过分割手段,将输入的图像分割成小区域
查看现有小区域,合并可能性最高的两个区域
合并的方法为:优先合并颜色(颜色直方图)相近的、纹理(梯度直方图)相近的、合并后总面积小的、合并后总面积在其包围盒中所占比例大的区域,且保证合并操作的尺度较为均匀以避免一个大区域陆续吞并其他小区域,保证合并后形状规则。
重复第2步直到整张图像合并成一个区域位置
输出所有曾经存在过的区域,即候选区域
把输入的候选区域归一化成同一尺寸227×227。
使用在ILSVRC 20126分类任务数据集预训练的AlexNet7卷积神经网络(CNN)进行调优(fine-tune),并把网络全连接层的输出提取作为特征。
对每一个分类,训练一个线性SVM二分类器。之后可以使用这些分类器进行分类,即输入提取的特征,输出是否属于此类。
目标检测问题的衡量标准是重叠面积,因此需要对包围盒的位置进行精细的修正。
对每一个分类,使用一个回归器(regressor)进行精修。使用分类正确与真实包围盒重叠面积大于0.6的候选区域作为训练样本,输入提取的特征,输出xy方向的缩放和平移。
Fast RCNN方法解决了RCNN方法的三个问题:
测试时速度慢在RCNN中,每张图像内候选框之间大量重叠,提取特征操作冗余。 Fast RCNN将整张图像归一化后直接送入网络。在邻接时,才加入候选框信息,在末尾的少数几层处理每个候选框。
训练时速度慢在RCNN中,每张图像内候选框之间大量重叠,提取特征操作冗余。 Fast RCNN在训练时,先将一张图像送入网络,紧接着送入从这幅图像上提取出的候选区域。这些候选区域的前几层特征不需要再重复计算。
训练所需空间大在RCNN中,独立的分类器和回归器需要大量特征作为训练样本。 Fast RCNN把类别判断和位置精修统一用深度网络实现,不再需要额外存储。
同RCNN。
把输入的图像归一化为同一尺寸224×224直接送入网络。
在网络第5个阶段的卷积层后输入候选区域并连接到roi_pool层。roi_pool层在forward阶段将每个候选区域均匀分成 M×N 块,对每块进行max pooling;在backward阶段中每个输入节点可能和多个候选区域的输出节点相连。
在网络第5个阶段池化层输出的特征输入到cls_score分类的全连接层中,输出一个 K+1 维向量,表示K个分类和背景的概率。
在网络第5个阶段池化层输出的特征输入到bbox_predict调整包围盒的全连接层中,与分类层并行形成multi-task。输出一个 4×K 维向量,表示属于第K类的包围盒平移缩放的参数。
在Faster RCNN中,区域生成网络(Region Proposal Network)代替Fast RCNN中的Selective Search方法,把4个步骤整合到一个网络中,加快了运行速度。
使用一个区域生成网络(Region Proposal Network)来对输入的图片输出目标区域集及其相关分数。RPN本身是一个FCN(Fully Convolutional Network)。
对每一个大小为 W×H 的feature map,考虑3种面积和3种比例共 k=9 种候选区域(anchor),共 WHk 个anchor。
RPN训练的时候,对输入的每张图片,首先把每个标定的真值候选区域与其重叠比例最大的anchor记为前景样本;剩余的anchor中与某个标定重叠比例大于0.7的记为前景样本,而与任意一个标定的重叠比例都小于0.3的记为背景样本;最后剩余的anchor弃去不用。代价函数同时最小化分类误差和前景样本的区域位置偏差。
由于RPN和Fast RCNN都需要一个原始特征提取网络(raw feature extraction net),因此可以共享特征来加速。文中介绍了3种方法:
轮流训练(Alternating training)。用 W0 训练RPN并用RPN提取训练集上的候选区域。用 W0 和候选区域训练Fast RCNN,参数记为 W1 。再用 W1 训练RPN并用RPN提取训练集上的候选区域……依此类推。
近似联合训练(Approximate joint training)。合并成一个网络训练,在backward计算梯度时,把提取的roi区域当做固定值看待;在backward更新参数时,来自RPN和来自Fast RCNN的增量合并输入原始特征提取层。
联合训练(Non-approximate joint training)。合并成一个网络训练,在backward计算梯度时,要考虑roi区域的变化的影响,具体参考8。
基本同Fast RCNN。
基本同Fast RCNN。
基本同Fast RCNN。