Faster R-CNN 之再阅读

Faster R-CNN: Towards Real-Time Object 
Detection with Region Proposal Networks

开源代码 
https://github.com/ShaoqingRen/faster_rcnn MATLAB 
https://github.com/rbgirshick/py-faster-rcnn Python


Faster R-CNN 是在 Fast R-CNN的基础改进的。Fast R-CNN 主要存在的问题就是 region proposal step 是在CPU跑的,比较耗时。CNN通过GPU加速,那么region proposal step能否也可以通过GPU来加速。

Faster R-CNN 通过提出 Region Proposal Networks (RPNs) 实现了快速提取region proposal 。 RPNs 被设计成有效预测候选区域,在一个比较大的尺度和宽高比范围内。 
针对尺度问题,我们采用多个尺度的reference boxes
 
这里写图片描述

3 Faster R-CNN 包括两个部分:1)RPNs,深度全卷积网络用于提取候选区域,2) Fast R-CNN 检测器用于物体检测。 
the RPNs module tells the Fast R-CNN module where to look 
这里写图片描述

3.1 Region Proposal Networks

RPN 将一幅任意尺寸图像作为输入,输出若干矩形框,每个矩形框有一个 objectness score。为了与Fast R-CNN检测网络共享计算,我们对RPN使用卷积网络, we assume that both nets share a common set of convolutional layers。在我们的实验中, Zeiler and Fergus model(ZF)有5个 shareable convolutional layers,VGG-16 有13个 shareable convolutional layers。

为了生成候选区域,我们在卷积特征层(最后一个共享卷积层的输出)上滑动一个小的网络。这个小的网络将卷积特征层的 n*n领域窗口作为输入,将其映射到一个低维的特征(256-d for ZF and 512-d for VGG, with ReLU [33]following),然后将这个特征输入给两个 sibling 全链接层:a box-regression layer (reg) and a box-classification layer (cls)。这里我们使用 n=3,对应输入图像的尺寸是 171 and 228 pixels for ZF and VGG, respectively。因为对于所有的位置,全链接层是共享的,所以架构可以如下实现:n*n卷积层,接着是两个 sibling 1*1卷积层。

这里写图片描述

3.1.1 Anchors 
对于每个小网络的滑动窗口位置,我们同时预测k个矩形区域,对应不同尺度和宽高比。本文采用3个尺度,3个宽高比,所以每个位置我们检测3*3=9个矩形区域,每个区域计算其是否含有 object( a two-class softmax layer,这是二分类,也可以进行K分类)

Translation-Invariant Anchors 
我们这个方法一个很重要的特征就是平移不变性,就是对于同一个object,在图像不同位置出现,同样的 anchors and the functions 可以提出该 object。MultiBox 方法则没有这个特征。 
平移不变性也降低了模型的大小。

Multi-Scale Anchors as Regression References 
多个不同尺度的Anchors 可以很好(速度快)的解决 object 尺度问题。以前解决尺度问题的计算量比较大。

3.1.2 Loss Function 
在训练 RPNs时,我们对每个 anchor 赋予一个二类标记(是不是 object)。对于以下两类 anchor,我们赋予正标记:1)最大IoU 的anchor,2)IoU 超过0.7的 anchor。对所有 ground-truth boxes 的IoU 都小于0.3的anchor 标记为负值。 既不是正值,也不是负值的anchor 对训练函数没有贡献。

我们的损失函数定义如下:

这里写图片描述

3.1.3 Training RPNs 
RPN的训练采用 back-propagation and stochastic gradient descent (SGD), 采用文献【2】中的 “image-centric”的采样策略。

3.2 Sharing Features for RPN and Fast R-CNN 
怎么共享RPN and Fast R-CNN 的卷积层,文中讨论了三种方式: 
1)Alternating training 交替训练,先训练RPN,然后用RPN得到的候选区域训练Fast R-CNN,得到的Fast R-CNN用于初始化RPN,这样交替训练,本文所有的实验都是采用这种方式。 
2) Approximate joint training 
这里我们将两个网络融合成一个网络训练,如图2所示。在每个SGD迭代步骤中,前向计算产生候选区域,然后假定这些候选区域固定,用于训练Fast R-CNN。后向传播计算像以前一样,对于共享网络,两个网络的损失被结合起来候选误差传播 。这种方式实现比较简单,但是它忽略了 the derivative w.r.t. the proposal boxes’ coordinates that are also network responses,所以它是近似的,与交替训练相比,该方式的训练时间减少 25-50%。在Python 代码中我们给出了这种方法的实现。

(iii) Non-approximate joint training 
这种方法主要是将上个方法忽略的矩形框的梯度问题考虑进来。所以是非近似的。本文没有实现改方法。

4-Step Alternating Training 
1):使用 ImageNet-pre-trained 模型初始化网络,然后训练RPN 
2):使用1)产生的候选区域,训练一个单独的 Fast R-CNN检测网络,该 
网络也是使用 ImageNet-pre-trained模型初始化的。 
3):使用检测网络初始化RPN训练,固定共享卷积层,只微调与RPN特有 
的网络层,这样两个网络就共享了卷积层 
4):固定共享卷积层,微调Fast R-CNN特有网络层 
可以做更多的交替训练,但是没有提升效果。

实验结果: 
这里写图片描述

这里写图片描述

0
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值