赞
踩
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算法实际上可以划分为四个步骤,分别为:
论文的流程如图所示:
为了解论文中提到的候选区域生成的基本思想,我们首先了解一下Selective Search的基本思想。
合并规则
合并之后的区域特征可以直接通过子区域的特征计算得到。
而由于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。
我们接着采用 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.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。