R-CNN,SPP-net,Fast R-CNN,Faster R-CNN区别和基本理解

R-CNN,SPP-net,Fast R-CNN,Faster R-CNN区别和基本理解

最近学习目标检测,入手当然首先要看RNN系列,其中有一些启发,和大家分享一下,有理解偏差希望大神给与指正。

R-CNN,SPP-net,Fast R-CNN,Faster R-CNN区别和基本理解_第1张图片
这张图对我的理解帮助很大,特意贴出。可以发现他们是环环相扣发展过来的,主要区别在于卷积模型、候选框、分类回归方式(Classification + Localization):

首先我们先搞清一些小的概念:

Region Proposals / Selective Search(区域建议,SS算法):

RP:通过找到’斑点‘区域来找到可能包含对象的区域.
SS:这个算法使用CPU在几秒钟内给出2000个建议区域(region proposals)

RCNN:

R-CNN,SPP-net,Fast R-CNN,Faster R-CNN区别和基本理解_第2张图片
(图像来自CS231课件)

  • RCNN使用的是VGG16作为卷积模型
  • 候选框则使用了 Selective Search算法
  • 分类分别使用边框回归(BBOX)和SVMs对每一个框进行分类和回归
  • 缺点:因为对每个建议区域跑CNN所以会浪费大量时间(84h)和浪费大量的磁盘空间,检测也是很慢的并且使用了不同的分类loss加上每个框对应不同的CNN模型,所以我们看出就像上面RCNN的图并不能整体进行调参修正

SPP-NET

R-CNN,SPP-net,Fast R-CNN,Faster R-CNN区别和基本理解_第3张图片
SPP-NET(Spatial Pyramid Pooling)是对RCNN的修改他引入金字塔池化,对后来的目标识别产生很深远的影响

  • 第一点SPP-Net并不是在原图上给出2000个建议区域,而是在特征图上,这里的特征图是经过VGG16第五层卷积层得到的特征图,这就很显然把2000个卷积变成了一次卷积,大大提高了效率
  • 第二点是SPP-Net没有经过Crop(裁剪)和Warp(扭曲)过程,大大提高了准确率。这里提一句金字塔池化把每个建议区域分别分成11,22,4*4个区域并对其进行Maxpooling然后送入全连接层(如上图)
  • 这里仍然使用了不同的分类loss所以回归调参还是很局部。

Fast R-CNN

R-CNN,SPP-net,Fast R-CNN,Faster R-CNN区别和基本理解_第4张图片

  • Fast-RCNN使用的是VGG16前5层卷积层并且使用了ROIPooling层(其实就是单层金字塔结构)然后得到4096的FC层
  • 候选框仍然是使用了 Selective Search算法和SPP-Net一样他是在conv5后的特征图上进行区域选择
  • 这里的Loss是Fast R-CNN的一大进步,不再是像之前R-CNN 和SPP-Net一样分别使用SVM和边框回归进行分类和定位而是用了softmax和边框回归并且使用了总Loss使整体的调参回归扩展到候选框以外所有部分(看我的第一张对比图)Loss:
    总的损失函数如下:
    L(p,u,tu,v)=Lcls(p,u)+λ[u⩾1]Lloc(tu,v)  
    分类损失函数如下:
    Lcls(p,u)=−log pu
    回归损失函数如下:
    Lloc(tu,v)=∑iϵ{x,y,w,h}smoothL1(tui−vi)
    其中有:
    smoothL1(x)={0.5x2 if |x|<1|x|−0.5 otherwise

速度对比:
R-CNN,SPP-net,Fast R-CNN,Faster R-CNN区别和基本理解_第5张图片
我们可以发现Fast R-CNN已经足够优秀,那么我们还有什么改进点?经过大神测试发现Fast —R-CNN的时间大量浪费在了区域建议上抛开SS算法的时间,即使对付这2000个候选框(大部分是没用的)就浪费了大量时间。而Faster R-CNN就是解决了这个问题。是的 Faster R-CNN 解决了区域建议浪费时间的问题

Faster R-CNN

R-CNN,SPP-net,Fast R-CNN,Faster R-CNN区别和基本理解_第6张图片
Faster R-CNN是对Fast R-CNN的改进,核心就是RPN算法:(Faster-RCNN是用RPN微调Fast-RCNN)
参考:https://blog.csdn.net/hunterlew/article/details/71075925
RPN网络的作用是输入一张图像,输出一批矩形候选区域,类似于以往目标检测中的Selective Search一步。网络结构是基于卷积神经网络,但输出包含二类softmax和bbox回归的多任务模型。网络结果如下(以ZF网络为参考模型):

R-CNN,SPP-net,Fast R-CNN,Faster R-CNN区别和基本理解_第7张图片
其中,虚线以上是ZF网络最后一层卷积层前的结构(属于特征图之前的部分),虚线以下是RPN网络特有的结构。
首先是3* 3的卷积,然后通过1*1卷积输出分为两路,其中一路输出是目标和非目标的概率,另一路输出box相关的四个参数,包括box的中心坐标x和y,box宽w和长h
anchor:
anchor是rpn网络的核心。刚刚说到,需要确定每个滑窗中心对应感受野内存在目标与否。由于目标大小和长宽比例不一,需要多个尺度的窗。Anchor即给出一个基准窗大小,按照倍数和长宽比例得到不同大小的窗。例如论文中基准窗大小为16,给了(8、16、32)三种倍数和(0.5、1、2)三种比例,这样能够得到一共9种尺度的anchor,如图

R-CNN,SPP-net,Fast R-CNN,Faster R-CNN区别和基本理解_第8张图片
因此,在对60* 40的map进行滑窗时,以中心像素为基点构造9种anchor映射到原来的1000600图像中,映射比例为16倍。那么总共可以得到6040*9大约2万个anchor。
训练:
RPN网络训练就涉及ground truth(真实目标区域)和loss function的问题。对于左支路(是否为目标物体),ground truth为anchor是否为目标,用0/1表示。那么怎么判定一个anchor内是否有目标呢?论文中采用了这样的规则:
1)假如某anchor与任一目标区域的IOU最大,则该anchor判定为有目标;
2)假如某anchor与任一目标区域的IOU>0.7,则判定为有目标;
3)假如某anchor与任一目标区域的IOU<0.3,则判定为背景。
注:IOU只Box重叠区域,这里也就是框和实际区域的重叠度

联合训练(用RPN微调Fast-RCNN)
作者采用四步训练法:
1) 单独训练RPN网络,网络参数由预训练模型载入;
2) 单独训练Fast-RCNN网络,将第一步RPN的输出候选区域作为检测网络的输入。
具体而言,RPN输出一个候选框,通过候选框截取原图像,并将截取后的图像通过几次conv-pool,然后再通过ROI-pooling和fc再输出两条支路,一条是目标分类softmax,另一条是 bbox回归。截止到现在,两个网络并没有共享参数,只是分开训练了;
3) 再次训练RPN,此时固定网络公共部分的参数,只更新RPN独有部分的参数;
4) 那RPN的结果再次微调Fast-RCNN网络,固定网络公共部分的参数,只更新Fast-RCNN独有部分的参数。
在这里插入图片描述
RPN网络得到的大约2万个anchor不是都直接给Fast-RCNN,因为有很多重叠的框。文章通过非极大值抑制的方法,设定IoU为0.7的阈值(常用的阈值是 0.3 ~ 0.50),即仅保留覆盖率不超过0.7的局部最大分数的box(粗筛)。最后留下大约2000个anchor,然后再取前N个box(比如300个)给Fast-RCNN。Fast-RCNN将输出300个判定类别及其box,对类别分数采用阈值为0.3的非极大值抑制(精筛),并仅取分数大于某个分数的目标结果(比如,只取分数60分以上的结果)。
速度对比:
R-CNN,SPP-net,Fast R-CNN,Faster R-CNN区别和基本理解_第9张图片

你可能感兴趣的:(机器学习基础复习)