Faster RCNN解析

转自:http://www.360doc.com/content/17/0303/14/10408243_633634497.shtml

在介绍Faster R-CNN之前,先来介绍一些前验知识,为Faster R-CNN做铺垫。

一、基于Region Proposal(候选区域)的深度学习目标检测算法

Region Proposal(候选区域),就是预先找出图中目标可能出现的位置,通过利用图像中的纹理、边缘、颜色等信息,保证在选取较少窗口(几千个甚至几百个)的情况下保持较高的召回率(IoU,Intersection-over-Union)。

图1  IoU定义

Region Proposal方法比传统的滑动窗口方法获取的质量要更高。

比较常用的Region Proposal方法有:SelectiveSearch(SS,选择性搜索)、Edge Boxes(EB)。

基于Region Proposal目标检测算法的步骤如下:

其中:

CNN方法见http://blog.csdn.net/qq_17448289/article/details/52850223

边框回归(Bouding Box Regression):是对RegionProposal进行纠正的线性回归算法,目的是为了让Region Proposal提取到的窗口与目标窗口(Ground Truth)更加吻合。

二、R-CNN、Fast R-CNN、Faster R-CNN三者关系


图2  三者关系

表1  三者比较

 

使用方法

缺点

改进

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。

2.1 R-CNN目标检测流程介绍

  

具体可参考http://blog.csdn.net/shenxiaolu1984/article/details/51066975

2.2 Fast R-CNN目标检测流程介绍

注意:Fast R-CNN的RegionProposal是在feature map之后做的,这样可以不用对所有的区域进行单独的CNN Forward步骤。

Fast R-CNN框架如下图:


                                                                                                                                            图3  Fast R-CNN框架

Fast R-CNN框架与R-CNN有两处不同:

① 最后一个卷积层后加了一个ROI pooling layer;

② 损失函数使用了multi-task loss(多任务损失)函数,将边框回归直接加到CNN网络中训练。分类Fast R-CNN直接用softmax替代R-CNN用的SVM进行分类。

Fast R-CNN是端到端(end-to-end)的。

具体可参考http://blog.csdn.net/shenxiaolu1984/article/details/51036677

三、Faster R-CNN目标检测

3.1 Faster R-CNN的思想

Faster R-CNN可以简单地看做“区域生成网络RPNs + Fast R-CNN”的系统,用区域生成网络代替FastR-CNN中的Selective Search方法。Faster R-CNN这篇论文着重解决了这个系统中的三个问题:
1. 如何设计区域生成网络;
2. 如何训练区域生成网络;
3. 如何让区域生成网络和Fast RCNN网络共享特征提取网络

在整个Faster R-CNN算法中,有三种尺度:
1. 原图尺度:原始输入的大小。不受任何限制,不影响性能。

2. 归一化尺度:输入特征提取网络的大小,在测试时设置,源码中opts.test_scale=600。anchor在这个尺度上设定。这个参数和anchor的相对大小决定了想要检测的目标范围。
3. 网络输入尺度:输入特征检测网络的大小,在训练时设置,源码中为224*224。

3.2 Faster R-CNN框架介绍

图4  Faster R-CNN模型

Faster-R-CNN算法由两大模块组成:

1.PRN候选框提取模块;

2.Fast R-CNN检测模块。

其中,RPN是全卷积神经网络,用于提取候选框;Fast R-CNN基于RPN提取的proposal检测并识别proposal中的目标。

3.3 RPN介绍

3.3.1背景

目前最先进的目标检测网络需要先用区域建议算法推测目标位置,像SPPnet和Fast R-CNN这些网络虽然已经减少了检测网络运行的时间,但是计算区域建议依然耗时较大。所以,在这样的瓶颈下,RBG和Kaiming He一帮人将Region Proposal也交给CNN来做,这才提出了RPN(Region Proposal Network)区域建议网络用来提取检测区域,它能和整个检测网络共享全图的卷积特征,使得区域建议几乎不花时间。

RCNN解决的是,“为什么不用CNN做classification呢?”

Fast R-CNN解决的是,“为什么不一起输出bounding box和label呢?”

Faster R-CNN解决的是,“为什么还要用selective search呢?”

3.3.2RPN核心思想

RPN的核心思想是使用CNN卷积神经网络直接产生Region Proposal,使用的方法本质上就是滑动窗口(只需在最后的卷积层上滑动一遍),因为anchor机制和边框回归可以得到多尺度多长宽比的Region Proposal。

RPN网络也是全卷积网络(FCN,fully-convolutional network),可以针对生成检测建议框的任务端到端地训练,能够同时预测出object的边界和分数。只是在CNN上额外增加了2个卷积层(全卷积层cls和reg)。

①将每个特征图的位置编码成一个特征向量256dfor ZF and 512d for VGG)。

②对每一个位置输出一个objectness score和regressedbounds for k个region proposal,即在每个卷积映射位置输出这个位置上多种尺度(3种)和长宽比(3种)的k个(3*3=9)区域建议的物体得分和回归边界。

RPN网络的输入可以是任意大小(但还是有最小分辨率要求的,例如VGG是228*228)的图片。如果用VGG16进行特征提取,那么RPN网络的组成形式可以表示为VGG16+RPN。

VGG16:参考

https://github.com/rbgirshick/py-faster-rcnn/blob/master/models/pascal_voc/VGG16/faster_rcnn_end2end/train.prototxt,可以看出VGG16中用于特征提取的部分是13个卷积层(conv1_1---->conv5.3),不包括pool5及pool5后的网络层次结构。

因为我们的最终目标是和Fast R-CNN目标检测网络共享计算,所以假设这两个网络共享一系列卷积层。在论文的实验中,ZF有5个可共享的卷积层, VGG有13个可共享的卷积层。

RPN的具体流程如下:使用一个小网络在最后卷积得到的特征图上进行滑动扫描,这个滑动网络每次与特征图上n*n(论文中n=3)的窗口全连接(图像的有效感受野很大,ZF是171像素,VGG是228像素),然后映射到一个低维向量(256d for ZF / 512d for VGG),最后将这个低维向量送入到两个全连接层,即bbox回归层(reg)和box分类层(cls)。sliding window的处理方式保证reg-layer和cls-layer关联了conv5-3的全部特征空间。

reg层:预测proposal的anchor对应的proposal的(x,y,w,h)

cls层:判断该proposal是前景(object)还是背景(non-object)。

                                                              图5  RPN框架

在图5中,要注意,3*3卷积核的中心点对应原图(re-scale,源代码设置re-scale600*1000)上的位置(点),将该点作为anchor的中心点,在原图中框出多尺度、多种长宽比的anchors。所以,anchor不在conv特征图上,而在原图上。

                                                              图6  9种anchor(注意:是不同位置)


                                                                         图7  Faster R-CNN卷积流程图

原图600*1000经CNN卷积后,在CNN最后一层(conv5)得出的是40*60大小的特征图,对应文中说的典型值为2400。若特征图大小为W*H,则需要W*H*K个anchor,本文中需要40*60*9≈2k个。

在RPN网络中,我们需要重点理解其中的anchors概念,Loss fucntions计算方式和RPN层训练数据生成的具体细节。

3.4 RPN的平移不变性

在计算机视觉中的一个挑战就是平移不变性:比如人脸识别任务中,小的人脸(24*24的分辨率)和大的人脸(1080*720)如何在同一个训练好权值的网络中都能正确识别。若是平移了图像中的目标,则建议框也应该平移,也应该能用同样的函数预测建议框。

传统有两种主流的解决方式:
第一、对图像或feature map层进行尺度\宽高的采样;
第二、对滤波器进行尺度\宽高的采样(或可以认为是滑动窗口).

但Faster R-CNN解决该问题的具体实现是:通过卷积核中心(用来生成推荐窗口的Anchor)进行尺度、宽高比的采样,使用3种尺度和3种比例来产生9种anchor。

3.5 窗口分类和位置精修

分类层(cls_score)输出每一个位置上,9anchor属于前景和背景的概率。

窗口回归层(bbox_pred)输出每一个位置上,9个anchor对应窗口应该平移缩放的参数(x,y,w,h)。

对于每一个位置来说,分类层从256维特征中输出属于前景和背景的概率;窗口回归层从256维特征中输出4个平移缩放参数。

需要注意的是:并没有显式地提取任何候选窗口,完全使用网络自身完成判断和修正

3.6 学习区域建议损失函数

3.6.1 标签分类规定

为了训练RPN,需要给每个anchor分配的类标签{目标、非目标}。对于positive label(正标签),论文中给了如下规定(满足以下条件之一即可判为正标签):


注意,一个GT包围盒可以对应多个anchor,这样一个GT包围盒就可以有多个正标签。

事实上,采用第②个规则基本上可以找到足够的正样本,但是对于一些极端情况,例如所有的Anchor对应的anchor box与groud truth的IoU不大于0.7,可以采用第一种规则生成。

negative label(负标签):与所有GT包围盒的IoU都小于0.3的anchor。

对于既不是正标签也不是负标签的anchor,以及跨越图像边界的anchor我们给予舍弃,因为其对训练目标是没有任何作用的。

3.6.2 多任务损失(来自Fast R-CNN)

图8  multi-task数据结构

Fast R-CNN网络有两个同级输出层(cls score和bbox_prdict层),都是全连接层,称为multi-task。

① clsscore层:用于分类,输出k+1维数组p,表示属于k类和背景的概率。对每个RoI(Region of Interesting)输出离散型概率分布

通常,p由k+1类的全连接层利用softmax计算得出。

② bbox_prdict层:用于调整候选区域位置,输出bounding box回归的位移,输出4*K维数组t,表示分别属于k类时,应该平移缩放的参数。

k表示类别的索引,是指相对于objectproposal尺度不变的平移,是指对数空间中相对于objectproposal的高与宽。

loss_cls层评估分类损失函数。由真实分类u对应的概率决定:


loss_bbox评估检测框定位的损失函数。比较真实分类对应的预测平移缩放参数

真实平移缩放参数为的差别:


其中,smooth L1损失函数为:

smooth L1损失函数曲线如下图9所示,作者这样设置的目的是想让loss对于离群点更加鲁棒,相比于L2损失函数,其对离群点、异常值(outlier)不敏感,可控制梯度的量级使训练时不容易跑飞。

图9  smoothL1损失函数曲线

最后总损失为(两者加权和,如果分类为背景则不考虑定位损失):


规定u=0为背景类(也就是负标签),那么艾弗森括号指数函数[u≥1]表示背景候选区域即负样本不参与回归损失,不需要对候选区域进行回归操作。λ控制分类损失和回归损失的平衡。Fast R-CNN论文中,所有实验λ=1。

艾弗森括号指数函数为:


源码中bbox_loss_weights用于标记每一个bbox是否属于某一个类。

3.6.3 Faster R-CNN损失函数

遵循multi-task loss定义,最小化目标函数,FasterR-CNN中对一个图像的函数定义为:

其中:


3.6.4 R-CNN中的boundingbox回归

下面先介绍R-CNN和Fast R-CNN中所用到的边框回归方法。

1.      为什么要做Bounding-box regression?

图10  示例

如图10所示,绿色的框为飞机的Ground Truth,红色的框是提取的Region Proposal。那么即便红色的框被分类器识别为飞机,但是由于红色的框定位不准(IoU<>微调,使得经过微调后的窗口跟Ground Truth更接近,这样岂不是定位会更准确。确实,Bounding-box regression 就是用来微调这个窗口的。

展开阅读全文

没有更多推荐了,返回首页