深度学习CNN用于目标检测的方法总结

来源:互联网 发布:早安网络用语 编辑:程序博客网 时间:2024/04/30 13:07

近一两年cnn在检测这块的发展突飞猛进,下面详细review下整个cnn检测领域模型的发展,以及在时间性能上的发展。

一、RCNN

流程:

Extract region(off model) + extract features(on model) + classifyregions according feature (svm or softmax)

性能:


精度:

 

二、SPP-NET

流程:

先做conv,再根据window提取特征。为什么rcnn不能也这么做呢?原因在于spp对不同尺度进行了max pool处理能更好的满足不同尺度window的特征表达。

性能:

核心思想在全图只做一次conv,这个和overfeat的思想一致

 

精度:

三、FAST-RCNN

流程:

引入了ROI层pooling,以及multi-task同时训练分类和检测框。

性能:

Compared to SPPnet, Fast R-CNN trains VGG163× faster, tests 10× faster, and is more accurate.

另外还额外提出了fc层SVD的思想


Vgg时间性能分析

 

精度:

The improvement of Fast R-CNN over SPPnetillustrates that even though Fast R-CNN uses single-scale training and testing,fine-tuning the conv layers provides a large improvement in mAP (from 63.1% to66.9%). Traditional R-CNN achieves a mAP of 66.0%. These results arepragmatically valuable given how much faster and easier Fast R-CNN is to trainand test, which we discuss next.

 

 

 

 

四、FASTER-RCNN

流程:

在fast-rcnn的基础上,借鉴了FCN的思路,将proposal阶段转化成一个layer加进了网络一起学习。


性能:

cost-free for proposal

精度:

our detection system has a frame rate of5fps (including all steps) on a GPU, while achieving state-of-the-art objectdetection accuracy on PASCAL VOC 2007 (73.2% mAP) and 2012 (70.4% mAP) using300 proposals per image


   RCNN

                                         RCNN的原理图

 该文是由UC-Berkeley(加利福尼亚大学伯克利分校)发表的。说明下RCNN的意思。CNN也就是众多周知的convolutional neural network, Rregion的缩写,意为对图像进行局部区域的处理。 该文的主要亮点在于:,一是利用的region proposals对物体探测中位置信息的精确处理,二是利用监督式预训练和主域特殊化的微调方法,代替了传统的非监督式预训练和监督式微调,使得MAPmean average precision )得到大幅提升。现在来介绍原理图的具体实现。

  由于在深度CNN中,FC(full-connected)层的输入是需要定的size的,所以对输入图像的大小需要做预处理以满足这一要求。本文中采取的是wrap方案。生成类别独立的region proposals 有许多可选方法,该文采取了selective search方案。在image中取出大约有2000个region proposals, 他们的维数都是4096维。之前提到的wrap接着对region proposals进行固定size的处理。接着通过CNN进行特征提取,然后再用这些特征训练SVM分类/预测器。在原理图实现中需要注意有以下几点:

1) selective search提取region proposals时,由于它对scale是敏感的,所以选取出来的region proposals的个数就会发生变化,为了使得region proposals的个数一定,在selective search之前还需要进行resize的处理。

2) 原始图像进行wrap处理时,固定大小的选择,一般是227*227;

3) 由于训练集庞大,分类器优化开销很大,该文采用了标准的hard negative mining method方法提高了存储利用率;

4)分类器采用的是非线性核的SV;

5)为了强化定位,引入Bounding-Box;

该文算是诸多文章优势的集成体现。它达到的MAP也再次刷新了记录:在PASCAL VOC 2010上,其MAP达到了53.7%;在ILSVRC2013 detection dataset达到了31.4%

但一如文章中提到的,该方法的主要缺陷在于计算的时间成本很大,根本达不到real-time的要求。原因也在于region proposals处理中所固有的缺陷:CNN需要对每个region proposals进行单独的特征提取,这是十分耗时的。同时在进入CNN之前的wrap处理也是存在问题的,这种预处理会使得图像失真,部分信息丢失。

 于是MSRA(微软亚洲研究院)的何凯明等人提出了SPP-net

SPP-net

还是先贴上图。首先需要声明的是这篇paper仍有些地方没搞明白(上边的RCNN虽然算是吧啦完了,但难免存在理解偏差,望大牛们多多指教。)

 首先,我们看看截图二,很清楚的看到该文将crop/wrap这一预处理方法去掉了,同时在卷积层后加上了SPP。那我们就从这里开始谈起。

Crop/wrap,顾名思义就是对图像进行分割和变形。这两种方法都存在着丢失或者扭曲原始图像信息的缺陷。这样CNN获取的特征也就受到了限制,从而导致后续分类/预测的泛化能力不够。需要略作解释的是crop/wrap处理的充分性是由于FC层固有特性决定的,即FC层的输入必须固定大小。该文亮点在于,将这一固定大小的处理放在特征提取之后。这样原始图像得到保护,特征提取更加的充分,然后再利用该文中提出的SPP代替最后一个卷积层的max-pooling层,完成大小固定的处理。该文主要亮点如下:

1) 对输入图像尺度无限制,同时输出的是定长特征,但运用滑动窗口的pooling技术就不能;

2) SPP可运用不同大小的pooling窗口,但CNN只能是单一的窗口;

3)SPP可以从尺度变化中提取特征;

4) 大大提高了图像处理速度,24-102*faster than the R-CNN method;

接下来就来看看SPP到底是什么。上边已经谈到,SPP是代替了传统CNN中的pool5层,所以它也是一种pooling方法。同时,传统CNN中pooling层的滑动窗口是一定的,但在SPP中可以看到,它的pooling层是分层的,正如SPP自身的含义——金字塔式池化一样,它每层pooling  bins的大小是可变的,它的大小是个输入图像的大小成比例的;同时pooling bins的个数是确定的,这就相当于多尺度的pooling,相较于传统CNN中单尺度的pooling,肯定存在更多的优势。

SPP-net在物体探测中的效果也非常好。在RCNN中是对上千个region proposals分别进行CNN特征提取,而在SPP-net中则是对原始图像进行CNN特征提取,然后再对region 所对应的window利用SPP。这里需要理解的是,对图像的分割操作仍然是需要的,只是SPP中并不是立即对每个region直接特征抽取,而是将“对每个region的操作”放在了SPP这一过程中,即RCNN是多个regions+多次CNN+单个pooling,而SPP则是单个图像+单次CNN+多个region+多个pooling。

尽管如此,SPP-net仍存在缺陷:一是SPP-net虽然极大的提高了RCNN的速度,但和RCNN一样,他们的训练过程都是一个多阶段过程:即包含着特征抽取,网络微调,分类器SVM的训练以及最后的对BB回归器的匹配。二是SPP-net中用到的微调技术只能更新FC层,这无疑限制了深度CNN的潜力。

Fast-RCNN

在此基础上,MSRA又提出了Fast-RCNN。相较与RCNN和SPP-net,它的亮点在于:

1)MAP相较于RCNN也有很大的提高;

2)训练过程通过运用多任务损失,实现单步骤完成;

3)在训练过程中所有层都可以得到更新;

4)不再需要磁盘存储器作为特征缓存;

5) 比RCNN的训练时间快9倍,测试时间快213倍,在 PASCAL VOC 2012上获得MAP也更高.。和SPPnet相比,训练时间快3倍,测试时间快10倍,MAP也有提升。

从下图可以看到如下变化:一是输入从单输入变为双输入;二是引入ROI pooling层(region of interest,它是只含一层的SPP);三是在FC层后有两个输入。接下看看这些变化的具体实现和影响。

 
 上述的变化都是在训练过程做的改变,在微调阶段曾谈及SPP-net只能更新FC层,这是因为卷积特征是线下计算的,从而无法再微调阶段反向传播误差。而在fast-RCNN中则是通过image-centric sampling提高了卷积层特征抽取的速度,从而保证了梯度可以通过SPP层(即ROI pooling层)反向传播。
      上述的变化都是在训练过程做的改变,在微调阶段曾谈及SPP-net只能更新FC层,这是因为卷积特征是线下计算的,从而无法再微调阶段反向传播误差。而在fast-RCNN中则是通过image-centric sampling提高了卷积层特征抽取的速度,从而保证了梯度可以通过SPP层(即ROI pooling层)反向传播。

输入除了batch大小为N的图像外,还有R大小的ROI序列。这种多任务训练机制避免了对顺序训练任务的pipeline的管理,同时也对MAP的提高起到了一定的作用。输出也因为变成两个输出而存在着两个loss function。一个输出对k个物体类别的可能性的softmax型预测,一个输出针对每个类的四位实数。

该文在随后还探讨了SVM和softmax两类分类器在VOC07上MAP的大小,发现softmax表现更为突出;同时发现region proposals并不是越多越好,这些都可作为一些trick指导自己的工作。

RCNNSPP-net,再到Fast-RCNN,在MAP不断得到提升的同时,速度也不断的提升,但我们也注意到在proposals的计算中仍然存在的计算瓶颈,而最近MSRA提出的Faster-RCNN正是这一问题的解决方案。由于这篇文章才出来不久,还没来得及读,暂时写到这里。 

PS:文章完全来自个人理解,肯定很多漏洞或者理解过于表面的问题,此文后续会不断更新,以求更全面更简单的诠释。

参考文献:

[1] R. Girshick, J. Donahue, T. Darrell, and J. Malik, “Rich feature hierarchies for accurate object detection and semantic segmentation,”in CVPR, 2014

[2] K. He, X. Zhang, S. Ren, and J. Sun. Spatial pyramid pooling in deep convolutional networks for visual recognition. In ECCV, 2014.

[3] R. Girshick. Fast R-CNN. arXiv:1504.08083, 2015.

[4] Shaoqing Ren Kaiming He Ross Girshick Jian Sun. Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks.arXiv:1506.01497,2015

http://blog.sina.com.cn/s/blog_9ae57c020102vopp.html

http://blog.csdn.net/sunbaigui/article/details/47728251


0 0
原创粉丝点击