目标检测:R-CNN

目标检测:R-CNN

最近实习的时候接触了目标检测类的任务,在使用这些算法的同时了解一下算法整体的流程和内容。作为RCNN算法系列的开山鼻祖,采用了CNN网络用于图像特征的提取,而不是之前的人工设定的特征提取。但是RCNN应该有很多细节都被后面的算法改进了(产生了一系列RCNN的算法)。所以这里只对算法的流程做一个大概的理解。

RCNN的基本流程

RCNN算法有4个步骤:

  1. 候选区域生成: 一张图像生成约2K个候选区域 (Selective Search 方法)
  2. 特征提取: 对每个候选区域,使用深度卷积网络提取特征
  3. 类别判断: 特征送入每一类的SVM 分类器,判别是否属于该类
  4. 位置精修: 使用回归器精细修正候选框位置

步骤一:候选区域的生成

Selective Search方法用于生成候选区域,其流程如下:

  1. 采取过分割手段,将图像分割成小区域
  2. 再通过颜色直方图,梯度直方图相近等规则进行区域合并
  3. 输出所有曾经存在过的区域,即为候选区域

其中区域合并的算法跟非极大值抑制(NMS)有些类似:

  1. 初始化相似度集合S
  2. 计算两两相邻区域之间的相似度,将其添加到相似度集合S中
  3. 从相似度集合S中找出,相似度最大的两个区域 ri 和rj,将其合并成为一个区域 rt,从相似度集合中除去原先与ri和rj相邻区域之间计算的相似度,计算rt与其相邻区域(原先与ri或rj相邻的区域)的相似度,将其结果添加的到相似度集合S中。同时将新区域 rt 添加到 区域集合R中。
  4. 获取每个区域的Bounding Boxes,这个结果就是物体位置的可能结果L

而合并的规则有以下几种条件:

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

步骤二:特征的提取

我们现在已经获得了约2k个候选区域,下面要做的就是使用CNN来提取这2k个候选区域中的特征,用于步骤三中的分类。
CNN网络使用的是Alex net,其特征提取部分包括5个卷积层、2个全连接层,最后的fc7有4096个神经元,也就是说每个候选区域输入网络后的输出是一个4096维的特征向量。假设我们有2000个候选区域,那么最终步骤二得到的就是一个$2000 \times 4096$的矩阵

png

这一步骤有两个对于CNN网络的训练过程:

有监督预训练(迁移学习):

样本 来源
正样本 ILSVRC2012
负样本 ILSVRC2012

ILSVRC样本集上仅有图像类别标签,没有图像物体位置标注。该网络输入为227×227的ILSVRC训练集图像,输出最后一层为4096维特征->1000类的映射,训练的是网络参数。

特定样本下的微调

样本 来源
正样本 Ground Truth+与Ground Truth相交IoU>0.5的建议框
负样本 负样本为与Ground Truth相交IoU≤0.5的建议框

PASCAL VOC 2007样本集上既有图像中物体类别标签,也有图像中物体位置标签。

batch为32个正样本和96个负样本。

该网络输入为建议框【由selective search而来】变形后的227×227的图像,修改了原来的1000为类别输出,改为21维【20类+背景】输出。

这里我一开始有一个疑问,既然在特定样本下的微调已经训练了网络进行21分类,为什么不直接使用这个结果,而是fc7输出的特征给SVM再进行分类呢?后来在查找资料的时候看到了这样一段话:

因为微调时和训练SVM时所采用的正负样本阈值不同,微调阶段正样本定义并不强调精准的位置,而SVM正样本只有Ground Truth;并且微调阶段的负样本是随机抽样的,而SVM的负样本是经过hard negative mining方法筛选的;导致在采用SoftMax会使PSACAL VOC 2007测试集上mAP从54.2%降低到50.9%。

步骤三:类别判断

现在通过CNN获得了候选区域的特征,即一个$2000 \times 4096$的矩阵,下面就是使用SVM对2000个候选区域进行分类。SVM组成的权值矩阵为$4096 \times 20$,那么最后获得一个$2000 \times 20$的矩阵,表示每个候选区域是某种类别的得分。

这里对SVM的训练:
| 样本 | 来源 |
| —- | —— |
|正样本|Ground Truth|
|负样本|与Ground Truth相交IoU<0.3的建议框|

步骤四:位置精修

在使用回归器精细修正候选框位置修正位置之前,我们需要使用NMS剔除重叠的候选区域,因为同一个物体可能被多个候选区域覆盖,NMS就是找到对每个物体置信度最高的那个候选区域,并去掉置信度低的。

然后就可以使用回归器来对BBox进行校正。

png

如上图,黄色框口P表示建议框Region Proposal,绿色窗口G表示实际框Ground Truth,红色窗口$\hat{G}$表示Region Proposal进行回归后的预测窗口,现在的目标是找到P到$\hat{G}$的线性变换,,使得$\hat{G}$与G越相近。

先来定义P窗口的数学表达式:

其中$\left(P_{x}^{i}, P_{y}^{i}\right)$表示第一个i窗口的中心点坐标,$\left(P_{w}^{i}, P_{h}^{i}\right)$分别为第i个窗口的宽和高。$G$和$\hat{G}$同理。

再定义四种变换函数:

$d_{x}(P)$和$d_{y}(P)$通过平移对x和y进行变化,$d_{x}(P)$和$d_{y}(P)$通过缩放对w和h进行变化,即下面四个式子所示:

每一个$d_{/}(P)$(\表示x,y,w,h)都是一个AlexNet CNN网络Pool5层特征$\phi_{5}(P)$的线性函数,即$d_{}(P)=w_{}^{T} \phi_{5}(P)$,那么$w_{*}^{T}$就是所需要学习的回归参数。损失函数即为:

其中,回归目标$t_{*}$由训练输入对按下式计算得来:

从上面的式子可以看出来,优化的目标是让变换函数$d_{}(P)$趋近于偏移值$\Delta$,也就是$t_{}$。至于$t$的定义中为什么要除以高或者宽,网上资料有认为是为了消除BBox大小对于偏移值的影响(较大的bbox偏移值也可能更大,都除以bbox的宽或高后相当于转换成一种相对的偏移值)。

而宽高的尺度加$log$可能是需要限制缩放尺度必需大于0,所以在偏移值上加了exp函数,那么反推回来在t上就是log函数。

另外,在看资料的时候一直有点困惑,为什么$\hat{G}_{x} =P_{w} d_{x}(P)+P_{x}$ 要在$d_{x}(P)$上乘一个$P_{w}$而不是直接是$\hat{G}_{x} = d_{x}(P)+P_{x}$。现在大概可以按照这样的思路来理清一下:

  1. 最终目标是得到一个线性变换,输入pool5的特征,输出偏移值。
  2. 优化目标是$d_{x}(P)$和$t_{}$的平方误差最小。也就是$d_{}(p) \rightarrow t_{*}$
  3. 将$d_{*}$带入 $\hat{G}$中得到等式

需要注意的是,当候选区域和GT相差较小的时候(IoU > 0.6),我们才将其作为样本进行bbox回归训练,因为IoU足够大的时候我们才假设这个变换是一个线性问题。

Two-Stage类的算法

RCNN是一个典型的two stage算法。需要先生成若干候选区域,再对候选区域进行检测和分类。训练的时候同样也要分开训练RPN网络和CNN网络。

参考资料:

https://arxiv.org/pdf/1311.2524.pdf

https://blog.csdn.net/zijin0802034/article/details/77685438

0%