RCNN

基本情况

RBG大神的RCNN(Rich feature hierarchies for accurate object detection and semantic segmentation)是当之无愧的将CNN引入到目标检测的开山之作,其后续的Fast R-CNN, Faster R-CNN更是将CNN以及提出的RPN用到了高潮。之前拜读过大神的文章,但是有些理解不够深刻,今天斗胆进行归纳一二。

首先,说明一下RCNN的基本情况,RCNN检测一张图片中所有类目标的速度大致在45秒,同时相对于之前应用于目标检测经典的sliding windows类的方法,其采取了Selective Search的方法进行候选框的标定,然后再使用CNN进行候选框的选择与分类。其使用两个数据库: 一个较大的识别库(ImageNet ILSVC 2012):标定每张图片中物体的类别。一千万图像,1000类。 一个较小的检测库(PASCAL VOC 2007):标定每张图片中,物体的类别和位置,一万图像,20类。 本文使用识别库进行预训练得到CNN(有监督预训练),而后用检测库调优参数,最后在检测库上评测。

总体流程

RCNN算法实际上可以划分为四个步骤,分别为:

  1. 候选区域生成: 使用Selective Search方法在一张图像上生成1K~2K个候选区域
  2. 特征提取:对每个候选区域,使用CNN提取特征
  3. 类别判断:特征传入每一类的SVM分类器中,判断是否属于该类
  4. 位置精修:使用回归器精细修正候选框位置

论文的流程如图所示:

R-CNN

候选区域生成

为了解论文中提到的候选区域生成的基本思想,我们首先了解一下Selective Search的基本思想。

  1. 使用过度分割,将图像分割成1k~2k个小区域
  2. 查看现有小区域,依照合并规则合并可能性最高的相邻两个区域。重复直到整张图合并成一个区域为止
  3. 输出所有曾经存在过的区域,作为所有的候选区域

合并规则

  1. 颜色相近(颜色直方图)
  2. 纹理相近(梯度直方图)
  3. 防吞并合并(若区域a-b-c-d, 合并方式为ab-cd, 而不是ab-c-d, abc-d)
  4. 合并后,总面积在其bounding box中所占比例大的

候选区域生成

合并之后的区域特征可以直接通过子区域的特征计算得到。

而由于CNN网络要求输入的大小是一定的,在RCNN中也就是设置的227*227。因此我们需要进行图片的缩放。

在论文中提到了两种缩放的方法。一种是各项异性缩放,另外一种是各项同性缩放

各项异性缩放的基本思想是无论得到的初始候选区域是多大,都将其之间缩放到227*227的大小。各项同性缩放有两种实现方式,一种是先扩充后裁剪:先在原始图片上将bounding box边界扩展成正方形,然后再进行裁剪,如果已经延伸到了原始图片的外边界,那么就用bounding box中的颜色均值填充;另外一种是先裁剪后扩充:先把bounding box的图片裁剪出来,然后用背景颜色填充成填充成正方形图片(背景颜色也是采用bounding box像素颜色的均值)。

同时,上述异性、同性缩放的过程中,还伴随着padding的处理。实验结果表明,使用各项异性缩放,padding=16时的精度最高。

此外,值得注意的是,由于更深的网络,更大的输入图片和滑动步长,使得使用滑动窗口来定位的方法充满了挑战,因此论文中最后放弃了使用sliding windows的策略。

特征提取

网络架构设计

论文中讨论了AlexNet和VGG-16两种网络,最后考虑各种因素选择了速度较快,但是精度较低的AlexNet。

经过测试,ALexNet的精度是58.5%, 而VGG-16精度为66%。虽然VGG模型由于使用较小的卷积核、选择较小的跨步,网络的精度相当高,但是计算量确实AlexNet的7倍。

本来RCNN基本思路的计算量就比较大,可能是考虑这种因素最后选择了AlexNet,同时也正式因此可以考虑使用SqueezeNet的网络结构。

ALexNet的特征提取部分包含了5个卷基层,两个全连接层,在AlexNet中p5层神经元个数为9216,f6,f7神经元个数均为4096,通过这个网路的训练之后,每个输入候选图片都能够得到一个4096维的特征向量。

参数初始化

由于物体检测的一个难点在于,物体标签的训练数据较少,如果直接采用随机初始化CNN参数的方法,那么目前的训练数据量是远远不够的。这种情况之下最后使用某种方法将参数初始化,然后再进行有监督的参数微调。所有文章在设计网络结构的时候,直接用AlexNet网络,直接使用其参数进行网路初始化,然后fine-tuning进行网络参数微调。网络优化求解时采用SGD,learning-rate设置为0.001。

Fine-tuning

我们接着采用 selective search 搜索出来的候选框 (PASCAL VOC 数据库中的图片) 继续对上面预训练的CNN模型进行fine-tuning训练。假设要检测的物体类别有N类,那么我们就需要把上面预训练阶段的CNN模型的最后一层给替换掉,替换成N+1个输出的神经元(加1,表示还有一个背景) (20 + 1bg = 21)(CNN前五层卷积层就是通用的特征提取器,二后面的两个全连接层学习到的特征就是针对特定任务的特征),然后这一层直接采用参数随机初始化的方法,其它网络层的参数不变;接着就可以开始继续SGD训练了。开始的时候,SGD学习率选择0.001,在每次训练的时候,我们batch size大小选择128,其中32个为正样本,96个为负样本。

同时考虑到一张图片有2000个候选框,但是人工标注的数据一张图片仅仅标注了一个正确的bounding box,因此搜索出来的2000个候选框不可能会出现一个与人工标注完全匹配的候选框。因此我们选择那些IOU大于0.5的数据作为正样本,其他的作为负样本。

类别判断

同样是执行分类任务的CNN和SVM,为何在使用了CNN之后又进行SVM的分类呢?原因是CNN与SVM训练过程的正负样本定义方式不同,导致了softmax输出比采用SVM精度低。因为CNN在训练时为了防止过拟合,需要大量训练数据,所以IOU设置为了大于0.5;而SVM本来就是适用于少样本训练的,因此对IOU要求较高,也就是需要整个bounding box都在其中。

实验表明,在SVM训练阶段使用0.3的IOU效果最好,训练之后得到的每张图是一个2000*4096的矩阵,然后乘以对应类别的SVM(4096*20), 即可得到对某一类的分数。

接着使用NMS除去多余的框,再对这些框进行canny边缘检测,就可以得到bounding box了。

位置精修

目标检测问题的衡量标准是重叠面积:许多看似准确的检测结果,往往因为候选框不够准确,重叠面积很小。故需要一个位置精修步骤。 回归器:对每一类目标,使用一个线性脊回归器进行精修。正则项λ=10000。 输入为深度网络pool5层的4096维特征,输出为xy方向的缩放和平移。 训练样本:判定为本类的候选框中和真值重叠面积大于0.6的候选框。

The End.

  • 12
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值