R-CNNFast R-CNNFaster R-CNN

Posted frighting_ing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R-CNNFast R-CNNFaster R-CNN相关的知识,希望对你有一定的参考价值。

行人检测 概述:
行人检测主要有两种:传统检测算法和基于深度学习检测算法。传统检测算法的典型代表有Haar算法+Adaboost算法,Hog特征+SVM算法,DPM算法。而基于深度学习的行人检测典型代表有RCNN系列,SDD系列,YOLO系列

上图是单目标检测和多目标检测的例子,单目标相对容易实现一些,但是多目标很容易出现遗漏,现在比较新的mask rcnn可以实现目标检测和语义分割,相比FCN来说取得了更好的进步。

简单对比:
RCN (Selective Search + CNN + SVM)
SPP-Net(Spatial Pyramid Pooling)
Fast R-CNN(Selective Search + CNN + ROI pooling)
Faster R-CNN(CNN + RPN + ROI pooling)
R-FCN

RCNN原理

论文:Rich feature hierarchies for accurate object detection and semantic segmentation

RCNN(Region with CNN feature)是卷积神经网络应用于目标检测问题的一个里程碑的飞跃。CNN具有良好的特征提取和分类性能,采用RegionProposal方法实现目标检测问题。算法可以分为三步(1)候选区域选择。(2)CNN特征提取。(3)分类与边界回归。

RCNN算法流程:

  1. 一张图像生成1k~2k个候选区域(使用Selective Search)
  2. 对每个候选区域,使用深度网络提取特征
  3. 特征送入每一类的SVM分类器,判别是否属于该类
  4. 使用回归器精细修正候选框位置

(1)候选区域选择:区域建议Region Proposal是一种传统的区域提取方法,基于启发式的区域提取方法,用的方法是ss(selective research),查看现有的小区域,合并两个最有可能的区域,重复此步骤,直到图像合并为一个区域,最后输出候选区域。然后将根据建议提取的目标图像标准化,作为CNN的标准输入可以看作窗口通过滑动获得潜在的目标图像,在RCNN中一般Candidate选项为1k-2k个即可,即可理解为将图片划分成1k~2k个网格,之后再对网格进行特征提取或卷积操作,这根据RCNN类算法下的分支来决定。然后基于就建议提取的目标图像将其标准化为CNN的标准输入。

(2)CNN特征提取:标准卷积神经网络根据输入执行诸如卷积或池化的操作以获得固定维度输出。也就是说,在特征提取之后,特征映射被卷积和汇集以获得输出。比如有VGG,ZF等。

(3)分类与边界回归:实际上有两个子步骤,一个是对前一步的输出向量进行分类(分类器需要根据特征进行训练); 第二种是通过边界回归框回归(缩写为bbox)获得精确的区域信息。其目的是准确定位和合并完成分类的预期目标,并避免多重检测。在分类器的选择中有支持向量机SVM,Softmax等等(文中选择SVM,附录给出了解释原因,但是目前多数还是以Softmax);边界回归有bbox回归,多任务损失函数边框回归等 (文中使用带正则化的交叉熵损失函数)。


RCNN的缺点:

在RCNN刚刚被发明出来的2014年,RCNN在目标检测与行人检测上取得了巨大的成就,然而效率低下,花费时间长等一系列的问题的产生,还是导致了RCNN的运用并没有取得大范围的应用,其最大的问题有三:需要事先提取多个候选区域对应的图像。这一行为会占用大量的磁盘空间;针对传统的CNN来说,输入的map需要时固定尺寸的,而归一化过程中对图片产生的形变会导致图片大小改变,这对CNN的特征提取有致命的坏处;每个region proposal都需要进入CNN网络计算。进而会导致过多次的重复的相同的特征提取,这一举动会导致大大的计算浪费。在这之后,随之而来的Fast RCNN逐渐进入了人们的眼帘。

改进RCNN:

  • 提取候选框:Edge Boxes、RPN网络
  • 共享卷积运算:SPPNet、Fast RCNN
  • 兼容任意尺寸图像:SPP,ROI Pooling
  • 预设长宽比:Anchor
  • 网络结构:端对端
  • 融合各层特征:FPN

Fast RCNN

Fast RCNN较之前的RCNN相比,有四个方面得到了提升:

  1. 测试时的速度得到了提升。RCNN算法与图像内的大量候选帧重叠,导致提取特征操作中的大量冗余。而Fast RCNN则很好的解决了这一问题(先提取输入图像的特征向量,候选区域直接映射减少了重复提取相同的特征)。
  2. 训练时的速度得到了提升。
  3. 训练所需的空间大。RCNN中分类器和回归器需要大量特征作为训练样本。而Fast RCNN则不再需要额外储存。
  4. 实现了单阶段多任务损失函数,即端到端的训练。




ROI pooling详解

ROI pooling与SPPNet互联关系

Fast RCNN的工作流程:

1.选择性搜索Selective Search(SS)在图片中获得大约2k个候选框。

在第一步中所使用到的候选区域生成方法与RCNN无异,使用的方法都是Selective Search(SS)。以此方式来生成2k个候选框。其基本思路如下所述:使用过分割方法将图像分成小区域。在此之后,观察现有的区域。之后以最高概率合并这两个区域。重复此步骤,直到所有图像合并为一个区域位置。注意,在此处的合并规则与RCNN是相同的,优先合并以下四种区域: ==颜色(颜色直方图)相近的; 纹理(梯度直方图)==相近的; 合并后总面积小的。最后,所有已经存在的区域都被输出,并生成候选区域。

2.使用卷积网络提取图片特征。类似于RCNN,在获取特征映射之后,需要卷积神经网络来进行卷积操作。 在此处Fast RCNN使用的卷积神经网络为普通的fc7,但是有所改动,也有使用VGG16的神经网络。 前五个阶段是conv + relu + pooling的基本形式。

3.在第二步进行的卷积操作过后可以得到feature map,根据之前RoI框选择出对应的区域(可以理解为将feature map映射回原图像), 在最后一次卷积之前,使用 RoI池层来统一相同的比例(这里利用的是单层ssp)。

在RCNN中,在进行卷积操作之前一般都是先将图片分割与形变到固定尺寸,这也正是RCNN的劣势之处。不得不说,这对检测来说是十分不应该出现的,这会让图像产生形变,或者图像变得过小,使一些特征产生了损失,继而对之后的特征选择产生巨大影响。Fast RCNN与RCNN不同。其不同之处如下:Fast RCNN在数据的输入上并不对其有什么限制,而实现这一没有限制的关键所在正是ROI Pooling层。该层的作用是可以在任何大小的特征映射上为每个输入ROI区域提取固定的维度特征表示,然后确保每个区域的后续分类可以正常执行。

Faster R-CNN (RPN+Fast R-CNN)

从RCNN到Fast RCNN,再到Faster RCNN,一直都有效率上的提升 ,而对于Faster RCNN来讲,与RCNN和Fast RCNN最大的区别就是,目标检测所需要的四个步骤,即候选区域生成,特征提取,分类器分类,回归器回归,这四步全都交给深度神经网络来做,并且全部运行在 GPU上,这大大提高了操作的效率

Faster RCNN可以说是由两个模块组成的:区域生成网络RPN候选框提取模块+Fast RCNN检测模块

RPN是全卷积神经网络,其内部与普通卷积神经网络不同之处在于是将CNN中的全连接层变成卷积层。Faster RCNN是基于RPN提取的proposal检测并识别proposal中的目标。其具体流程大致可概括为:

1.输入图像。
2.通过区域生成网络RPN生成候选区域。
3.提取特征。
4.分类器分类。
5.回归器回归并进行位置调整。

详细讲解:
1.Conv layers。作为一种CNN网络目标检测方法,Faster RCNN首先使用一组基础的conv+relu+pooling层提取image的feature maps。该feature maps被共享用于后续RPN层和全连接层。
2.Region Proposal Networks。RPN网络用于生成region proposals。该层通过softmax判断anchors属于positive或者negative,再利用bounding box regression修正anchors获得精确的proposals。
3.RoI Pooling。该层收集输入的feature maps和proposals,综合这些信息后提取proposal feature maps,送入后续全连接层判定目标类别。
4.Classification。利用proposal feature maps计算proposal的类别,同时再次bounding box regression获得检测框最终的精确位置。

借助大佬的图像进一步细节分析:

  • 首先缩放至固定大小MxN,然后将MxN图像送入网络;
  • 而Conv layers中包含了13个conv层+13个relu层+4个pooling层;
  • RPN网络首先经过3x3卷积,再分别生成positive anchors和对应bounding box regression偏移量,然后计算出proposals;
  • 而Roi Pooling层则利用proposals从feature maps中提取proposal feature送入后续全连接和softmax网络作classification(即分类proposal到底是什么object)。

区域代网络RPN的核心思想是直接使用卷积神经网络CNN生成候选区域region proposal区域提议。本节主要来对RPN的具体流程进行讲解。RPN使用的方法实际上是在最后一个卷积层上滑动窗口。

RPN的具体操作流程如下:使用小型网络在最后的卷积特征地图feature map上执行滑动扫描,每当滑动网络完全连接到特征地图上的 n* n窗口,然后将其映射到低维矢量,最后将这个低维矢量发送到两个完全连接的层。即 bbox回归层( reg)和 box分类层( cls)。 滑动窗口处理确保reg层和cls层与conv5-3的整个特征空间相关联。在其中,reg层的作用是预测proposal的anchor对应的proposal的(x,y,w,h),cls层的作用是判断该proposal是前景(object)还是背景(non-object)(注:这里作者使用的是多分类交叉熵损失函数,因为是2k Scores,如果是二分类交叉熵损失函数,则 应该结果为k Score)。详解区分

在候选区域(锚点anchor)部分,该特征可以被视为大小为51 * 39的256通道图像:三种面积{128128,256256,512512}×三种比例{1:1,1:2,2:1}。这些候选窗口称为anchors即锚点。下图示出5139个anchor中心,以及3x3 = 9种anchor示例。

在RPN中,reg与cls层分别是进行了窗口分类与位置精修。分类层(cls_score)输出9个锚点属于每个位置的前景和背景的概率。在每个位置的bbox_pred输出中,9个锚点对应点应该是泛化的(x,y,w,h)。对于每个位置来说,分类层从256维特征输出属于前景和背景的概率。而回归图层则是从256维特征中输出4个平移和缩放参数。

Faster RCNN算法流程可分为3个步骤

  1. 将图像输入网络得到相应的特征图
  2. 使用RPN结构生成候选框,将RPN生成的候选框投影到特征图上获得相应的特征矩阵
  3. 将每个特征矩阵通过ROI pooling层缩放到7x7大小的特征图,接着将特征图战平通过一些列全连接层得到预测结果

注:

目前,是直接采用RPN Loss + Fast R-CNN Loss的联合训练方法训练Faster RCNN的

原论文中采用分别训练RPN及Fast R-CNN的方法
(1) 利用ImageNet预训练分类模型初始化前置卷积网络层参数,并开始单独训练RPN网络参数;
(2) 固定RPN网络独有的卷积层以及全连接层参数,再利用
lmageNet预训练分类模型初始化前置卷积网络参数,并利用RPN网络生成的目标建议框去训练Fast RCNN网络参数。
(3) 固定利用Fast RCNN训练好的前置卷积网络层参数,去微调RPN网络独有的卷积层以及全连接层参数。
(4) 同样保持固定前置卷积网络层参数,去微调Fast RCNN网络的全连接层参数。最后RPN网络与Fast RCNN网络共享前置卷积网络层参数,构成一个统一网络。

最后,给出一张三张网络的结构对比图,可以看到从各个模块的分散到集中,实现端到端,并且在空间和时间效率上都得到了很大的提升。

参考链接:https://blog.csdn.net/gentelyang/article/details/80469553
参考链接:https://zhuanlan.zhihu.com/p/31426458
B站:https://www.bilibili.com/video/BV1af4y1m7iL?from=search&seid=10038516019441925384&spm_id_from=333.337.0.0

以上是关于R-CNNFast R-CNNFaster R-CNN的主要内容,如果未能解决你的问题,请参考以下文章

(转)基于深度学习的目标检测技术演进:R-CNNFast R-CNNFaster R-CNN

目标检测梳理:基于深度学习的目标检测技术演进:R-CNNFast R-CNNFaster R-CNN

R-CNNSPPnetFast R-CNNFaster R-CNN的对比

物体检测学习笔记-目标检测算法 CNNR-CNNFast R-CNNFaster R-CNNYOLOSSD基础概念

Python爬虫三

linux命令之touch