CNN应用之基于R-CNN的物体检测-CVPR 2014-未完待续

转载自:

深度学习(十八)CNN应用之基于R-CNN的物体检测-CVPR 2014-未完待续 - hjimce的专栏 - 博客频道 - CSDN.NET

http://blog.csdn.net/hjimce/article/details/50187029


基于R-CNN的物体检测

原文地址:http://blog.csdn.net/hjimce/article/details/50187029

作者:hjimce

一、相关理论

    本篇博文主要讲解2014年CVPR上的经典paper:《Rich feature hierarchies for Accurate Object Detection and Segmentation》,这篇文章的算法思想又被称之为:R-CNN(Regions with Convolutional Neural Network Features),是物体检测领域曾经获得state-of-art精度的经典文献,2013年ILSVRC2013的冠军,一口气把原来的物体检测的精度从40%提高到了53%,引用率非常高。所以如果你搞物体检测方面,肯定会接触到这个算法。

   这篇paper的思想,改变了物体检测的总思路,现在好多文献关于深度学习的物体检测的算法,基本上都是继承了这个思想,比如:《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》,所以学习经典算法,有助于我们以后搞物体检测的其它paper。

    之前刚开始接触物体检测算法的时候,老是分不清deep learning中,物体检测和图片分类算法上的区别,弄得我头好晕,终于在这篇paper上,看到了解释。物体检测和图片分类的区别:图片分类不需要定位,而物体检测需要定位出物体的位置,也就是相当于把物体的bbox检测出来。图片分类标注好的训练数据非常多,但是物体检测的标注数据却很少,如何用少量的标注数据,训练高质量的模型,这就是文献最大的创新点,这篇paper采用迁移学习的思想,对CNN模型进行参数初始化,精度飙涨,具体后面在讲,让大家先知道这篇paper最值得我们学的思想就是无监督预训练,这也是我我觉得最早利用无监督学习方法应用于CNN中,之前虽然有看到一些图片的无监督训练(反卷积算法),但是感觉好像不顶用,引用的人也非常少。

二、算法实现

开始讲解算法前,我们需要算法的总体思路,把握总体思路,才容易理解paper的算法。

1、算法总体思路 

  图片分类与物体检测不同,物体检测需要定位出物体的位置,这种就相当于回归问题,求解一个包含物体的方框。而图片分类其实是逻辑回归。这种方法对于单物体检测还不错,但是对于多物体检测就……因此paper采用的方法是:

首先输入一张图片,我们先定位出2000个物体候选框,然后采用CNN提取每个候选框中图片的特征向量,特征向量的维度为4096维,接着采用svm算法对各个候选框中的物体进行分类识别。也就是总个过程分为三个程序:a、找出候选框。b、利用CNN提取特征向量 c、利用SVM进行特征向量分类。具体的流程如下图片所示:


2、算法实现细节

(1)候选框搜索

让我们输入一张图片时,我们要搜索出所有是物体的区域,这个采用的方法是传统文献的算法:《search for object recognition》,这个我们搜索出2000个候选框。然后我们从上面的总流程图中可以看到,我们搜出的候选框,是矩形的,而且是大小各不相同。但是我们知道CNN对输入图片的大小是有固定的,如果把搜索到的矩形选框不做处理,就扔进CNN中,肯定不行。因此对于每个输入的候选框都需要缩放到固定的大小,当然paper的缩放很简单,就是不管图片的长宽比例,管它是否扭曲,进行缩放就是了,全部缩放到CNN输入的大小227*227。(这个时候其实我们可以想到,一张矩形图片,如果强制把它缩放到227*227的正方形图片,肯定会发生扭曲,就像上面总流程图中的图3,这个方法可定会识别精度,所以在后来的另外一篇paper中:《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》才改进了这个输入图片的扭曲问题,在这篇博文中,我们暂且不考虑图片是否发生扭曲)

(2)CNN特征提取

a、网络设计

CNN的网络结构方面与Alexnet网络相同(除了最后一层的softmax层之外),图片输入的大小是227*227,如果还不知道Alexnet的,还是先好好学习经典paper《ImageNet Classification with Deep Convolutional》,这是入门必学的文章。Alexnet特征提取部分包含了5个卷积层、2个全连接层。通过这个网络,我们每个输入候选框图片都能得到一个4096维的特征向量。

b、网络训练

物体检测的一个难点在于,物体标签训练数据少,如果要直接采用随机初始化CNN参数的方法,那么目前的训练数据量是远远不够的。这种情况下,最好的是采用无监督学习的方法进行预训练,然后在进行有监督的参数微调。这个应该是深度学习的灵魂了,之前看过DBM,稀疏自编码、RBM等,听过这种思路,但是在CNN里面怎么用,却一直不知道,这下子我又学了一招。我觉得这篇paper,最值得我们学的地方就是提出采用无监督训练参数初始化的方法,最后在进行有监督微调。所以上面paper在设计网络结构的时候,是直接用Alexnet的网络,然后连参数也是直接采用它的参数,作为初始的参数值。

然而我们知道CNN可以用于提取特征,我们可以利用AlexNet的前面几层,训练好的模型,进行特征提取。


未完待续,敬请期待……



SVM分类的权值矩阵为4096*NN为分类的个数,4096便是我们通过CNN提取到的特征向量



你可能感兴趣的:(CNN)