目标检测——R-CNN

1. 概述

RCNN(Region with CNN features)算法发表在2014年CVPR的经典paper:《Rich feature hierarchies for Accurate Object Detection and Segmentation》中,这篇文章是目标检测领域的里程碑式的论文,首次提出使用卷积神经网络(Convolutional Neural Networks, CNNs)处理目标检测(Object Detetion)的问题。

2. 算法思想

2.1. 基本概念

2.1.1. IoU

IoU(Intersection-over-Union),即交并比。是目标检测中使用到的一个重要概念,是一种测量在特定数据集中检测相应物体准确度的一个标准。IoU表示的是预测的候选框(candidate bounding box)与原标记框(ground truth bounding box)的交叠率(或者重叠度),也就是它们的交集与并集的比值。相关度越高该值。最理想情况是完全重叠,即比值为1,如下图所示: 在这里插入图片描述 那么,IoU的计算公式为: $$IoU=\frac{A\cap B}{A\cup B}$$

2.1.2. 边框回归Bounding Box regression

在RCNN中,使用边框回归的目的是提高检测位置的准确性。那么,Bounding Box Regression具体如何做呢? 假设数据集中有$N$个训练数据$\left \{ \left ( P^i,G^i \right ) \right \}_{i=1,\cdots ,N}$,其中$P^i$表示的是预测的边框,且$P^i=\left ( P_x^i,P_y^i,P_w^i,P_h^i \right )$,$x$和$y$表示的是边框中心点的坐标,$w$和$h$表示的是边框的宽高。$G^i$表示的是实际的边框,其结构与$P^i$一致。我们的目标是寻找到一个映射$f$,使得$f\left ( P_x^i,P_y^i,P_w^i,P_h^i \right )=\left ( \hat{G}_x^i,\hat{G}_y^i,\hat{G}_w^i,\hat{G}_h^i \right )$,同时$\left ( \hat{G}_x^i,\hat{G}_y^i,\hat{G}_w^i,\hat{G}_h^i \right )\approx \left ( G_x^i,G_y^i,G_w^i,G_h^i \right )$。 在RCNN中,边框回归是利用平移变换和尺度变换实现的。其中,平移变换为: $$\left\{\begin{matrix} \hat{G}_x=P_wd_x\left ( P \right )+P_x\\ \hat{G}_y=P_hd_y\left ( P \right )+P_y \end{matrix}\right.$$ 尺度变换为: $$\left\{\begin{matrix} \hat{G}_w=P_wexp\left ( d_w\left ( P \right ) \right )\\ \hat{G}_h=P_hexp\left ( d_h\left ( P \right ) \right ) \end{matrix}\right.$$ 其中,$d_{\ast} \left ( P \right )$可以建模成特征(在RCNN中为$pool_5$,可以表示为$\phi _5\left ( P \right )$)的线性函数,即:$d_{\ast} \left ( P \right )=\mathbf{w}^T_{\ast} \phi _5\left ( P \right )$,我们需要学习到参数$\mathbf{w}_{\ast}$,可通过对求解如下的最小化问题,得到对应的解: $$\mathbf{w}_{\ast}=\underset{\hat{\mathbf{w}}_{\ast}}{argmin}\sum_{i}^{N}\left ( t^i_{\ast}-\hat{\mathbf{w}}^T_{\ast}\phi _5\left ( P^i \right ) \right )^2+\lambda \left \| \hat{\mathbf{w}}_{\ast} \right \|^2$$

2.1.3. 非极大抑制NMS

非极大抑制NMS(non maximum suppression),从其名称就可以看出,NMS想要做到的是找到局部的极大值,抑制非极大值,主要用于在图像检测中剔除掉检测出来的冗余的bbox。对于目标检测算法,最终我们会得到一系列的bbox以及对应的分类score,NMS所做的工作就是将同一个类别下的bbox按照分类score以及IoU阈值做筛选,剔除掉冗余的bbox,NMS的具体过程为:

  • 在算法得到一系列bbox后,按照类别划分;
  • 对于每一个分类,根据分类score对该类别下所有的bbox做降序排列,最终得到一个排好序的列表list_i;
  • 从列表list_i中取出最大score的bbox_x,并将其与list_i中所有其他的bbox_y计算IoU,若IoU大于某个阈值T,则剔除bbox_y,最终保留bbox_x;
  • 从剩余的list_i中重复上述的选择操作,直到list_i中的bbox都完成筛选;
  • 对其余的类别的列表重复上述两步的操作;

2.2. 算法思想

RCNN算法的流程图如下所示: 在这里插入图片描述 从图中可以看出,RCNN主要包括三个部分:区域提名(Region Proposal),特征计算以及分类算法。其中区域提名阶段使用到了Selective Search的方法,通过Selective Search的方法产生约2000个目标可能出现的位置;特征计算阶段使用CNN算法,文章中使用AlexNet卷积神经网络,通过对$227\times 227$大小的图像计算,得到4096维的特征;分类阶段是单独训练了SVM的分类器,对每一个类别训练一个二分类的分类器(yes/no)。

2.3. 模型训练

在模型训练之前,首先需要的是训练数据集,文章中使用的是VOC数据集,数据集中包含了20个类别的物体。RCNN模型的训练需要分为几个部分单独计算,按照上述流程,分为三个部分:

  • Region Proposal:对于训练集中的所有图像,使用selective search对每张图像提取出约2000个region proposal,将提取出的region proposal保存在本地。
  • AlexNet的特征计算:通常,CNN模型都会使用到预训练模型,同样,这里使用的AlexNet模型也是在ILSVRC 2012上预训练的模型。针对此处的训练数据集,需要对模型Fine-tuning。针对Fine-tuning过程中使用到的数据集,对于一个region proposal,如果其和图像上的所有ground truth中交并比IoU大于等于0.5,则该region proposal作为这个ground truth类别的正样本,否则作为负样本,此外。ground truth也作为正样本。因为VOC一共包含20个类别,另外还包括背景,所以这里region proposal的类别为21类。在此数据集上对CNN模型进行Fine-tuning。
  • 对于每一个类别训练SVM模型:利用CNN模型,对2000个region proposals提取特征,得到$2000\times 4096$的特征,对于每一个类别训练一个SVM模型。此处的训练样本与特征计算过程中不一致,这里IoU<0.3的是负样本,Ground Truth是正样本。
  • 边界框回归:得到AlexNet的$pool_5$特征和bounding box的ground truth来训练bounding box regression,只对那些跟ground truth的IoU超过某个阈值的proposal进行训练,其余的不参与,从而对proposal的边框修正。

2.4. 模型推理

在推理阶段(测试阶段),对于一张待检测图片,主要分为以下几个部分:

  • 使用Selective Search提取出约2000个region proposals;
  • 将每一个region proposal缩放到AlexNet需要的大小,即$227\times 227$,通过AlexNet对每一个region proposal计算出4096维特征;
  • 对于每一个类,使用对应的SVM分类器计算出对应类别的概率,通过IoU过滤掉不符合阈值的边框;
  • 利用边框回归对最终的边框修正;

3. 模型存在的问题

RCNN的提出对于目标检测领域来说是个里程碑式的进步,但是RCNN算法中存在许多的不足,从上述流程可以发现,可以发现:

  • 过程太多,而且较为分散,同时需要存储中间的计算结果(region proposals以及每一个region proposal的CNN特征);
  • 存在重复的计算,每一个region proposal都需要计算CNN特征;

参考文献