Object Detection(三)Faster R-CNN

之前介绍了R-CNN,Fast R-CNN,这是本系列的第三篇 Faster R-CNN


在上一篇介绍Fast R-CNN的blog中介绍了,Fast R-CNN 对整张图像提特征,再使用RoI Pooling根据proposal从全图的feature map中提取相同大小的特征。替代了R-CNN中上千次的前向运算,提高了模型的运行速度。但是,由于Fast R-CNN region proposal提取使用的selective search,消耗了整个目标检测的大量时间。于是Faster R-CNN应运而生。


Faster R-CNN

Faster R-CNN主要有两个贡献:

  • 提出区域建议网络RPN,替代selective search快速生成proposal region
  • 通过交替训练,使RPN和Fast-RCNN网络共享参数。

先来看看Faster R-CNN的结构


Object Detection(三)Faster R-CNN_第1张图片

输入图像通过卷积神经网络提取特征得到feature map,然后这个feature map有两个branch,先说第一个branch送到Region Proposal Network(RPN)来生成提议区域,这样做使得生成提议区域的时间从2s缩减到10ms。
在前一篇Fast R-CNN中提到,用卷积神经网络对整张图像提取特征,然后再这些特征中使用RoI Pooling来得到相同纬度的特征做分类和bbox回归。而这里的feature map的第二个分支就是作为RoI Pooling的输入,也就是第二点提到的使RPN和Fast R-CNN网络共享参数。
再之后的步骤就和Fast R-CNN一样了。
之前看到一张Faster R-CNN的结构图,源自

Object Detection(三)Faster R-CNN_第2张图片

主要有三个部分,共享卷积层-backbone,RPN网络,以及最后Fast R-CNN的部分。


Region Proposal Network(RPN)

RPN的作用和selectice search一样,都是输入一张图像,输出一批候选框。
先来看看RNP的整体流程:


Object Detection(三)Faster R-CNN_第3张图片

RNP使用一个3*3的滑窗,在feature map上滑动,为每个像素点生成3种大小(128×128,256×256,512×512)3种长宽比(1:1,1:2,2:1)一共9个框,每个框就是一个anchor.
如图,源自

Object Detection(三)Faster R-CNN_第4张图片

在一个60*40的feature map上滑动就会产生 60x40x9个框


再来看看RPN的实现

RPN是基于卷积神经网络的。网络结构如下图,源自

Object Detection(三)Faster R-CNN_第5张图片

虚线以上是ZF网络最后一层卷积层前的结构,虚线以下是RPN网络特有的结构。首先是33的卷积,然后通过11卷积输出分为两路,其中一路输出是目标和非目标的概率(即判断是否包含目标),另一路输出box相关的四个参数,包括box的中心坐标x和y,box宽w和长h的修正值.


RPN的Loss

要训练我们就要先明确Loss,RPN的两个输出分别是判断anchor中是否包含目标和对bbox的修正值。那么如何判断是否有目标呢?
论文中采用了这样的规则:

  1. 假如某anchor与任一目标区域的IoU最大,则该anchor判定为有目标
  2. 假如某anchor与任一目标区域的IoU>0.7,则判定为有目标
  3. 假如某anchor与任一目标区域的IoU<0.3,则判定为背景

IoU就是预测box和真实box的覆盖率(交并比),其值等于两个box的交集除以两个box的并集。其它的anchor不参与训练
所以Loss 函数也分为两部分

Object Detection(三)Faster R-CNN_第6张图片

其中Lreg使用在 Fast R-CNN中定义的L1 Loss,这里Lreg于pi*相乘,也就是说如果anchor不包含目标,就不管后半部分。
在修正bbox时,主要预测四个值tx,ty,tw,th,这tx,ty表示在x,y方向上平移的距离,tw,th表示宽和高的放大倍数。
Object Detection(三)Faster R-CNN_第7张图片


Faster R-CNN训练

作者采用四步训练法:

  1. 单独训练RPN网络,网络参数由在ImageNet上预训练的模型初始化
  2. 单独训练Fast-RCNN网络,将第一步RPN的输出候选区域作为检测网络的输入。具体而言,RPN输出一个候选框,通过候选框截取原图像,并将截取后的图像通过几次conv-pool,然后再通过roi-pooling和fc再输出两条支路,一条是目标分类softmax,另一条是bbox回归。截止到现在,两个网络并没有共享参数,只是分开训练了
  3. 再次训练RPN,此时固定网络公共部分的参数,只更新RPN独有部分的参数
  4. 那RPN的结果再次微调Fast-RCNN网络,固定网络公共部分的参数,只更新Fast-RCNN独有部分的参数。

Faster R-CNN 的测试如下:

  1. 通过RPN生成N个anchor
  2. 对这N个anchor进行第一次修正
  3. 对这N个anchor进行处理(超出图像的进行clip,忽略掉太小的框)
  4. 根据前景score进行排序,取前6000个
  5. 使用NMS去重,阈值为0.7
  6. 取剩下的前300个框送入Fast R-CNN

小结

Faster R-CNN提出RPN替代 selective search 进一步提高了目标检测的速度,并和Fast R-CNN共享网络参数,真正实现了端到端训练。


更多细节请参考论文地址
下一篇将介绍集目标检测,语义分割于一体的Mask RCNN

你可能感兴趣的:(Object Detection(三)Faster R-CNN)