RCNN学习笔记

来源:互联网 发布:淘宝上没有燕尾型材了 编辑:程序博客网 时间:2024/05/17 20:33

National Engineering Laboratory for Video Technology, Peking University , Zongxian Lee
寒假偷懒了,基本没干活,开学第一天,重温RBG大神的大作。打铁还需自身硬,最近准备花两周的时间把RCNN, Fast-RCNN, SPP-Net, Faster-RCNN, YOLO通读一遍,再去读CVPR2016上清华大学孔涛师兄的大作:HyperNet和NIPS2016上发布的PVANET….这个学期任重而道远啊~

一、目标检测及深度学习在目标检测上的应用

目标检测对于人类来说是非常简单的任务,但对于计算机来说,需要从一张矩阵图(0~255的数值组合)中得到具有某种高级语义概念的目标及其位置信息,是非常有难度的。从2010年起,目标检测任务一直处在瓶颈期。传统最佳性能的方法是将多个低级的图像特征与高级的上下文语义特征进行组合,构成极为复杂的综合系统。

2010~2012年,PASCAL VOC竞赛成绩进展缓慢,DPM的方法进入瓶颈期,使用复杂特征和结构表示的方法对于检测效果的提升非常有限。但从2012年起,以卷积神经网络(Convolutional Neural Networks, CNN)为基础的深度学习技术,在物体分类和识别领域取得了跨时代的进展。与物体识别和图像分类问题不同,物体检测任务要求在图中精确定位物体位置。得益于深度学习的兴起和候选区域生成算法(Region Proposal),2014年的CVPR上,RBG大神第一次将深度学习的方法应用在了物体检测上,并在VOC数据集上的测试成绩取得了相当大的提升。

二、RCNN结构及训练、测试过程

1. RCNN 框架

RCNN大致采用了Region Proposal + CNN + SVM的结构。Region Proposal部分用于生成候选区域(训练、测试过程中都要使用),供后续CNN网络进行特征提取。
这里写图片描述

2. 训练、测试过程

因为VOC数据集中标记的数据较少,可用的数据量不足以训练一个Large CNN,通常使用的方法是使用无监督pre-training 的方法,但作者在文中使用的是有监督的pre-training, 在ILSVRC上进行有监督的pre-training。

前期通过Region Proposal的方法生成了很多的候选区域,在训练CNN的时候需要对生成的区域进行正反例的划分。如果一个区域里包含了目标物体,那么这个region毫无疑问是positive,如果一个区域中没有任何目标物体,很明显这是一个negative,但是如果一个区域中包含了目标的一部分,又该如何鉴别?作者通过计算区域与目标真实bounding box的IoU, 阈值设定为0.5,大于0.5的region设置为positive,反之为negative。
在pre-training得到的模型上,使用VOC的数据进行fine-tuning。作者对于系统的高效性,在文中指出了两点:
1) 全部的网络参数在每个类别中是共享的;
2) 与其他方法相比,RCNN最后得到的feature vector的维度是较低的。
CNN在这里是训练用来提取目标的特征,作者最后采用了SVM 的方法,对CNN提取得到的特征进行classify,至于为什么不直接使用CNN的最后一个全连接层而是使用SVM的方法,作者在论文的补充材料里好像是说到了,不过我没去细看。在训练SVM的时候,作者对于每一类的目标都训练了一个SVM,也就是使用了一个Binary SVM,在这里使用的IoU阈值是0.3,至于为什么是0.3,作者是进行了一组实验,从0~0.5,分别测试,发现当使用0.3的时候性能最佳。
在网络的测试阶段,使用selective search算法随机生成2000个左右的region proposal,并对于进行wrap,对每个wrap后的proposal,使用fine-tuning好的CNN提取固定长度的特征向量,然后再使用SVM 对特征向量进行分类,最后再使用非极大值抑制的方法和bounding box回归的方法对目标在图像中的位置进行精修。边框回归是对候选区域进行纠正的线性回归算法,使得region proposal提取到的窗口与真实窗口更加吻合。

三、逐层分析

为了找出哪一层对最后结果的影响最大,文中对最后几层(pool5, fc6, fc7)进行了逐层分析并对比。

(1)Without Fine-tuning

在只进行了pre-training的情况下,直接将CNN作为一个feature extractor来使用,使用pool5输出作为最终特征对最后结果的影响与使用fc6或者fc7的效果相差无几,令人惊讶的是,使用fc6的结果作为最终特征的最终效果比使用fc7要好,看来卷积神经网络强大之处还是在于其卷积层。

(2) With Fine-tuning

当经过pre-training的模型在VOC数据集上进行fine-tuning过后,最终性能增长很明显。而且经过实验证明,在进行fine-tunining后,使用fc6、fc7的输出作为最终特征对于最后性能的提升效果远远强于使用pool5,由此看来,从卷积层和采样层学习的到的特征相对来说更具有一般性,大多数的性能提升是在卷积、采样层之上,再学习特定类别的非线性分类器。

四、总结

RCNN 在PASCAL VOC2007上的检测结果从DPM方法的34.3%直接提升至66%。如此大的提升让我们看到了region proposal + cnn的巨大优势。但RCNN 框架依旧存在很多问题:
1)训练分为多个步骤,步骤繁琐;(pre training; fine tuning; SVM; bounding box)
2)需要对每个候选区域进行特征提取,产生了巨大的特征文件缓存;
3)速度慢,在使用GPU的情况下,使用VGG16的模型处理一幅图像需要47s。

[1]Girshick R, Donahue J, Darrell T, et al. Rich Feature Hierarchies for Accurate Object Detection and Semantic Segmentation[C]// Computer Vision and Pattern Recognition. IEEE, 2013:580-587.
[2]Felzenszwalb P F, Girshick R B, McAllester D, et al. Object detection with discriminatively trained part-based models[J]. IEEE transactions on pattern analysis and machine intelligence, 2010, 32(9): 1627-1645.
[3]Uijlings J R R, Van De Sande K E A, Gevers T, et al. Selective search for object recognition[J]. International journal of computer vision, 2013, 104(2): 154-171.

1 0
原创粉丝点击