【论文笔记】Faster R-CNN

【概要】
Faster R-CNN 通过Region proposal Network和检测网络共享图像特征,以较小的耗费生成候选区域,RPN可以端到端的生成高质量的候选区域供Fast R-CNN使用,

【引入】
RCNN提出基于region-based的方法后驱动了目标检测的发展,其计算代价大的缺点也在SPP net 和Fast RCNN中通过共享卷积结果得到了改善。Fast R-CNN如果忽略花在region proposal上的时间,即使在很深的网络上也几乎可以达到实时预测。

目前,候选区域生成成为了测试阶段计算速度上的瓶颈。

候选区域提议的方案通常依赖计算不太昂贵的特征和较为经济的推理规模。例如ss,基于低维特征以贪心的方式合并超像素,是一种比较流行的候选区域提议方案。但是与Fast RCNN高效的检测网络推理过程相比,ss可算是非常慢了,在cpu上处理一张图需要2s。EdgeBoxes在权衡速度和质量的情况下,能够达到每张图仅需0.2s。但是,候选区域生成步骤依然在目标检测网络中消耗了太多的运行时间。

目前的候选区域生成方案都拖累了检测网络的速度

fast rcnn还有一个问题是,网络部分利用了GPU,但是候选区域生成部分却是用CPU,运行时间的对比是不平衡的。一个很明显的加速候选区域生成的方案是这个步骤使用GPU来做。但是这样会忽略下游检测网络,就没有办法分享特征计算了。(为啥?)

可能解决方案的弊端

本文提出了一种用卷积网络生成候选区域的方法,可复用检测网络已有的卷积特征计算,我们称之为RPNs。这种方法生成候选区域的计算代价非常小。

本文提出的解决方案

RPN本质是接在卷积特征后面的FCN,可以同步回归边框和每个网格在每个位置的目标分数。RPN设计用不同的scale和ratio预测region proposals。与overfeat,SPP,Fast RCNN使用图片金字塔或卷积核金字塔不同,我们引入anchor的概念来处理不同尺寸和比例。这种方法类似于在回归引用时进行金字塔处理,而不是对图片或者卷积核。本方法在训练和测试阶段,使用单尺寸图片的表现不错,并且运行速度也从该处理中受益。

解释下RPN生成候选区域的思路

训练时,我们通过先fine-tuning RPN任务然后固定proposals微调检测部分来融合RPN和Fast RCNN。
该方法在PASCAL VOC detection benchmarks测试阶段accuracy比ss好,计算负担也比它少。
代码地址:https://github.com/ rbgirshick/py-faster-rcnn
在ILSVRC and COCO 2015本方法在 ImageNet detection, Ima- geNet localization, COCO detection, and COCO seg- mentation上拿了几个第一。
RPN完全是从数据中学习生成候选区域,所以能从越深的网络,表达力越强的特征中受益更多。
这些说明本文的方法不仅在计算代价上是经济的,并且也能有效提高目标检测的精确度。

其他

【相关工作】

【网络相关】


image.png

Faster RCNN = RPN + Fast RCNN
RPN的作用是生成proposals以供Fast RCNN使用。

RPN
RPN的输入是图片特征,输出是一组矩形框,每一个都带有分数。和Fast RCNN的网络共享卷积特征。在最后一层共享的卷积特征上,使用n*n的滑动窗口在feature map的每一格滑动。feature map的特征将进入两条分支,一个边界框回归卷积层(reg),一个分类卷积层(cls)。本文n=3。

image.png

以下部分没太理解:

Note that be- cause the mini-network operates in a sliding-window fashion, the fully-connected layers are shared across all spatial locations. This architecture is naturally im- plemented with an n×n convolutional layer followed by two sibling 1 × 1 convolutional layers (for reg and cls, respectively).

可能就是说滑动窗口采集的nn窗口后,后面接的网络结构就是这个nn大小的卷积层,跟了两个1*1的卷积层(reg & cls)。

Anchor
每个滑动窗口都会预测出k个矩形框。所以reg的预测出的值为4k个。cls则是2k个(是目标/不是目标)。这k个对应的框即anchors。anchor的中心和滑动窗口中心重叠,对应一个scale和ratio。默认3个scale3个ratio,即k=9。

anchor具有平移不变形:当图片中的目标物体平移时,我们的方法也可以预测出相同位置的proposal,但是使用k-means生成anchor的multibox方法则不具备该能力。我们的网络结构也只有(4+2) * 9-demension的参数量。远比multibox网络的参数量小的多。

anchor的多尺度:通常多尺度有两种方法:1.图像金字塔,用缩放成不同尺寸的图片提取特征(耗时)2.对特征图使用不同尺寸的卷积核 本方法使用anchor金字塔,图片,特征和卷积核都是单尺寸的。anchor多尺寸的设计是无需额外代价分享检测网络所用特征的关键。

loss 设计
RPN阶段,每个anchor有一个二分类的标签。
正样本的可以有两种定义:1.与gt IoU最高的anchor 2.与任意gt IoU大于0.7的anchor。(一个gt可能会分配多个anchor正样本。)我们选取了第一种因为在某些情况中2可能无法找到正样本。
负样本的定义是:与任何gt IoU都小于0.3则认为是负样本。
其他的样本既非正样本也非负样本,对后续训练无贡献。
loss和fast rcnn部分的loss一致,是一个multi-task loss,由分类loss和边界框回归loss组成。

image.png

k个anchor对应k个边界框回归器,不同的回归器不共享权重。因为特征是固定的大小,所以即使预测的box是各种形状的也可以支持。

RPN训练
每一个mini-batch都来自一张图,包含了很多的正负样本。如果全部用来计算loss的话,会存在负样本过多的问题,所以我们从一个mini-batch中随机周去256个anchor,正负比例为一比一。如果正样本少于128个,就用负样本补充。
新的卷积层的权重初始化:a zero-mean Gaussian distribution with standard deviation 0.01
共享特征的卷基层的权重用ImageNet预训练的分类模型来初始化。
学习率:前60k步0.001,后20k步0.0001
训练数据:PASCAL VOC dataset
学习率变更策略:a momentum of 0.9 and a weight decay of 0.0005

RPN与Fast RCNN的共享特征
RPN部分的网络和Fast RCNN的网络在训练时是分开的,所以需要想一个策略来共享这两个网络之间的卷积层,而不是各训各的。

本文采取的训练方式为:

  1. 按照RPN训练描述的步骤训练RPN
  2. 使用1生成的proposals单独训练Fast RCNN,目前为止这两部分还未共享卷积层
  3. 使用检测网络初始化RPN训练,但是冻结共享卷积层,近fine tune RPN部分的网络 (意思是用Fast RCNN的backbone的权重初始化RPN backbone的权重吧,仅初始化相同结构网络的权重我理解是),此时两部分开始共享backbone
    4.冻结backbone权重,fine-tune Fast RCNN部分的网络

此外,还有交替训练(先训练RPN,然后使用proposals训练Fast RCNN。在用Fast RCNN调好的网络初始化RPN,反复以上过程) 疑问:用Fast RCNN的哪部分去初始化RPN的哪部分?
近似联合训练:前向传播时把proposals看做是固定的提前计算的框,反向传播时信号来自RPN和Fast RCNN共同的loss,但是这个方案忽略了proposals w.r.t的导数,所以是近似的训练。这样训练效果还可以,但是减少了25%-50%的训练时间。
非近似联合训练:提出了RoI warping的概念(J. Dai, K. He, and J. Sun, “Instance-aware semantic segmenta- tion via multi-task network cascades,” arXiv:1512.04412, 2015.)

【实验】

【总结】

你可能感兴趣的:(【论文笔记】Faster R-CNN)