【目标检测】对RCNN论文的一些理解

  RCNN可谓是深度学习应用目标检测的开山之作,RCNN提出之前,目标检测往往用传统的HOG、SIFT等方法提取特征,RBG大神认为CNN既然在图片分类产生了巨大作用,为何不能用来提特征呢?于是RCNN就诞生了。

  在设计神经网络应用目标检测的时候,首先我们可能考虑将其作为一个regression问题,也就是通过滑动窗口在一张图片上不断滑动,网络学习出窗窗是不是有物体,并且不断修正object的bounding box的位置信息,虽然神经网络具有强大的学习能力,但这种情况过于复杂,因为要不断变化sliding windows的大小,训练的时候很容易导致网络不收敛并且测试的时候速度也非常慢!而且对于同一物体处于不同图片不同大小,那么便是新样本了,想要完全去拟合是十分困难的,于是RCNN的设计思路主要解决了如下两个问题:

   1.经典的目标检测算法使用滑动窗法依次判断所有可能的区域。本文则预先提取一系列较可能是物体的候选区域,之后仅在这些候选区域上提取特征,进行判断。

  2. 经典的目标检测算法在区域中提取人工设定的特征,论文则设计深度神经网络进行特征提取,可供使用的有两个数据库:

  一个较大的识别库(ImageNet 2012):标定每张图片中物体的类别。一千万图片1000类。

 一个较小的检测库(PASCAL VOC2007):标定每张图片中,物体的类别和位置,一万图片20类。

先使用识别库进行预训练,然后运用检测库进行微调。

流程

  RCNN的即基于区域的卷积神经网络,整个RCNN的流程主要分为以下独立的四步:

  1.利用传统计算机视觉的方法(selective search)生成一系列的候选框。

  2.将每一个候选框resize到相同大小(224*224)放入神经网络进行训练。(PASCAL VOC 2007)

  3.将最后一层卷积层得到的特征图拿来作为input,训练每一个类别的SVM分类器(使用PASCAL VOC 2007数据集的话也就是20类,训练21类,为物体类+背景类)

 4. 将最后一层卷积层得到的特征图拿来作为input,对候选框进行边界回归。

这里写图片描述

候选区域生成

使用了Selective Search方法从一张图片中产生2000-3000个候选框。基本思路如下:

使用一种过分割手段,将原始图片分割成小区域。

查看现有的小区域,合并可能性最高的小区域,重复直到整张图片合并到一个区域。

输出所有存在过的小区域,即region proposals

合并规则

优先合并以下四种区域:

颜色相近;纹理相近;合并后总面积小的;合并后,总面积在BBOX中所占比例比较大的。

保证合并操作的尺度较为均匀,避免一个大区域陆续“吃掉”其他小区域。例:设有区域a-b-c-d-e-f-g-h。较好的合并方式是:ab-cd-ef-gh -> abcd-efgh -> abcdefgh。 不好的合并方法是:ab-c-d-e-f-g-h ->abcd-e-f-g-h ->abcdef-gh -> abcdefgh。

多样化与后处理

为尽可能不遗漏候选区域,上述操作在多个颜色空间中同时进行(RGB,HSV,Lab等)。在一个颜色空间中,使用上述四条规则的不同组合进行合并。所有颜色空间与所有规则的全部结果,在去除重复后,都作为候选区域输出。

作者提供了Selective Search的源码,内含较多.p文件和.mex文件,难以细查具体实现。
 

特征提取(训练CNN网络)

预处理

使用深度网络提取特征之前,将所有图片resize到统一尺寸,227*227

此处有一些细节可做变化:外扩的尺寸大小,形变时是否保持原比例,对框外区域直接截取还是补灰。会轻微影响性能。具体细节如下:

各向异性缩放:

这种方法很简单,就是不管图片的长宽比例,管它是否扭曲,进行缩放就是了,全部缩放到CNN输入的大小227*227。

各项同性缩放:

因为图片扭曲后,估计会对后续CNN的训练精度有影响,于是作者也测试了“各向同性缩放”方案。有两种办法:

先扩充后裁剪

直接在原始图片中,把bounding box的边界进行扩展延伸成正方形,然后再进行裁剪;如果已经延伸到了原始图片的外边界,那么就用bounding box中的颜色均值填充;

最终论文采取的是各向异性缩放。

预训练

网络结构 
基本借鉴Hinton 2012年在Image Net上的分类网络2,略作简化3。 
 这里写图片描述
此网络提取的特征为4096维,之后送入一个4096->1000的全连接(fc)层进行分类。 
学习率0.01。

训练数据 
使用ILVCR 2012的全部数据进行训练,输入一张图片,输出1000维的类别标号。

调优训练

把最后一层fc层改为4096-21 学习率设置为0.01,每一个batch包含32个正样本(属于20类)和96个背景。用PASCAL VOC2007的数据进行参数调优。

对于每一张图片的候选区域,如果候选区域与GT的IOU>0.5则认为是正样本 否则认为是负样本。

SVM分类器

将每一个候选区域产生的特征图送入每一个类别的SVM二分类器中,注意在这里正样本只采用GT样本,候选区域与GT的IOU<0.3设置为负样本,其他候选区域丢弃。(注意这里的IOU与深度网络中的IOU定义是不同的!论文中是这样解释的,候选区域中负样本数量太多,所以IOU设置的大一点能够加大正样本的比例,防止最终结果向负样本倾斜。同时论文也试验了在SVM中用IOU<0.5的作为负样本,发现效果没有0.3好,所以才采用0.3,这是一个理解上的难点。神经网络需要大量的训练数据,SVM是可以适应小规模数据集的)

BBOX回归

目标检测的衡量标准是重叠面积:许多看似精准的检测结果,往往因为候选框不够准确,重叠面积很小,因此需要对每个BBOX进行位置精修。

回归器,对每一类目标,使用一个线性回归器进行精修。正则项λ=10000。 
输入为深度网络pool5层的4096维特征,输出为xy方向的缩放和平移。 

训练样本为判定为本类的BBOX,和GT重叠面积大于0.6的候选框。

结果

论文发表的2014年,DPM已经进入瓶颈期,即使使用复杂的特征和结构得到的提升也十分有限。本文将深度学习引入检测领域,一举将PASCAL VOC上的检测率从35.1%提升到53.7%。 
本文的前两个步骤(候选区域提取+特征提取)与待检测类别无关,可以在不同类之间共用。这两步在GPU上约需13秒。 
同时检测多类时,需要倍增的只有后两步骤(判别+精修),都是简单的线性运算,速度很快。这两步对于100K类别只需10秒。
 

猜你喜欢

转载自blog.csdn.net/qq_36302589/article/details/84921430