重温R-CNN系列, SPP-NET, YOLO系列, SSD, R-FCN等目标检测方法(一)

  • 0.序言
  • 1.R-CNN系列
    • R-CNN
    • SPP-net
    • Fast R-CNN
    • Faster R-CNN

0.序言

前段时间从相关滤波的目标跟踪方向转到目标检测算法这边来,最初的方向都是往深度学习方向靠近,结合的是计算机视觉,也就是图像目标检测与跟着,其他的方面也不太适合个人去学,从某专栏,一路从RCNN看起,主要看的就是R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD和YOLO2,最近YOLO3也出来了,听说作者还吸引了一批粉丝。

1.R-CNN系列

R-CNN

R-CNN的基本技术路线分四块:
+ step1 提取候选框(ss方法 selective search)
+ step2 特征提取
+ step3 分类器
+ step4 位置精修
从R-CNN到Fast R-CNN,再到Faster R-CNN,其实就是一个从各个模块相互独立到整合一体的过程,到最后基本实现端对端的训练。

提取候选框
该模块在训练和测试阶段步骤一致,对输入图片,利用ss方法提取出2000个左右的候选框。由于后续卷积模块要求输入图片大小统一,将2000个候选框resize到227*227大小分辨率。

特征提取
在训练阶段,ss方法提取的候选框不一定包含了目标,导致了该阶段只能用于提取特征。而提取特征的CNN模型是需要预先训练得到的,R-CNN采用了迁移学习的思想: 先用了ILSVRC2012这个训练数据库(这是一个图片分类训练数据库),先进行网络图片分类训练。这个数据库有大量的标注数据,共包含了1000种类别物体,因此预训练阶段CNN模型的输出是1000个神经元(当然也直接可以采用Alexnet训练好的模型参数)。
在测试阶段,图像经过候选框提取得到统一大小227*227的proposal后,进入CNN模型后,在最后一个全连接层输出结果是2000*4096维度向量,用于最终测试的特征。

分类器
训练阶段,算是一个二分类问题,要么框中有整个目标,要么框中没有整个目标。单也不一定以这种绝对方法来区分训练中的正负样本,作者在实验中取了一个IOU阈值,当proposal的IOU阈值低于该值时,判断为负样本,否则正样本。一旦CNN f7层特征被提取出来,那么我们将为每个物体类训练一个svm分类器。当我们用CNN提取2000个候选框,可以得到2000*4096这样的特征向量矩阵,然后我们只需要把这样的一个矩阵与svm权值矩阵4096*N点乘(N为分类类别数目,因为我们训练的N个svm,每个svm包含了4096个权值w),就可以得到结果了。
得到的特征输入到SVM进行分类看看这个feature vector所对应的region proposal是需要的物体还是无关的实物(background) 。 排序,canny边界检测之后就得到了我们需要的bounding-box。
测试阶段,对于一副测试图像,提取得到的2000个proposal经过CNN特征提取后输入到SVM分类器预测模型中,可以给出特定类别评分结果。分数进行排序,筛选前面一部分进行NMS(非极大值抑制)去除相交的多余候选框。

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

在讲Fast R-CNN前需要联系一下SPPnet

SPP-net

主要介绍一下网络特点:
传统的CNN网络,卷积层对输入图片的大小没有要求,但是全连接层要求输入图片的尺寸需要一致。所以在R-CNN中,ss方法提取的候选框需要通过Crop或者Wrao操作resize到一致大小,而后进入特征提取阶段。
而SPPnet在最后一个卷积层与其后的全连接层之间添加了一个SPP(spatial pyramid pooling)layer,从而消除了之前所需要的resize操作,使得该网络适用于不同尺寸的输入图像,提取的图像特征具有更好的尺度不变性,降低了训练过程中的过拟合可能性。

Fast R-CNN

R-CNN和SPP-net在训练时pipeline是隔离的:提取proposal,CNN提取特征,SVM分类,bbox regression。
Fast R-CNN 主要贡献点 :
+ 实现大部分端到端的训练(除去proposal提取阶段):所有的特征都暂存在显存中,就不需要额外的磁盘空。
+ joint training (SVM分类,bbox回归 联合起来在CNN阶段训练)把最后一层的Softmax换成两个,一个是对区域的分类Softmax(包括背景),另一个是对bounding box的微调。这个网络有两个输入,一个是整张图片,另一个是候选proposals算法产生的可能proposals的坐标。(对于SVM和Softmax,论文在SVM和Softmax的对比实验中说明,SVM的优势并不明显,故直接用Softmax将整个网络整合训练更好。对于联合训练: 同时利用了分类的监督信息和回归的监督信息,使得网络训练的更加鲁棒,效果更好。这两种信息是可以有效联合的。)
+ 提出了一个RoI层,算是SPP的变种,SPP是pooling成多个固定尺度,RoI只pooling到单个固定的尺度 (论文通过实验得到的结论是多尺度学习能提高一点点mAP,不过计算量成倍的增加,故单尺度训练的效果更好。)

Faster R-CNN

与Fast-RCNN的区别就是将提取proposals阶段也合并进CNN阶段进行实现了,完全实现了端对端的CNN对象检测模型。

论文提出:网络中的各个卷积层特征(feature map)也可以用来预测类别相关的region proposal(不需要事先执行诸如selective search之类的算法),但是如果简单的在前面增加一个专门提取proposal的网络又显得不够优雅,所以最终把region proposal提取和Fast-RCNN部分融合进了一个网络模型 (区域生成网络 RPN层),虽然训练阶段仍然要分多步,但是检测阶段非常方便快捷,准确率也与原来的Fast-RCNN相差不多,从此,再也不用担心region proposal提取耗时比实际对象检测还多这种尴尬场景了。(faster RCNN可以大致看做“区域生成网络+fast RCNN“的系统,用区域生成网络代替fast RCNN中的Selective Search方法)

以下主要介绍一下区域生成网络RPN:

作者论文中RPN的实现是:在基础网络conv5-3的卷积特征图上用一个3*3的滑窗生成一个256维度(对应ZF网络)的全连接特征。之后在这个特征后产生两个分支的全连接层,一个用于预测proposal的中心锚点对应的坐标xy和宽高wh,一个用于判定proposal是目标还是背景。个人在学习的过程中,觉得此处,阅读论文原文能够有比较清晰的理解。
因为SSD在这方面有借鉴经验,大部分打算在SSD部分讲述。

剩下的就以后再更,最近做人脸检测。

你可能感兴趣的:(深度学习基础,R-CNN,目标检测,CNN)