RCNN论文阅读

RCNN是利用深度学习来进行目标检测的开山之作,在此之前,主要是利用人工提取的具有鲁棒性的特征,如HOG,SIFT等。下面先简单介绍一下HOG。

1. HOG Pyramid

特征金字塔,对不同大小的物体进行适应,设计尺度不变性特征

HOG特征->SVM分类

2.DPM模型 Deformable Part Model

加组件的HOG特征,组件之间计算弹性得分,优化可变形参数

 

如果没有弹性距离,就是BOW(Bag of Word)模型,问题很大,位置信息全部丢失:

n个组件的DPM计算流程:
 

3.Selective Search思想:

过分割后基于颜色纹理等相似度合并,

然后,过分割、分层合并、建议区域排序

4.基于Selective Search + DPM/HOG  + SVM 的物体识别

此框架基本如RCNN目标检测模型的雏形,目标检测只是将DPM模型替换成CNN来进行特征的提取。

 

5.RCNN

(1) RCNN 网络模型

RCNN模块主要由三部分构成,SS候选区域提取+CNN候选区域特征提取+SVM目标分类+BBOX regression。由于SS提取的目标可能不是很准确,所以最后为了提高BBOX 的准确度,加入了bbox regression。

(2) 训练部分

  • 首先利用Selective Search提取2000个region proposal。如何判定这2000个region proposal的label呢?作者提出了一个概念叫“IOU”。“IOU”指的是(A∩B)/(A∪B)。作者通过实验发现,IOU取0.3比较好,当region proposal与Ground Truth的IOU大于0.3时,就将其label作为正样本,否则就为负样本。注意,这并不是指二分类,而是指的多分类,总共21类别。
  • 由于2k个region proposal的size不是一样,而在全连接层是需要size一致的,因此作者将它们wrap到227x227的大小。
  • CNN模块有两种可选方案,分别为Alexnet和VGG16,Alexnet精度不如VGG16,但是模型比VGG16小。选定模型后就主要由Pre-training 和 fine-tuning两部分组成:
  1. Pre-training部分,利用ImageNet 数据集进行预训练,预训练的目的主要是针对训练数据集不够的情况下,用预训练的参数初始化整个网络模型,主要每个神经元的Weights等参数,利用这种方式初始化的权重比直接赋0更容易收敛。在这用的完全是之前别人训练好的模型,输入的图片也是原始目标图片,不需要什么SS操作,利用别人标注好的直接训练。
  2. fine-tuning部分,利用PASCAL 数据集进行fine-tuning。这边输入为刚刚利用SS提取的region Proposal。Fine-tuning模型和pre-training大部分是一样的,只有fc7由原来的1000维向量变成了21维。
  • 最后一步利用SVM对CNN 部分提取到的特征进行分类。不直接利用softmax作为最后结果输出是因为作者在训练CNN的时候,做了一个比较宽松的数据处理,导致Softmax的效果不是很好,所以又加上一层SVM。

(3) 测试部分

    使用selective search的方法在测试图片上提取2000个region propasals ,将每个region proposals归一化到227x227,然后再CNN中正向传播,将最后一层得到的特征提取出来。然后对于每一个类别,使用为这一类训练的SVM分类器对提取的特征向量进行打分,得到测试图片中对于所有region proposals的对于这一类的分数,再使用贪心的非极大值抑制(NMS)去除相交的多余的框。再对这些框进行canny边缘检测,就可以得到bounding-box(then B-BoxRegression)。

(4) 为什么要做BBox Regression

   为了将Bounding Box尽可能的往Ground Truth上面靠。

(5) RCNN的缺点

1). 训练步骤繁琐:首先要用SS算法提取图片的候选区域,然后利用IOU计算每一块候选区域的标签,这是需要单独计算并将数据保存下来的。其次,利用候选区域与候选区域的标签训练CNN+SVM。最后利用BBox对边框回归。

2). 训练测试的速度均比较慢

3). 训练占用较大磁盘空间

4). 由于存在fc,所以需要对候选区域尺寸进行Resize,这样会导致图像扭曲变形,影响检测精度。

展开阅读全文

没有更多推荐了,返回首页