R-CNN系列目标检测模型

R-CNN、Fast R-CNN、Faster R-CNN

1 R-CNN

1.1 Introduction

R-CNN(Region CNN,区域卷积神经网络)可以说是利用深度学习进行目标检测的开山之作。

1.2 Idea

  • 经典的目标检测算法使用滑动窗法依次判断所有可能的区域。作者则(采用Selective Search方法)预先提取一系列较可能是物体的候选区域。
  • 经典的目标检测算法在区域中提取人工设定的特征。作者则采用深度网络(CNN)进行特征提取。

1.3 Network

R-CNN网络结构

Step1 :输入图像
Step2 :每张图像生成1K~2K个候选区域
Step3 :对每个候选区域,使用卷积网络(如VGG16)提取特征
Step4 :将特征送入每一类的SVM分类器,判别是否属于该类; 使用回归器精细修正候选框位置

1.4 Detail

Region Proposal

对应上述Step2

作者使用Selective Search(选择性搜索)生成候选区域,Selective Search的实现思路如下:

(1)使用一种过分割手段,将图像分割成小区域

(2)查看现有小区域,合并可能性最高的两个区域,重复直到整张图像合并成一个区域位置。优先合并以下区域:

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

(3)输出所有曾经存在过的区域,即所谓候选区域

具体算法可以看原论文《Selective Search for Object Recognition》

Feature Extraction

对应上述Step3

使用深度网络提取特征之前,首先把候选区域归一化成同一尺寸227×227。

作者使用CNN网络进行训练,第一选择经典的Alexnet;第二选择VGG16。(经测试Alexnet精度为58.5%,VGG16精度为66%)

通过CNN网络训练完毕后,最后提取特征每个输入候选框图片都能得到一个4096维的特征向量。

Classification and Regression

分类,作者使用的是SVM分类器

作者测试了IOU阈值各种方案数值0.1,0.2,0.3,0.4,0.5。最后通过训练发现,如果选择IOU阈值为0.3效果最好(选择为0精度下降了4个百分点,选择0.5精度下降了5个百分点),即当重叠度小于0.3的时候,把它标注为负样本。

我们将为每个物体类训练一个SVM分类器。当我们用CNN提取2000个候选框,可以得到[2000x4096]这样的特征向量矩阵,然后我们只需要把这样的一个矩阵与svm权值矩阵4096xN点乘(N为分类类别数目,因为我们训练的N个SVM,每个SVM包含了4096个权值w),就可以得到分类结果了。

边界回归,也就是Bounding-box regression。

2 Fast R-CNN

2.1 Introduction

继2014年的R-CNN推出之后,作者在2015年推出Fast R-CNN,其流程更为紧凑,大幅提升了目标检测的速度。Fast R-CNN和R-CNN相比,训练时间从84小时减少到9.5小时,测试时间从47秒减少到0.32秒,并且在PASCAL VOC 2007上测试的准确率相差无几,约在66%-67%之间。

2.2 Idea

与前作相比,Fast R-CNN解决了以下问题:

1、训练、测试时速度慢
R-CNN的一张图像内候选框之间存在大量重叠,提取特征操作冗余。而Fast R-CNN将整张图像归一化后直接送入深度网络,紧接着送入从这幅图像上提取出的候选区域。这些候选区域的前几层特征不需要再重复计算。
2、训练所需空间大
R-CNN中独立的SVM分类器和回归器需要大量特征作为训练样本。Fast R-CNN把类别判断和位置精调统一用深度网络实现,不再需要额外存储。

2.3Network

Step1 :首先将整个图片输入到一个卷积网络,得到整张图的feature map,然后将region proposal(RoI)映射到feature map的对应位置。

Step2 :RoI pooling layer提取一个__固定长度__的特征向量,每个特征会输入到一系列全连接层,得到一个RoI特征向量

Step3 :建立softmax层进行分类,建立bounding box regressor回归边界,二者合并为多目标损失函数任务。

2.4 Detail

Feature Extraction

对应上述Step2

在Fast R-CNN中,作者提出了一个叫做ROI Pooling的网络层,这个网络层可以把不同大小的输入[Region Proposal]映射到一个固定尺度的特征向量。

在文章当中,作者使用H=W=7的超参数作为ROI Pooling输出的特征向量的固定尺度。即将一个h*w的region proposal分割成H*W大小的网格,作为最后一层卷积层,然后分别对每个网格的进行Max Pooling,将特征图上大小不一的region proposal转变为大小统一的H*W矩阵。

意义 :因为全连接层的输入要求尺寸大小一样,所以不能直接将不同大小的region proposal映射到feature map作为输出,需要做尺寸变换。这个时候在全连接层前加一层ROI Pooling可以解决该问题。

Classification and Regression

对应上述Step3

在R-CNN中,先生成候选框,然后再通过CNN提取特征,之后再用SVM分类,最后再做回归得到具体位置(bbox regression)。

而在Fast R-CNN中,作者把最后的bbox regression也放进了神经网络内部,与区域分类合并成为了一个multi-task模型。

分类loss:使用一个N+1路的softmax代替原来的SVM分类器,其中的N是类别个数,1是背景,使用交叉熵损失
回归loss:一个4xN路输出的regressor,也就是说对于每个类别都会训练一个单独的regressor,使用平均绝对误差(MAE)损失

3 Faster R-CNN

3.1 Introduction

3.2 Idea

与前作相比:

Faster R-CNN设计了提取候选区域的网络RPN,代替了费时的Selective Search(选择性搜索),已经将Feature Extraction、

region proposal、Classification、Bounding-Box regression(rect refine)都整合在了一个网络中,使得综合性能有较大提高

3.3 Network

Step1 :Conv layers。作为一种CNN网络目标检测方法,Faster RCNN首先使用一组基础的conv+relu+pooling层提取image的feature maps。该feature maps被共享用于后续RPN层和全连接层。

Step2 :Region Proposal Networks。RPN网络用于生成region proposals。该层通过softmax判断anchors属于positive或者negative,再利用bounding box regression修正anchors获得精确的proposals。

Step3 :RoI Pooling。该层收集输入的feature maps和proposals,综合这些信息后提取proposal feature maps,送入后续全连接层判定目标类别。

Step4 :Classification。利用proposal feature maps计算proposal的类别,同时再次bounding box regression获得检测框最终的精确位置。

3.4 Detail

RPN

上图展示了RPN网络的具体结构。可以看到RPN网络实际分为2条线:

上面一条通过softmax分类anchors获得positive和negative分类,

下面一条用于计算对于anchors的bounding box regression偏移量,以获得精确的proposal。

而最后的Proposal层则负责综合positive anchors和对应bounding box regression偏移量获取proposals,同时剔除太小和超出边界的proposals。其实整个网络到了Proposal Layer这里,就完成了相当于目标定位的功能。

Todo :

  1. 关于Selective Search、RPN、Bounding-Box regression的详细实现原理,还是要看看具体代码才能更清晰。