RCNN
Stru99le Lv2

RCNN 两阶段目标检测的开山之作

【论文特点】:

  • 速度:本文则(采用Selective Search方法)预先提取一系列较可能是物体的候选区域,之后仅在这些候选区域上(采用CNN)提取特征,进行判断。在PASCAL VOC 2012数据集上的性能比之前最好的方法提高了30%.
  • 两阶段训练策略:文章提出了一种两阶段训练策略,首先在大型辅助数据集(如ImageNet)上进行有监督的预训练,然后在特定领域数据集(如PASCAL VOC)上进行微调,以适应目标检测任务。

RCNN算法基本流程

RCNN算法分为4个步骤:

  1. 候选区域生成: 一张图像生成1K~2K个候选区域 (采用Selective Search 方法)
  2. 特征提取: 对每个候选区域,使用深度卷积网络提取特征 (CNN)
  3. 类别判断: 特征送入每一类的SVM 分类器,判别是否属于该类
  4. 位置精修: 通过非极大值抑制、边界框回归、微调等方式精细修正候选框位置
image

RCNN主要思想和方法

Selective Search 主要思想:

  1. 使用一种过分割手段,将图像分割成小区域 (1k~2k 个)
  2. 查看现有小区域,按照合并规则合并可能性最高的相邻两个区域。重复直到整张图像合并成一个区域位置
  3. 输出所有曾经存在过的区域,所谓候选区域

其中合并规则如下: 优先合并以下四种区域:

  • 颜色(颜色直方图)相近的
  • 纹理(梯度直方图)相近的
  • 合并后总面积小的: 保证合并操作的尺度较为均匀,避免一个大区域陆续“吃掉”其他小区域
  • 合并后,总面积在其BBOX中所占比例大的: 保证合并后形状规则。

有监督预训练与无监督预训练:

(1)无监督预训练(Unsupervised pre-training)

预训练阶段的样本不需要人工标注数据,所以就叫做无监督预训练。

(2)有监督预训练(Supervised pre-training)

所谓的有监督预训练也可以把它称之为迁移学习。比如你已经有一大堆标注好的人脸年龄分类的图片数据,训练了一个CNN,用于人脸的年龄识别。然后当你遇到新的项目任务时:人脸性别识别,那么这个时候你可以利用已经训练好的年龄识别CNN模型,去掉最后一层,然后其它的网络层参数就直接复制过来,继续进行训练,让它输出性别。这就是所谓的迁移学习,说的简单一点就是把一个任务训练好的参数,拿到另外一个任务,作为神经网络的初始参数值,这样相比于你直接采用随机初始化的方法,精度可以有很大的提高。

重叠度(IOU):

IoU(Intersection over Union)是一种评估目标检测和实例分割算法性能的常用指标.它是预测边界框(预测的区域)与真实边界框(真实目标的区域)之间的重叠程度的度量。物体检测需要定位出物体的bounding box,就像下面的图片一样,我们不仅要定位出车辆的bounding box 我们还要识别出bounding box 里面的物体就是车辆。

image

因此出现了IOU,它定义了两个bounding box的重叠度,如下图所示:

image

就是矩形框A、B的重叠面积占A、B并集的面积比例。

非极大值抑制(NMS):

非极大值抑制(NMS)顾名思义就是抑制不是极大值的元素,搜索局部的极大值。这个局部代表的是一个邻域,邻域有两个参数可变,一是邻域的维数,二是邻域的大小.NMS的主要作用是去除多余的检测框,只保留最佳的检测结果,从而提高检测的准确性和效率。

NMS的实现通常遵循以下步骤:

  • 设置IoU阈值:确定一个IoU阈值,用于判断检测框之间的重叠程度。
  • 得分排序:根据检测框的置信度得分进行降序排序。
  • 迭代抑制:从得分最高的检测框开始,对于每个检测框,如果它与其他检测框的IoU超过阈值,则抑制那些得分较低的检测框。
  • 选择最佳检测框:在每个类别中,选择剩余的、未被抑制的检测框作为最终的检测结果。

VOC物体检测任务:

相当于一个竞赛,里面包含了20个物体类别:PASCAL VOC2011 Example Images 还有一个背景,总共就相当于21个类别,因此一会设计fine-tuning CNN的时候,我们softmax分类输出层为21个神经元。

CNN特征提取实现

  1. 算法实现
    1. 选用Alexnet的5个卷积层和2个全连接层
    2. 使用有监督预训练
    3. fine-tuning训练

SVM训练、测试:

这是一个二分类问题,我么假设我们要检测车辆。我们知道只有当bounding box把整量车都包含在内,那才叫正样本;如果bounding box 没有包含到车辆,那么我们就可以把它当做负样本。但问题是当我们的检测窗口只有部分包含物体,那该怎么定义正负样本呢?作者测试了IOU阈值各种方案数值0,0.1,0.2,0.3,0.4,0.5。最后通过训练发现,如果选择IOU阈值为0.3效果最好(选择为0精度下降了4个百分点,选择0.5精度下降了5个百分点),即当重叠度小于0.3的时候,我们就把它标注为负样本。一旦CNN f7层特征被提取出来,那么我们将为每个物体类训练一个svm分类器。

位置精修: 目标检测问题的衡量标准是重叠面积:许多看似准确的检测结果,往往因为候选框不够准确,重叠面积很小。故需要一个位置精修步骤。 回归器:对每一类目标,使用一个线性脊回归器进行精修。正则项λ=10000。 输入为深度网络pool5层的4096维特征,输出为xy方向的缩放和平移。 训练样本:判定为本类的候选框中和真值重叠面积大于0.6的候选框。