RCNN到Faster RCNN——小白的总结

一.RCNN:(Regions with CNN features)是将CNN方法应用到目标检测问题上的一个里程碑,由年轻有为的RBG大神提出,借助CNN良好的特征提取和分类性能,通过RegionProposal方法实现目标检测问题的转化。

RCNN算法流程:

RCNN算法分为4个步骤 
- 一张图像生成1K~2K个候选区域 
- 对每个候选区域,使用深度网络提取特征 
- 特征送入每一类的SVM 分类器,判别是否属于该类 
- 使用回归器精细修正候选框位置 
这里写图片描述

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

(1)为什么选用选择性搜索Selective Search(SS)在图片中获得大约2k个候选框?

         原理:使用过分割方法将图像分成小区域。在此之后,观察现有的区域。之后以最高概率合并这两个区域。重复此步骤,直到所有图像合并为一个区域位置。注意,在此处的合并规则与RCNN是相同的,优先合并以下四种区域: 颜色(颜色直方图)相近的; 纹理(梯度直方图)相近的; 合并后总面积小的。最后,所有已经存在的区域都被输出,并生成候选区域。不用传统的滑动窗口的原因(滑动窗口算法就是在原始图片上进行不同尺度不同大小的滑窗,获取每个可能的位置。而这样做的缺点也显而易见,复杂度太高,产生了很多的冗余候选区域,而且由于不可能每个尺度都兼顾到,因此得到的目标位置也不可能那么准,在现实当中不可行。而选择性搜索有效地去除冗余候选区域,使得计算量大大的减小)

(2)CNN提取特征前的处理是什么?

          CNN对输入图片的大小是有固定的,如果把搜索到的矩形选框不做处理,就扔进CNN中,肯定不行。因此对于每个输入的候选框都需要缩放到固定的大小。下面我们讲解要怎么进行缩放处理,为了简单起见我们假设下一阶段CNN所需要的输入图片大小是个正方形图片227*227。在paper中采用:各向异性变形(就是不管图片的长宽比例,管它是否扭曲,进行缩放就是了,全部缩放到CNN输入的大小227*227),简单粗暴对图像就行缩放至227×227,变形前先进行边界像素填充【padding】处理,即向外扩展建议框边界,padding=16精度最高;

RCNN存在三个明显的问题:

1)多个候选区域对应的图像需要预先提取,占用较大的磁盘空间(产生候选区,操作耗时比较长);

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

(产生的proposal需要经过warp操作再送入后续网络,导致图像的变形和扭曲)

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

二.Fast RCNN:快速的RCNN(就这样理解好了)

改进的Fast RCNN解决的问题:

(1)由于ROI Pooling可接受任意尺寸的输入,不需要归一化操作,解决了RCNN的(2)问题,保证了特殊信息的真实性。

(2)不需要对每个候选框都提取特征,采用的映射方式从整张图片的feature map 上获取ROI feature区域,解决了(3)问题。

         此外RCNN中获取到的最终的CNN特征后先采用SVM进行类别判断,再进行边界边框回归得到位置信息,整个过程是串行的流程极大的影响了网络的检测速度。而Faste RCNN中将分类与回归的任务合二为一,变成一个多任务的模型,实现了特征的 共享与速度的进一步提升。

 Fast RCNN整体框架:

                      

        框架说明:一张包含多个RoI(regions of interest)的图片(上图便于说明只显示一个RoI,灰色部分)输入一个多层的全连接网络中,获得Conv feature map,然后每一个RoI被池化成一个固定大小的feature map,feature map被全连接层拉伸成一个特征向量。对于每一个RoI,经过FC层后得到的feature vector最终被分享:一个进行全连接之后用来做softmax回归,用来对RoI区域做物体识别,另一个经过全连接之后用来做b-box regression做修正定位,使得定位框更加精准。

(ROI Pooling网络层可以把不同大小的输入映射到一个固定尺度的特征向量,而我们知道,conv、pooling、relu等操作都不需要固定size的输入,因此,在原始图片上执行这些操作后,虽然输入图片size不同导致得到的feature map尺寸也不同,不能直接接到一个全连接层进行分类,但是可以加入这个神奇的ROI Pooling层,对每个region都提取一个固定维度的特征表示,再通过正常的softmax进行类型识别。)

Fast RCNN算法流程:

1. 在图像中确定约1000-2000个候选框 (使用选择性搜索)

2. 对整张图片输进CNN,得到feature map

3. 找到每个候选框在feature map上的映射区域,将此区域作为每个候选框的卷积特征输入到ROI pooling层和之后的层

4. 对候选框中提取出的特征,使用分类器判别是否属于一个特定类 ; 对于属于某一特征的候选框,用回归器进一步调整其位置。(分类和位置调整都是通过全连接层(fc)实现的)。

Fast RCNN存在的问题:

(1)成生候选区,耗时比较长。

三.Faster RCNN:更快速的RCNN(就这样理解好了)

改进的Faster RCNN解决的问题:

(1)利用RPN(全卷积神经网络,其内部与普通卷积神经网络不同之处在于是将CNN中的全连接层变成卷积层)生成候选区,减少耗时。

 Faster RCNN网络框架:

             

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

       疑点:那么为何要在softmax前后都接一个reshape layer?

       其实只是为了便于softmax分类,至于具体原因这就要从caffe的实现形式说起了,与caffe基本数据结构相关,对应至上面的保存bg/fg anchors的矩阵,其在caffe blob中的存储形式为[1, 2x9, H, W]。而在softmax分类时需要进行fg/bg二分类,所以reshape layer会将其变为[1, 2, 9xH, W]大小,即单独“腾空”出来一个维度以便softmax分类。

重点理解RPN工作原理:

(转载https://blog.csdn.net/jiongnima/article/details/79094159

  1. 在原文中使用的是ZF model中,其Conv Layers中最后的conv5层num_output=256,对应生成256张特征图,所以相当于feature map每个点都是256-dimensions
  2. 在conv5之后,做了rpn_conv/3x3卷积且num_output=256,相当于每个点又融合了周围3x3的空间信息,同时256-d不变。
  3. 假设在conv5 feature map中每个点上有k个anchor(默认k=9),而每个anhcor要分foreground和background,所以每个点由256d feature转化为cls=2k scores;而每个anchor都有(x, y, w, h)对应4个偏移量,所以reg=4k coordinates

       RPN依靠一个在共享特征图上滑动的窗口,为每个位置生成9种预先设置好长宽比与面积的目标框(文中叫做anchor)。这9种初始anchor包含三种面积(128×128,256×256,512×512),每种面积又包含三种长宽比(1:1,1:2,2:1)。RPN要做的事情有两个,第一个是判断anchor到底是前景还是背景,意思就是判断这个anchor到底有没有覆盖目标,第二个是为属于前景的anchor进行第一次坐标修正。RPN的本质是一个树状结构,树干是一个3×3的卷积层,树枝是两个1×1的卷积层,第一个1×1的卷积层解决了前后景的输出,第二个1×1的卷积层解决了边框修正的输出。因为是每一个点对应9个anchor,每个anchor有一个前景分数和一个背景分数,所以9×2=18。另一个1×1的卷积层输出了36个值,因为是每一个点对应9个anchor,每个anchor对应了4个修正坐标的值,所以9×4=36。那么,要得到这些值,RPN网络需要训练。在训练的时候,就需要对应的标签。如何判定一个anchor是前景还是背景呢?如果一个anchor与ground truth的IoU(检测评价函数,人工标注与算法检测图交集/它们之间的并集)在0.7以上,那这个anchor就算前景(positive)。类似地,如果这个anchor与ground truth的IoU在0.3以下,那么这个anchor就算背景(negative)。

Fast RCNN算法流程:

1. 对整张图片输进CNN,得到feature map

2. 卷积特征输入到RPN,得到候选框的特征信息

3. 对候选框中提取出的特征,使用分类器判别是否属于一个特定类

4. 对于属于某一特征的候选框,用回归器进一步调整其位置

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

四.总结

(1)RCNN的演进:

(2)R-CNN、Fast R-CNN、Faster R-CNN三者比较

  

使用方法

缺点

改进

R-CNN

(Region-based Convolutional

Neural Networks)

1、SS提取RP;

2、CNN提取特征;

3、SVM分类;

4、BB盒回归。

1、 训练步骤繁琐(微调网络+训练SVM+训练bbox);

2、 训练、测试均速度慢 ;

3、 训练占空间

1、 从DPM HSC的34.3%直接提升到了66%(mAP);

2、 引入RP+CNN

Fast R-CNN

(Fast Region-based Convolutional

Neural Networks)

1、SS提取RP;

2、CNN提取特征;

3、softmax分类;

4、多任务损失函数边框回归。

1、 依旧用SS提取RP(耗时2-3s,特征提取耗时0.32s);

2、 无法满足实时应用,没有真正实现端到端训练测试;

3、 利用了GPU,但是区域建议方法是在CPU上实现的。

1、 由66.9%提升到70%;

2、 每张图像耗时约为3s。

Faster R-CNN

(Fast Region-based Convolutional

Neural Networks)

1、RPN提取RP;

2、CNN提取特征;

3、softmax分类;

4、多任务损失函数边框回归。

1、 还是无法达到实时检测目标;

2、 获取region proposal,再对每个proposal分类计算量还是比较大。

1、 提高了检测精度和速度;

2、  真正实现端到端的目标检测框架;

3、  生成建议框仅需约10ms。

(3)总的来说,从R-CNN, SPP-NET, Fast R-CNN, Faster R-CNN一路走来,基于深度学习目标检测的流程变得越来越精简,精度越来越高,速度也越来越快。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值