1. 概述
RCNN(Region with CNN features)[1]算法宣布在2014年CVPR的经典paper:《Rich feature hierarchies for Accurate Object Detection and Segmentation》中,这篇文章是方针检测范畴的里程碑式的论文,首次提出运用卷积神经网络(Convolutional Neural Networks, CNNs)处理方针检测(Object Detetion)的问题。
2. 算法思想
2.1. RCNN算法流程
RCNN算法的流程图如下所示:
从图中能够看出,RCNN首要包括三个部分:
- 区域提名(Region Proposal):运用到了Selective Search[2]的办法,经过Selective Search的办法产生约2000个方针或许呈现的位置。在参阅[3]平分别给出了C++和Python的完成;
- 特征核算:特征核算阶段运用CNN算法,文章中运用AlexNet卷积神经网络,首先裁剪出上述2000个方针或许呈现的位置的图画,并将其reshape成227227227\times 227,最后经过AlexNet进行特征核算,得到4096维的特征向量;
- 分类算法:分类阶段是独自练习了SVM的分类器,对每一个类别练习一个二分类的分类器(yes/no)。
针关于候选区域的reshape进程,在参阅[4]中做了详细的剖析,如下图所示:
剖析了三种的reshape办法,分别为:
- tightest square with context
- tightest square without context
- warp
2.2. 几个重要的概念
2.2.1. IoU
IoU(Intersection-over-Union),即交并比。是方针检测中运用到的一个重要概念,是一种测量在特定数据会集检测相应物体准确度的一个规范。IoU表明的是猜测的候选框(candidate bounding box)与原标记框(ground truth bounding box)的交叠率(或许堆叠度),也便是它们的交集与并集的比值。相关度越高该值。最理想情况是完全堆叠,即比值为1,如下图所示:
那么,IoU的核算公式为:
2.2.2. 边框回归Bounding Box Regression
在RCNN中,运用边框回归的目的是进步检测位置的准确性。那么,Bounding Box Regression详细如何做呢?在参阅[2]中给出了Bounding Box Regression的详细做法:假设数据会集有NN个练习数据{(Pi,Gi)}i=1,⋯ ,N\left \{ \left ( P^i,G^i \right ) \right \}_{i=1,\cdots ,N},其间PiP^i表明的是猜测的边框,且Pi=(Pxi,Pyi,Pwi,Phi)P^i=\left ( P_x^i,P_y^i,P_w^i,P_h^i \right ),xx和yy表明的是边框中心点的坐标,ww和hh表明的是边框的宽高。GiG^i表明的是实际的边框,其结构与PiP^i共同。咱们的方针是寻找到一个映射ff,使得f(Pxi,Pyi,Pwi,Phi)=(Gxi,Gyi,Gwi,Ghi)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 ),一起(Gxi,Gyi,Gwi,Ghi)≈(Gxi,Gyi,Gwi,Ghi)\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中,边框回归是运用平移改换和标准改换完成的。其间,平移改换为:
标准改换为:
其间,d∗(P)d_{\ast} \left ( P \right )能够建模成特征(在RCNN中为pool5pool_5,能够表明为5(P)\phi _5\left ( P \right ))的线性函数,即:d∗(P)=w∗T5(P)d_{\ast} \left ( P \right )=\mathbf{w}^T_{\ast} \phi _5\left ( P \right ),咱们需求学习到参数w∗\mathbf{w}_{\ast},可经过对求解如下的最小化问题,得到对应的解:
其间,方针t∗t_{\ast}能够由上述的两个改换得到:
2.2.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.3. RCNN模型的练习
在模型练习之前,首先需求的是练习数据集,文章中运用的是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提取特征,得到200040962000\times 4096的特征,关于每一个类别练习一个SVM模型。此处的练习样本与特征核算进程中不共同,这儿IoU<0.3的是负样本,Ground Truth是正样本。
- 鸿沟框回归:得到AlexNet的pool5pool_5特征和bounding box的ground truth来练习bounding box regression,只对那些跟ground truth的IoU超越某个阈值的proposal进行练习,其他的不参与,从而对proposal的边框批改。
2.4. RCNN模型推理
在推理阶段(测试阶段),关于一张待检测图片,首要分为以下几个部分:
- 运用Selective Search提取出约2000个region proposals;
- 将每一个region proposal缩放到AlexNet需求的巨细,即227227227\times 227,经过AlexNet对每一个region proposal核算出4096维特征;
- 关于每一个类,运用对应的SVM分类器核算出对应类别的概率,运用非极大值按捺(为每个类别独自调用),然后去掉一些与高分被选区域IoU大于阈值的候选框;
- 运用边框回归对终究的边框批改;
3. 模型存在的问题
RCNN的提出关于方针检测范畴来说是个里程碑式的进步,但是RCNN算法中存在许多的缺乏,从上述流程能够发现,能够发现:
- 进程太多,而且较为分散,一起需求存储中间的核算结果(region proposals以及每一个region proposal的CNN特征);
- 存在重复的核算,每一个region proposal都需求核算CNN特征;
参阅文献
[1] Girshick R, Donahue J, Darrell T, et al. Rich feature hierarchies for accurate object detection and semantic segmentation[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2014: 580-587.
[2] Uijlings J R R, Van De Sande K E A, Gevers T, et al. Selective search for object recognition[J]. International journal of computer vision, 2013, 104(2): 154-171.
[3] Selective Search for Object Detection (C++ / Python)
[4] JitendraMalik R G J D T D. Rich feature hierarchies for accurate object detection and semantic segmentation Supplementary material[J].
[5] 【核算机视觉——RCNN方针检测系列】一、挑选性查找详解
[6] 【核算机视觉—RCNN方针检测系列】二、鸿沟框回归(Bounding-Box Regression)
[7] www.rossgirshick.info/