热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

目标检测从入门到精通—R-CNN详细解析(二)

R-CNN目标检测详细解析《RichfeaturehierarchiesforAccurateObjectDetectionandSegmentation》Author:Mr.

R-CNN目标检测详细解析

《Rich feature hierarchies for Accurate Object Detection and Segmentation》

Author:Mr. Sun

Date:2019.03.18

Loacation: DaLian university of technology

摘要:

  这篇论文是深度学习进行物体检测的鼻祖级论文,Regions with CNN features(R-CNN)也可以说是利用深度学习进行目标检测的开山之作。 R-CNN是将CNN方法应用到目标检测上的一个里程碑,由年轻有为的RBG大神提出,借助CNN良好的特征提取和分类性能,通过Region Proposals方法实现目标检测问题的转化。 

 

1、研究思路剖析—站在巨人的肩膀上

  在过去的十多年时间里,传统的机器视觉领域,通常采用特征描述算子来应对目标识别任务,这些特征描述算子最常见的就是 SIFT 和 HOG,而 OpenCV 有现成的 API 可供大家实现相关的操作。但是最近SIFT 和 HOG 的王者地位被卷积神经网络撼动。

  2012 年 Krizhevsky 等人在 ImageNet 举办的 ILSVRC 目标识别挑战大赛中一战成名,豪夺当年的第一名,Top5 错误率 15%,而他们团队提出来的网络结构以他们的导师名字命名,它就是 AlexNet,该结构有 5 层卷积层,2 层全连接层。详细结构如图1所示。

 

图1:AlexNet-8网络结构

  因为 AlexNet 的出现,世人的目光重回神经网络领域,以此为契机,不断涌出各种各样的网络比如 VGG、GoogleNet、ResNet 等等。受 AlexNet 启发,论文作者尝试将 AlexNet 在 ImageNet 目标识别的能力泛化到 PASCAL VOC 目标检测上面来。但一切开始之前,需要解决两个主要的问题。

  (1)如何利用深度的神经网络去做目标的定位?

    借鉴了滑动窗口思想,R-CNN 采用对区域进行识别的方案。具体是:

      (a)给定一张输入图片,从图片中提取 2000 个独立的候选区域。

      (b)对于每个区域利用 CNN 抽取一个固定长度的特征向量。

      (c)再对每个区域利用 SVM 进行目标分类。

  (2)如何在一个小规模的数据集上训练能力强劲的网络模型?

    采用在 ImageNet 上已经训练好的模型,然后在 PASCAL VOC 数据集上进行 fine-tune。因为 ImageNet 的图像高达几百万张,利用卷积神经网络充分学习浅层的特征,然后在小规模数据集做微训练调优,从而可以达到好的效果。现在,我们称之为迁移学习,是必不可少的一种技能。

 

2、R-CNN模型结构与训练过程详解

2.1 R-CNN结构分析

R-CNN的分类器结构如下图2所示

 

图2:R-CNN模型结构

R-CNN算法一共分为四个步骤:

(1)候选区域选择(Region Proposal)

  能够生成候选区域的方法很多,比如:objectness、selective search、category-independen object proposals、constrained parametric min-cuts(CPMC)、multi-scale combinatorial grouping、Ciresan等等。

  Region Proposal就是为了获得候选框的方法,本文作者不具体研究 Region Proposal 的方法而是采用的是 Selective Search,一般Candidate选项为2000个即可,这里不再详述; 根据Proposal提取的目标图像变形为固定尺寸(227*227)然后去均值,作为CNN的标准输入

(2)CNN特征提取(Feature Extraction )

  标准CNN过程,根据输入进行卷积/池化等操作,得到固定维度的输出。本文在训练SVM分类器时用的是FC7的特征输出作为SVM的训练输入,在训练Bounding-box回归时使用的是conv5之后的pool5(6*6*256)的特征作为输入的。

(3)分类(Classification)

  对上一步的输出向量进行分类(需要根据输出特征训练分类器),本文使用的是线性的SVM二分类分类器,每一个分类器都需要单独训练。

(4)边界回归(Bounding-box Regression)

  通过边界回归(bounding-box regression) 得到精确的目标区域,由于实际目标会产生多个子区域,旨在对完成分类的前景目标进行精确的定位与合并,避免多个检出。

 

 R-CNN的整体结构如下图3所示:

 

图3:R_CNN整体结构

2.2 R-CNN训练过程分析

 步骤一:有监督分类器预训练 

  ILSVRC样本集上仅有图像类别标签,没有图像物体位置标注;而PASCAL VOC 2007样本集上既有图像中物体类别标签,也有图像中物体位置标签;但是PASCAL VOC训练样本太少不足以去训练一个大型的神经网络, 因此作者以ILSVRC2012分类数据集(没有约束框数据)作为辅助预训练了CNN。预训练采用了Caffe的CNN库。总体来说,使用的CNN十分接近krizhevsky等人的网络的性能,在ILSVRC2012分类验证集在top-1错误率上比他们高2.2%。差异主要来自于训练过程的简化。
  作者采用AlexNet CNN网络进行有监督训练,学习率=0.01;该网络的输入为227×227的ILSVRC训练集图像,输出最后一层为4096维特征->1000类的映射,训练的是网络参数。然后传入下一步进行迁移学习,也就是特定样本下的 fine-tune ,获得适合该样本下的最优模型。AlexNet网络结构如下图4所示。

 

图4:AlexNet网络结构

步骤二:特定样本下的分类器微调(fine-tune)

  坦率的说,这一步就是我们经常说的迁移学习(Transfer Learning)。加载步骤一中训练好的模型,使用该模型中特征提取的参数来初始化我们这里的CNN的参数。我们将AlexNet的FC7之后的1000-way(ImageNet类别数)换成21-way(PASCAL VOC类别数 + 背景),然后进行softmax回归。这里使用通过SS(Selective Search)算法对图像处理获得2000个左右的候选区域(Region Proposal),然后将候选区域和真实标注区域(Ground Truth)的 IOU>0.5时作为正样本,否则作为负样本进行训练。需要注意的是对于每一个随机梯度(SGD)迭代,我们使用一个mini_batch=128的小批次,其中使用32个当前类的样本(正样本)和96个背景样本作为负样本。这一步的目的就是让模型去学习特定的样本,通过作者的实验发现这一步骤还是很有必要的。作者得出结论是:不针对特定任务进行微调,而将CNN当成特征提取器,pool5层得到的特征是基础特征, 从fc6和fc7等全连接层中所学习到的特征是针对特征任务特定样本的特征,类似于学习到了分类性别分类年龄的个性特征。

  这里的随机梯度处理的是一张图片的候选区域吗?这里的mini_batch=128小批次中的32个正样本和96和负样本均来自哪?这里的正样本中包含多少类别呢?

  这个疑问我一直没搞懂,先简单说一下我的理解:首先,PASCAL VOC数据集标签中应该是有标准矩形框的坐标和所属类别的。我个人觉得这里处理的确实是一张图片的2000个候选区域,然后通过和标准的Ground Truth计算IOU值选出很多正样本和负样本,然后在正样本中随机选出32张、在负样本中选出96张,将它们作为一个批次进行前向传播计算去fine-tune参数。反向传播结束之后,再换下一张图片进行下一轮的Region Proposal,一直到把这个分类模型训练好,训练结束后保存FC7层的特征(权重参数)。

步骤三:训练SVM分类器

  建立新的SVM的分类器模型,模型的FC7层之后修改为SVM分类器(多个线性二分类SVM)。将步骤二的模型的卷积层参数和FC6、FC7的参数加载到模型中,保持前7层参数不变,其它参数随机初始化,只是让分类器通过学习前面学习到的特征对物体进行分类。训练的样本仍然是来自一张图片的2000个Region Proposal,计算IOU之后筛选出来正负样本用于训练分类器

  针对每个类别训练一个SVM的二分类器。输入是FC7的特征,FC7的输出维度是2000*4096,输出的是是否属于该类别,训练结果是得到SVM的权重矩阵W,W的维度是4096*20。这里负样本的选定和前面的有所不同,将IOU的阈值从0.5改成0.3,即IOU<0.3的是负样本,IOU>0.7是正样本。IOU的阈值选择和前面fine-tuning不一样,主要是因为:前面fine-tuning需要大量的样本,所以设置成0.5会比较宽松。而在SVM阶段是由于SVM适用于小样本,所以设置0.3会更严格一点。

步骤四:边界框回归(Bounding-box Regression)

  使用conv5之后的pool5的特征6*6*256维(输入特征)和bounding box的ground truth(相当于要回归的值)来训练回归,每种类型的回归器单独训练。输入是pool5的特征,以及每个样本对的坐标和长宽值。另外只对那些跟ground truth的IOU超过某个阈值且IOU最大的Region Proposal回归,其余的region proposal不参与。详细说一下:对于某个region proposal:R,以及其对应的Ground truth:G,我们希望预测结果是:P,那么我们肯定希望P尽可能接近G。这里通过对pool5层的特征X做线性变换WX得到变换函数F(X),这些变换函数作用于R的坐标达到回归的作用(包括对x,y的平移以及对w,h的缩放)。因此损失函数可以表达为:R和G的差距减去P和G的差距要尽可能小。

R-CNN的训练具体流程:

  (1)准备region proposal对于训练集中的所有图像,采用selective search方式来获取,最后每个图像得到2000个region proposal。

准备正负样本。如果某个region proposal和当前图像上的所有ground truth(标记)重叠面积最大的那个的IOU大于等于0.5,则该region proposal作为这个ground truth类别的正样本,否则作为负样本。另外正样本还包括了Ground Truth。因为VOC一共包含20个类别,所以这里region proposal的类别为20+1=21类,1表示背景。简单说下IOU的概念,IOU是计算矩形框A、B的重合度的公式:IOU=(A∩B)/(A∪B),重合度越大,说明二者越相近。

  (2)预训练。这一步主要是因为检测问题中带标签的样本数据量比较少,难以进行大规模训练。采用的是Krizhevsky在2012年的著名网络AlexNet来学习特征,包含5个卷积层和2个全连接层,在Caffe框架下利用ILSVRC 2012的数据集进行预训练,其实就是利用大数据集训练一个分类器,这个ILSVRC 2012数据集就是著名的ImageNet比赛的数据集,也是彩色图像分类。

  (3)fine-tuning。将2中得到的样本进行尺寸变换,使得大小一致,这是由于2中得到的region proposal大小不一,所以需要将region proposal变形成227*227。本文中对所有不管什么样大小和横纵比的region proposal都直接拉伸到固定尺寸。然后作为3中预训练好的网络的输入,继续训练网络,继续训练其实就是迁移学习。另外由于ILSVRC 2012是一个1000类的数据集,而本文的数据集是21类(包括20个VOC类别和一个背景类别),迁移的时候要做修改,将最后一个全连接层的输出由1000改成21,其他结构不变。训练结束后保存f7的特征。

  (4)针对每个类别训练一个SVM的二分类器。输入是f7的特征,f7的输出维度是2000*4096,输出的是是否属于该类别,训练结果是得到SVM的权重矩阵W,W的维度是4096*20。这里负样本的选定和前面的有所不同,将IOU的阈值从0.5改成0.3,即IOU<0.3的是负样本,正样本是Ground Truth。IOU的阈值选择和前面fine-tuning不一样,主要是因为:前面fine-tuning需要大量的样本,所以设置成0.5会比较宽松。而在SVM阶段是由于SVM适用于小样本,所以设置0.3会更严格一点。

  (5)回归。用pool5的特征6*6*256维和bounding box的ground truth来训练回归,每种类型的回归器单独训练。输入是pool5的特征,以及每个样本对的坐标和长宽值。另外只对那些跟ground truth的IOU超过某个阈值且IOU最大的proposal回归,其余的region proposal不参与。详细说一下:对于某个region proposal:R,以及其对应的Ground truth:G,我们希望预测结果是:P,那么我们肯定希望P尽可能接近G。这里通过对pool5层的特征X做线性变换WX得到变换函数F(X),这些变换函数作用于R的坐标达到回归的作用(包括对x,y的平移以及对w,h的缩放)。因此损失函数可以表达为:R和G的差距减去P和G的差距要尽可能小。

 

3、R-CNN模型的测试过程分析

  (1)输入一张图像,利用Selective Search得到2000个Region Proposal。

  (2)对所有Region Proposal变换到固定尺寸(227*227),然后将所有建议框像素减去该建议框像素平均值后【预处理操作】,并作为已训练好的CNN网络的输入,得到f7层的4096维特征【比以前的人工经验特征低两个数量级】,所以f7层的输出是2000*4096。

  (3)对每个类别,采用已训练好的这个类别的svm分类器对提取到的特征打分(Feature Scores),所以SVM的Weight Matrix是4096*N,N是类别数,这里一共有20个SVM,N=20注意不是21。得分矩阵是2000*20,表示每个Region Proposal属于某一类的得分。

  (4)采用Non-Maximun Suppression(NMS)对得分矩阵中的每一列中的Region Proposal进行剔除,就是去掉重复率比较高的几个Region Proposal,得到该列中得分最高的几个Region Rroposal。NMS的意思是:举个例子,对于2000*20中的某一列得分,找到分数最高的一个Region Proposal,然后只要该列中其他Region Proposal和分数最高的IOU超过某一个阈值,则剔除该Region Proposal。这一轮剔除完后,再从剩下的Region Proposal找到分数最高的,然后计算别的Region Proposal和该分数最高的IOU是否超过阈值,超过的继续剔除,直到没有剩下Region Proposal。对每一列都这样操作,这样最终每一列(即每个类别)都可以得到一些rRegion Proposal。

  (5)用N=20个回归器对第4步得到的20个类别的region proposal进行回归,要用到pool5层的特征。pool5特征的权重W是在训练阶段的结果,测试的时候直接用。最后得到每个类别的修正后的Bounding-box。

 

4、R-CNN存在的明显问题(后续网络改进的点)

  (1)每张图像需要提前提取2000个候选区域(Region Proposal),占用较大的磁盘空间(Memory);

  (2)针对传统CNN需要固定尺寸(227*227)的输入图像,crop/warp(归一化)产生物体截断或拉伸,会导致输入CNN的信息丢失;

  (3)每一个Region Proposal都需要进入CNN网络计算,上千个Region存在大量的范围重叠,重复的特征提取带来巨大的计算浪费。

 

 
5、关于R-CNN的一些细节性问题

  1)速度问题

    经典的目标检测算法使用滑窗法依次判断所有可能的区域。本文采用选择性搜索(Selective Search)则预先提取一系列较可能是物体的候选区域,之后仅在这些候选区域上提取特征,进行判断。

  (2)训练集问题

    (a)经典的目标检测算法在区域中提取人工设定的特征(Haar,HOG)。本文则需要训练深度网络进行特征提取。可供使用的有两个数据库: 

    (b)一个较大的识别库(ImageNet ILSVC 2012):标定每张图片中物体的类别。一千万图像,1000类。 

    (c)一个较小的检测库(PASCAL VOC 2007):标定每张图片中,物体的类别和位置。一万图像,20类。
   本文使用识别库进行预训练,而后用检测库调优参数。最后在检测库上评测。

  (3)直接使用AlexNet做特征提取,省去fine-tune阶段可以吗?

    这个是可以的,你可以不重新训练CNN,直接采用Alexnet模型,提取出pool5、或者FC6、FC7的特征,作为特征向量,然后进行训练SVM,只不过这样精度会比较低。那么问题又来了,没有fine-tuning的时候,要选择哪一层的特征作为cnn提取到的特征呢?我们有可以选择pool5、FC6、FC7,这三层的神经元个数分别是9216、4096、4096。从pool5(6*6*256)到FC6这层的参数个数是:9216*4096 ,从f6到f7的参数是4096*4096。那么具体是选择p5、还是f6,又或者是f7呢?

    Paper给我们证明了一个结论,如果你不进行fine-tuning,也就是你直接把Alexnet模型当做特征提取器使用,类似于HOG、SIFT一样做特征提取,不针对特定的任务。然后把提取的特征用于分类,结果发现pool5的精度竟然跟FC6、FC7差不多,而且FC6提取到的特征还比FC7的精度略高;如果你进行fine-tuning了,那么FC7、FC6的提取到的特征最后训练出来的svm分类器的精度就会大幅提高。

    鉴于此让我们明白了一个道理,如果不针对特定任务进行fine-tuning,而是把CNN当做特征提取器,卷积层所学到的特征其实就是基础的共享特征提取层,就类似于SIFT提取特征一样,可以用于提取各种图片的基础特征,而FC6、FC7所学习到的特征是用于针对特定任务的特征(高级抽象特征)。打个比方:对于人脸性别识别来说,一个CNN模型前面的卷积层所学习到的特征就类似于学习人脸共性特征,然后全连接层所学习的特征就是针对特殊个体分类的特征了。

   (4)在fine-tune训练的时候最后一层本来就是softmax分类层,那么为什么(闲的蛋疼)作者要利用CNN做特征提取(提取FC7层数据),然后再把提取的特征用于训练SVM分类器呢?

     这个是因为SVM训练和CNN训练过程的正负样本定义方式各有不同,导致最后采用CNN softmax输出比采用SVM精度低。事情是这样的,CNN在训练的时候,对训练数据做了比较宽松的标注,比如一个Bounding-box可能只包含物体的一部分,那么我也把它标注为正样本,用于训练CNN;采用这个方法的主要原因在于因为CNN容易过拟合,所以需要大量的训练数据(不太理解,不是一样使用32个正样本,96个负样本吗?),所以在CNN训练阶段我们是对Bounding-box的位置限制条件限制的比较松(IOU只要大于0.5都被标注为正样本了);

    然而svm训练的时候,因为SVM适用于少样本训练,所以对于训练样本数据的IOU要求比较严格,我们只有当Bounding-box把整个物体都包含进去了,我们才把它标注为物体类别,然后训练svm。


推荐阅读
  •     目标检测是计算机视觉一个非常重要的子任务。目标检测需要发现并准确定位自然图片中的物体。在2012年之前,目标检测主要基于手工设计的特征以及传统分类器。2012年以后,出现了 ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 2019年斯坦福大学CS224n课程笔记:深度学习在自然语言处理中的应用——Word2Vec与GloVe模型解析
    本文详细解析了2019年斯坦福大学CS224n课程中关于深度学习在自然语言处理(NLP)领域的应用,重点探讨了Word2Vec和GloVe两种词嵌入模型的原理与实现方法。通过具体案例分析,深入阐述了这两种模型在提升NLP任务性能方面的优势与应用场景。 ... [详细]
  • 深度学习: 目标函数
    Introduction目标函数是深度学习之心,是模型训练的发动机。目标函数(objectfunction)损失函数(lossfunction)代价函数(costfunction) ... [详细]
  • 目录预备知识导包构建数据集神经网络结构训练测试精度可视化计算模型精度损失可视化输出网络结构信息训练神经网络定义参数载入数据载入神经网络结构、损失及优化训练及测试损失、精度可视化qu ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 机器学习算法:SVM(支持向量机)
    SVM算法(SupportVectorMachine,支持向量机)的核心思想有2点:1、如果数据线性可分,那么基于最大间隔的方式来确定超平面,以确保全局最优, ... [详细]
  • 深入解析国内AEB应用:摄像头和毫米波雷达融合技术的现状与前景
    本文作者程建伟,武汉极目智能技术有限公司CEO,入选武汉市“光谷3551人才计划”。文章详细探讨了国内自动紧急制动(AEB)系统中摄像头与毫米波雷达融合技术的现状及未来前景。通过分析当前技术的应用情况、存在的挑战以及潜在的解决方案,作者指出,随着传感器技术的不断进步和算法优化,AEB系统的性能将大幅提升,为交通安全带来显著改善。 ... [详细]
  • 独家解析:深度学习泛化理论的破解之道与应用前景
    本文深入探讨了深度学习泛化理论的关键问题,通过分析现有研究和实践经验,揭示了泛化性能背后的核心机制。文章详细解析了泛化能力的影响因素,并提出了改进模型泛化性能的有效策略。此外,还展望了这些理论在实际应用中的广阔前景,为未来的研究和开发提供了宝贵的参考。 ... [详细]
  • 能够感知你情绪状态的智能机器人即将问世 | 科技前沿观察
    本周科技前沿报道了多项重要进展,包括美国多所高校在机器人技术和自动驾驶领域的最新研究成果,以及硅谷大型企业在智能硬件和深度学习技术上的突破性进展。特别值得一提的是,一款能够感知用户情绪状态的智能机器人即将问世,为未来的人机交互带来了全新的可能性。 ... [详细]
  • 通过使用CIFAR-10数据集,本文详细介绍了如何快速掌握Mixup数据增强技术,并展示了该方法在图像分类任务中的显著效果。实验结果表明,Mixup能够有效提高模型的泛化能力和分类精度,为图像识别领域的研究提供了有价值的参考。 ... [详细]
  • 理工科男女不容错过的神奇资源网站
    十一长假即将结束,你的假期学习计划进展如何?无论你是在家中、思念家乡,还是身处异国他乡,理工科学生都不容错过一些神奇的资源网站。这些网站提供了丰富的学术资料、实验数据和技术文档,能够帮助你在假期中高效学习和提升专业技能。 ... [详细]
  • 图像分割技术在人工智能领域中扮演着关键角色,其中语义分割、实例分割和全景分割是三种主要的方法。本文对这三种分割技术进行了详细的对比分析,探讨了它们在不同应用场景中的优缺点和适用范围,为研究人员和从业者提供了有价值的参考。 ... [详细]
  • AI TIME联合2021世界人工智能大会,共探图神经网络与认知智能前沿话题
    AI TIME携手2021世界人工智能大会,共同探讨图神经网络与认知智能的最新进展。自2018年在上海首次举办以来,WAIC已成为全球AI领域的年度盛会,吸引了众多专家学者和行业领袖参与。本次大会将聚焦图神经网络在复杂系统建模、知识图谱构建及认知智能应用等方面的技术突破和未来趋势。 ... [详细]
author-avatar
手机用户2602934117
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有