【目标检测】RCNN

前言


传统的目标检测方法主要是三个步骤:区域选择(暴力滑窗)、特征提取(SIFT尺度不变特征变换,HOG方向梯度直方图等)、分类器(SVM、Adaboost等)三个部分。代表算法:多尺度形变部件模型DPM(将物体看成多个部件组成,一个物体不同部件之间存在天然的拓扑结构关系,比如人头部总是在躯干上面,将不同的位置关系对目标物体的贡献看成一个权重,最后由权重求和确定是否是检测的目标)。缺陷:暴力滑窗冗余框太多,时间复杂度太高;手工设计的特征对于多样性变化没有很好的鲁棒性。自深度学习出现之后,目标检测取得了巨大的突破,最瞩目的两个方向有:1、Two stage:以RCNN为代表的基于Region Proposal的深度学习目标检测算法(RCNN,SPP-NET,Fast-RCNN,Faster-RCNN等);2、One stage:以YOLO为代表的基于回归方法的深度学习目标检测算法(YOLO,SSD等)


RCNN


Rich feature hierarchies for accurate object detection and semantic segmentation (2014 CVPR)

作者:Ross Girshick (RBG)

流程图:



特点


1、RCNN是利用深度学习进行目标检测的开山之作,首次将CNN运用到目标检测问题上。

2、用选择搜索(Selective Search)替代暴力滑框。选择搜索选出2000个候选框,用CNN等识别技术进行分类。

3、使用识别库进行预训练,而后用检测库调优参数。

4、使用SVM代替了CNN网络中最后的Softmax,同时用CNN输出的4096维向量进行Bounding Box回归。

5、流程前两个步骤(候选区域提取+特征提取)与待检测类别无关,可以在不同类之间共用;同时检测多类时,需要倍增的只有后两步骤(判别+精修),都是简单的线性运算,速度很快。


算法流程


本文数据集采用pascal VOC,这个数据集的object一共有20个类别。首先用select search方法在每张图像上选取约2000个region proposal,region proposal就是object有可能出现的位置。然后根据这些region proposal构造训练和测试样本,注意这些region proposal的大小不一,另外样本的类别是21个(包括了背景)。然后是预训练,即在ImageNet数据集下,用AlexNet进行训练。然后再在我们的数据集上fine-tuning,网络结构不变(除了最后一层输出由1000改为21),输入是前面的region proposal进行尺寸变换到一个统一尺寸227*227,保留f7的输出特征2000*4096维。针对每个类别(一共20类)训练一个SVM分类器,以f7层的输出作为输入,训练SVM的权重4096*20维,所以测试时候会得到2000*20的得分输出,且测试的时候会对这个得分输出做NMS(non-maximun suppression),简单讲就是去掉重复框的过程。同时针对每个类别(一共20类)训练一个回归器,输入是pool5的特征和每个样本对的坐标即长宽。


缺点


1、候选框选取耗时,会漏掉一些框

2、传入CNN前的归一化227*227产生的形变会导致信息丢失

3、候选框重叠较多,每个候选框都会输入进一个CNN进行特征提取,会造成重复计算

4、训练分成多个阶段,不利于全局最优

5、训练耗时,用GPUVGG16处理一张图片要花47s

6、卷积出来的特征数据要单独保存,占空间大(5000张图片生成的特征文件有几百G


损失函数


SVMbounding-box回归损失,softmax损失,三个损失函数


代码实现


待更...





猜你喜欢

转载自blog.csdn.net/cheneykl/article/details/80545399