R-CNN详细解析


本文是对rcnn文章进行解析,不足之处见谅,或按照章节进行解析

2.R-CNN物体检测

            模型主要分为三个模块:

               1/产生region proposals(兴趣区域模块)模块,这些模块就是检测到物体的候选集合;

              2/大量的卷积神经网络层,对每一个候选region proposals进行提取固定特征向量;

               3/利用特征向量输入到svm进行类别分类;

          文章会对每一个模跨进行解析,并且实验参数也会介绍

    具体三个步骤如图所示:


提取roi时在原始图像中进行。并且对每一个roi进行卷机操作。

          2.1Region proposals

             文章介绍许多产生独立rsgion proposals类别候选集合的方法 objectness   selective search

     category-independent object proposals [12], constrained parametric min-cuts (CPMC) [5], multi-scale combinatorial

     grouping [3], and Cires ̧an et al. [6],  为了解决rcnn对实际regsion proposal不可知性,采用了select search方法。

      2.2 features extraction

     对于特征提取,作者利用了Krizhevsky etal. [23].利用caffe实现的5层cnn和2

层全连接层得到一个4096维度的向量,更多细节网络结构在【22,23】。具体需要注意的是,为了提取图像的特征,必须把图像数据转化为能够兼容cnn网络的输入大小(cnn的结构需要固定大小227*227),不管候选region的大小和长宽比例,把所有像素放入一个固定大小的box中,在扭曲图像之前扩展bounding box 以便于有p个像素是原始图像像素。(具体不太理解,将会通过原始代码对此过程进行解析)。图2是扭曲之后的图像效果/:

 

从图像的像素可以看出,图像有所损失,因为i把不同大小的图形转换为大小一致的图像

检测

     文章通过2000个建议proposals,然后warp(扭曲)图像之后输入cnn,然后利用svm对每一个类别进行评分,利用非最大抑制方法去除IOU比学习阀值大的region。(非最大抑制算法消除多余(交叉重复)的窗口,找到最佳物体检测位置。)

      运行时间

    由两个会对运行时间进行减少,1/对于所有类别共享cnn的参数(由于每一个类别都使用最后的卷积特征进行svm二分类),2/由cnn计算的特征是低维的于其他方法比较,例如金字塔用词袋模型(https://blog.csdn.net/xuzhongxiong/article/details/52689048,这个博客讲解的词袋视觉模型非常不错),在UVA检测系统运用的特征,用到的特征时我们的两个数量级别。

    这种共享的结果是计算region proposal的时间花费均摊到每一个类别计算上,对于一个指定的类别计算是特征与svm参数之间,以及非最大抑制之间的点积计算。一张图像所有的点积转化为矩阵与矩阵的乘积,特征矩阵典型的2000*4096,svm为4096*N,N为对应的类别。(具体将通过代码解析对不懂得进行解释)。

      这个分析显示rcnn可以扩展为上千个分类而不需要近似的技术,例如hashing,即是100000个类别,结果矩阵的产生在最小核的情况下共花费10秒;这种效率不仅仅是使用区域建议和共享特性的结果。与dean的可伸缩性检测比较DPMS和hashing比较,当比较的是10000检测类别时,每一张图片花费5分钟,mpa%16,我们的在cpu请路况下,仅用了一分钟,并且map59%。

2.3 训练

         监督预训练。文章用大量的辅助训练数据集ILSVRC2012数据集与训练模型。,为了使模型适应新的任务以及新域,仅仅用warped来自于VOC的区域建议通过随机梯度训练模型。对于特定领域,除了最后指定的1000个类别替换成21个类别层(有20个加上背景类别),结构没有发生变化,对于建议区域的IOU>0.5的作为正样例,其他为负。开始的学习率为0.001使得能够微调的同时不破坏初始化参数。在一次sgd,均匀采样32个正样例和96个负样例,由于正样例较少,所以偏向正样例。

      对象分类问题,考虑到训练的分类器时二分类问题,如果是一个汽车那么就是正样例,更重要的问题时怎么判断一个重叠区域的一辆汽车,覆盖阀值是通过,0.3,在一个验证数据集上进行网格搜索{0,0.1,0,...,0.5}进行不同方法验证得到的阀值,这个阀值的设定比较重要,设置为0.5,mAP降低5个点,设置为0,mAP降低4个点,对于每一个类别正样例被定义为真正bounding box。

        一旦特征被提取,可以最优化线形svm分类器,再补充资料里,作者讲解了正例与负例对于svm训练的区别对待,也揭示了为什么用svm分类(训练检测分类器)而不是简单的用第8层全连接的输出。

对于以上方法,fast-rcnn总结了以下缺点:

       1/训练分多个步骤:

    rcnn首先用log损失训练物体位置;然后用特征训练二分类svm,然后对回归做学习训练;步骤比较分散,会导致误差传播。

   2/训练运用空间以及时间较多,

   3/物体检测较慢

接下来将会讲解fast-rcnn,以及sppnet方法对此方法的改进

以上时整个论文的思想,将会继续对文章的github代码进行分析解释。

        

猜你喜欢

转载自blog.csdn.net/chenmingwei000/article/details/79923098