目标检测:Faster R-CNN 论文阅读

Faster R-CNN 将所有操作都放入同一个平台下,这一操作也算得上是家族史上的一个里程碑。

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

核心思想

无论是 R-CNN / SPPNet 还是 Fast R-CNN ,他们都是用了启发式的候选区域生成算法,这类区域生成算法有两个缺点:一个是在 CPU 上生成候选区域,跨平台交互有损效率,速度慢;另外一个是使用的都是如纹理、色彩等低层次的特征,生成的候选区域质量不高,以量取胜。

针对区域生成算法,任少卿等人在思考一个问题:既然神经网络那么厉害,为什么不使用神经网络来生成候选区域呢?于是就诞生了 RPNs(Region Proposal Networks)。

把候选区域生成的步骤也塞进了 GPU 中,变成了一个统一的模型,大大提高候选区域的可靠性和预测速度。

流程步骤


Mask R-CNN

一图胜千言,整个网络流程如上图所示。

核心部分

这篇论文核心内容就是 RPNs ,接下来我们就仔细探讨 RPNs

Region Proposal Networks

The RPN is thus a kind of fully convo- lutional network (FCN) [7] and can be trained end-to- end specifically for the task for generating detection proposals.

RPN 本质上是一个 FCN(全卷积网络),FCN 是一个允许 end-to-end 的网络结构,这就允许我们的 RPNs 原始尺寸输入、原始尺寸输出。

卷积神经网络能够提取更高级的特征,抽象的语义特征,可以更好地判断候选区域内是否有物体。于是 RPNs 就承担起了生成候选框,判断 Anchor 内是否有物体然后回归 Anchor 的平移、缩放参数这两个任务。

Anchor

众所周知,一张图片里面有远近、大小、尺度的不同,对于目标检测任务的准确度至关重要,于是我们引入了一个 Anchor 的概念。


Faster R-CNN Scale

我们可以从上图知道现有的三种解决尺度不同的办法:缩放图片、多尺度卷积核以及本文提出的 Anchor 方法。

毋庸置疑,生成多种尺寸的图片势必会增加大量的训练量,训练时间扩展到原来的三倍;多尺寸卷积核势必会增多参数量,从而减缓训练而预测速度。那么前两种方法不可取,只有最后一种本文提出的 Anchor 方法——不增加额外的参数量,在每个滑窗里面采集不同尺寸 Anchor 视野的特征。


RPN Anchor

3x3 卷积为例,我们在卷积神经网络最后一个卷积层输出的 feature maps 进行滑窗,每滑窗一次就在视野中获取 k 个尺寸的特征,在本文中使用了 3 种大小和 3 种纵横比,共 9 种尺寸的 Anchor 。

如上图所示,对于一张卷积过后尺寸为 W x H 的 feature map 而言,里面约有 WHk 个 anchors,我们将这些 anchors 的 256d 特征再分别通过两个 1x1 卷积层,最后分别塞入 softmax 和 Bbox Reg 层。

其中,每个 anchor 视野送入 softmax 层会得到两个分数(概率),分别是「前景的概率」和「背景的概率」;每个 anchor 还会生成 4 个数,代表着 anchor 的「平移」和「缩放」参数。

训练

样本规则

对于 RPN 训练的样本,我们约定「有物体」的为正样本,「没有物体」的为负样本。

  • Anchor 与 Ground Truth 的 IoU 最大的为正样本
  • Anchor 与 Ground Truth 的 IoU 大于 0.7 的为正样本
  • Anchor 与 Ground Truth 的 IoU 小于 0.3 的为负样本
  • 其余样本不参与训练

训练 Loss

这里的使用的 loss 思想沿用 Fast R-CNN ,但基于 Anchor 做一些改动:

$$L(\{p_i\}, \{t_i\}) = \frac{1}{L_{cls}}\sum_{i} L_{cls}(p_i, p_i^{*}) + \lambda \frac{1}{L_{reg}}\sum_{i}p_i^{*}L_{reg}(t_i, t_i^{*})$$

公式中的 $i$ 指的是 mini-batch 中的第 $i$ 个 anchor ,$p_i$ 则是预测是否有物体的概率。我们可以很清楚的看到,当 $p_i^{*} = 0 $ 的时候,即候选框里面没有物体,那么回归那部分的 loss 就变成 0 。

公式中的 $t$ 也是 Bbox 回归,精修 Anchor 组成的 Bbox ,和之前 R-CNN 的 Bbox 回归相似。也就是说,整个 Faster R-CNN 在训练的时候,RPNs 和 ROI Pooling 之后都有 Bbox 回归精修的部分;预测的时候,RPNs 只需要生成区域,在 ROI Pooling 之后会同时对这个区域进行分类和 Bbox 精修回归。

共享

最厉害的其实就是 RPNs 和后面的 ROI Pooling 用的是同一个前驱,共享一个卷积神经网络提取特征,大大地提高了对特征的利用率,这一操作也使得 Faster R-CNN 一举封神。

RPN 和 Fast R-CNN 这两部分是分开训练的,但是他们提取特征那部分都用的是同样的 ImageNet-pre-trained Model ,所以在最后可以共享前面卷积神经网络。

总结 Summary

R-CNN Platform

使用 RPN 生成候选区域网络,生成的候选框更具有针对性,大大减少了冗余没物体候选框的计算。

这一操作,不仅解决了跨平台训练、预测的问题,统一都在 GPU 提高了速度;更重要的是,使用 RPN 生成的候选区域更加具有针对性,回召率更高、更可靠,从而减少了后续冗余的计算,从而加快预测速度。

这是一个超神的操作,我的膝盖毫无保留的献给任少卿等人。

参考资料 Reference

  1. Faster R-CNN “Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks”
  2. 【目标检测】Faster RCNN算法详解