Abstract

本作将引入一个区域推荐网络(RPN, Region Proposal Networks)和检测网络共享全图像卷积特征,使得区域推荐的开销几近为0。RPN是一个全卷积网络,能预测物体的边框,同时也能对该位置进行物体打分。RPN通过端到端的训练可以产生高质量的推荐区域,然后再用Fast R-CNN进行检测。通过共享卷积特征,我们进一步将RPN和Fast R-CNN整合到一个网络,用近期流行的“术语”说,就是一种“注意力”机制。RPN组件会告诉整合网络去看哪个部分。

1. Introduction

Fast R-CNN在使用极深的网络时获得了近实时的处理效率(忽略花在region proposal时间)。在目前最新的检测系统中,proposal成为了测试时的计算瓶颈。

我们介绍最新的RPN来与最新物体检测网络共享卷积层。通过在测试时共享卷积,计算proposal的边际成本极低(10ms/image)。

我们发现基于region的检测器(如FRCN)所使用的卷积特征图同样能用于生成region proposal。基于这些卷积特征,我们通过增加少量额外卷积层构建了一个RPN,同时对每个规则网格的位置进行region边框回归和对象评分。因为RPN是一种全连接卷积网络(FCN),故能端到端地训练,特别是用于生成detection proposals。

RPN被设计在大范围的尺度和长宽比上高效地预测region proposal。与流行的方法图片金字塔(pyramids of images)或过滤器金字塔(pyramids of filters)相反,我们提出了一个新的anchor框,用作不同尺度和长宽比的参考。可以把我们的方法想象为回归参考金字塔(pyramid of regression references),避免了穷举各种尺度和宽高比的图像或过滤器。这一模型在用单尺度图片训练和测试时表现较好,提供了更快的运行速度。

pyramid

为了统一RPN和FRCN目标检测网络,我们提出了一种训练方案,即在 (1)为region proposal任务微调 和(2)为目标检测任务微调 轮流训练,同时保持proposal固定。这一方法收敛迅速并产生一个在两个任务间共享卷积特征的网络。

3. Faster R-CNN

Faster R-CNN是由两个模块组成的。第一个是生成proposal region的深度全卷积网络RPN,第二个是FRCN使用region进行检测,整个系统是一个统一的网络。使用近期流行的神经网络术语“注意力attention”机制,RPN模块告知FRCN模块往哪儿看,图2。

rpn

3.1 Region Proposal Networks

RPN接收一张任意尺寸的图片作为输入,输出一系列矩型目标proposal的集合,每个proposal都有一系列物体类别及背景的得分,我们用一个全卷积网络建模此过程。由于我们最终目标是与FRCN物体检测网络共享特征,我们假定两个网络共享了一个公共卷积层集。在我们的实验中,我们调研了有5个可共享的卷积层的模型ZF和有13个可共享的卷积层的VGG-16。

我们在最后一个共享卷积层生成的卷积特征图上滑动一个小网络来生成region proposal。这个小网络接收来自特征图的$n\times n$的空间窗口作为输入。每个滑动窗口都映射到一个低维特征(对ZF是256维,VGG是512维,后跟一个ReLU)。这个特征提供给双全连接层,分别进行限位框回归(box regression, reg)和限位框分类(box classification, cls)。本论文中,我们使用n = 3,注意在输入图片上的有效感受野(receptive field)很大(ZF和VGG分别是171和228像素)。图3左只画了一个位置表示这种mini-network。注意由于这个mini-network以滑动窗口的方式操作,所以两个全连接层在所有空间位置都得到了共享,这种结构自然以$n\times n$卷积层后跟两个$1\times 1$卷积层(分别用于reg和cls)的方式执行。

感受野:在CNN中,第n层特征图中一个像素,对应输入图像的像素数量,即为该层的Receptive Field,简称RF。

文中的感受野怎么计算的?为什么不是平方数?

anchors

3.1.1 Anchors

在每个滑动窗口的位置,我们同时预测多个proposal,将每个位置可能的proposal最大数量记做k。那么reg层就有4k个输出,编码k个框坐标。cls层输出2k个得分,为每个proposal估计是否为物体对象,(出于简单我们将cls层实现为二分类softmax层)。k个proposal是相对于k个参考框参数化的,我们称为k个anchor。每个anchor均位于所在滑动窗口中心,有自己的尺寸和长宽比。默认我们使用3个尺寸和3个长宽比,即每个滑动窗口位置有9个anchor。对于尺寸为$W\times H$(通常约为2400)的feature map,共有$WHk$个anchor。

Translation-Invariant Anchors

就anchor和基于anchor计算proposal的方法而言,我们方法的一个重要特性是平移不变性。如果平移图片中一个物体,proposal也会平移,我们的方法也能在那个位置预测proposal。 平移不变性也降低了模型大小。MultiBox有一个$(4+1)×800$维的全连接层,而我们的方法是一个$(4+2)×9$维的卷积输出层($k=9$的情况)。

Multi-Scale Anchors as Regression References

我们的anchor设计提出了一种解决多尺度和多长宽比的新方案。过去曾有两种常用的多scale预测方法。第一种基于图片/特征金字塔,如在DPM和基于CNN的方法。图片被缩放到多个scale,并对每个scale计算feature map,这一方法通常有用但过于耗时。第二种方法是使用多个尺度(和/或长宽比)的滑动窗口,参考DPM中,有不同长宽比的模型分别用不同过滤器大小训练(如$5\times 7$和$7\times 5$),如果这用在定位多scale,可以想象成过滤器金字塔。第二种方式常常与第一种同时使用。 与其相比,我们的基于anchor的方法建立在anchor金字塔上,是一种更高效的方法。我们的方法依据不同尺寸和长宽比的anchor框进行分类和回归。它只依赖单尺度图片或单尺度特征图,同样只使用了单个大小的filter(在特征图上滑动)。

3.1.2 Loss Function

为了训练RPN,我们为每个anchor赋值一个二元标签(是否为一个物体)。我们有两种方案为anchor赋予正标签:(1)与一个gt框有着最高的IoU的anchor,(2)与任一gt框IoU大于0.7的anchor。注意一个gt框可能会为多个anchor赋予正标签。通常(2)足够决定正样本,但我们仍采用(1)的原因是,在某些少见的场景下(2)无法找到正样本。我们把与所有gt框IoU都小于0.3的anchor标作负样本。对于训练目标没有帮助的anchor既不为正也不为负。

有了这些定义,我们按照FRCN的多任务loss来进行优化目标函数,对一张图片loss函数定义如下:

$$ L\left(\left\{p_{i}\right\},\left\{t_{i}\right\}\right)=\frac{1}{N_{c l s}} \sum_{i} L_{c l s}\left(p_{i}, p_{i}^{\star}\right)+\lambda \frac{1}{N_{r e g}} \sum_{i} p_{i}^{\star} L_{r e g}\left(t_{i}, t_{i}^{\star}\right) \tag{1} $$

这里i是mini-batch中anchor的索引,$p_{i}$是anckor i是否为物体的预测概率。$p_{i}^{\star}$指anchor i对应的gt标签,如为正样本则等于1,否则等于0。$t_{i}$是代表预测框相对于anchor的4个参数化坐标的向量,$t_{i}^{\star}$是gt框相对于anchor的4个参数化坐标的向量(anchor为正)。分类loss $L_{cls}$是二分类log loss(是否为物体)。对于回归loss,我们使用$L_{reg}(t_{i},t_{i}^{\star}) = R(t_{i}-t_{i}^{\star})$,其中R是Fast R-CNN中定义的robust loss函数(smoothL1)。$p_i^{\star}L_{reg}$代表只对正样本anchor激活($p_{i}^{\star}=1$)的回归loss。cls和reg层的输出分别由$\{p_i}$和$\{t_i}$组成。

两项loss分别用$N_{cls}$和$N_{reg}$归一化,并用参数λ进行平衡。在我们当前的实现中(已公布的代码),公式中的第一项由mini-batch大小($N_{cls}=256$)归一化,reg项由anchor坐标数量归一化($N_{reg}∼2400)。默认我们设置λ=10,因此两项权重近似相等。我们通过实验发现结果对λ的值在很大范围内不敏感。我们也注意到上面提到的归一化是不需要的,可以被简化。

对于限位框回归,我们按照RCNN的方法对四个坐标参数化:

$$ \begin{aligned} t_{x}=\left(x-x_{a}\right) / w_{a}, t_{y}=\left(y-y_{a}\right) / h_{a} \\ t_{w}=\log \left(w / w_{a}\right), t_{h}=\log \left(h / h_{a}\right) \\ t_{x}^{\star}=\left(x^{\star}-x_{a}\right) / w_{a}, t_{y}^{\star}=\left(y^{\star}-y_{a}\right) / h_{a} \\ t_{w}^{\star}=\log \left(w^{\star} / w_{a}\right), t_{h}^{\star}=\log \left(h^{\star} / h_{a}\right) \end{aligned} \tag{2} $$

其中x,y,w,h表示框的中心坐标和宽高。变量$x$,$x_{a}$,$x^{\star}$分别表示预测框,锚点框和gt框(y,w,h类似)。这可以想象为从一个锚点框向一个附近的gt框进行回归。

在我们的限位框回归中,用于回归的特征在feature map上都有同样的空间大小($3\times 3$)。为了处理不同的大小,一共会训练k个限位框回归器。每个都负责特定的尺寸和宽高比,它们之间不会共享。anchor的这种设计使预测不同大小的box成为可能,即使特征是某种特定的大小或长宽比。

3.1.3 Training RPNs

RPN能通过反向传播和SGD端到端地训练。我们按照FRCN的”image-centric”抽样方法来训练网络。每个mini-batch都来自一张图片,其中包含了很多正负样本锚点。可以为一张图的所有锚点优化loss函数,但这会偏向负样本,因为它们数量更多。我们只为图中随机抽样的256个锚点计算loss,抽样正负比为1:1。如果正样本少于128个则用负样本填充。

我们用均值为0,标准差为0.01的高斯分布初始化所有新层的权重。所有其它层(如共享的卷积层)使用预训练的ImageNet分类模型初始化。对于ZFnet我们微调所有层,对VGGnet微调conv3_1及以上的层。在PASCAL VOC上,前60k次迭代学习率为0.001,后20k为0.0001。动量为0.9,decay为0.0005。

3.2 Sharing Features for RPN and Fast R-CNN

接下来我们会介绍如何训练一个由RPN和FRCN组成的,共享了卷积层的网络的算法。

分别训练RPN和FRCN的话,它们都会用不同的方式修改卷积层。因此我们需要开发一个技术使它们共享卷积层,而不是独立地训练两个网络。我们讨论了三种方法:

  1. Alternating training 交替训练 我们先训练RPN,再用proposal训练FRCN。被FRCN微调后的网络用于初始化,再继续这个过程。这是本论文所有实验所用方法。
  2. Approximate joint training 近似联合训练 这一方案中,RPN和FRCN在训练中像图2一样合并为一个网络。在每个SGD迭代中,前向传播产生的proposal被当做固定的、预计算好的,像训练FRCN时一样。反向传播也像通常一样,不过共享层会触发两个loss并将其结合。这一方案实现很容易。但它忽略了限位框坐标的偏导。我们的实验经验是这一方法有相近的成绩,但与交替训练比训练时间缩短25~50%。
  3. Non-approximate joint training 如之前讨论,RPN预测的限位框也是输入的函数。FRCN中的RoI池化层接收卷积特征和预测框作为输入。因此理论上正确的反向传播solver应该涉及限位框坐标的梯度。在本方法中,我们需要一个对限位框坐标可微的RoI池化层。这不是个简单的问题,可以通过[15]那样通过”RoI warping”层解决。

4-Step Alternating Training. 本论文中,我们采用一个实用的四步训练算法通过交替训练学习共享特征。 1. 我们按3.1.3描述的那样训练RPN。网络初始化自ImageNet预训练的模型,为region proposal任务进行端对端的微调。 2. 我们用步骤1的RPN产生的proposal训练一个单独的FRCN检测网络,这个检测网络也初始化自ImageNet预训练模型。在这时两个网络还没有共享卷积层。 3. 我们使用检测网络来初始化RPN,但我们固定共享卷积层,只对RPN独有的层微调。现在两个网络共享卷积层了。 4. 固定共享卷积层,为FRCN独有的层微调。可以训练更多次,但我们只观察到微不足道的提升。

3.3 Implementation Details

我们在单尺度图片上训练和测试region proposal和object detection两个网络,缩放图片使其短边长度为600像素。缩放后ZF和VGG的最后一个卷积层的总步长均为16像素,即PASCAL原图(500*375)上的10像素。尽管这种大步长提供了很好的结果,更小的步长可能会更好。

16像素和10像素的计算方法?

对于锚点框,我们使用3种尺度,面积分别为$128^2$,$256^2$,$512^2$像素,3种长宽比1:1,1:2,2:1。这些超参数不是为特定数据集选取的,后面我们提供了消融测试(ablation experiments),验证其效果。图3右显示了我们的方法所能兼容的大范围的尺度和长宽比。表1显示了使用ZFnet所学习到的每个锚点proposal平均大小。我们注意到我们的算法允许预测大于感受野,这些预测是不可能实现的————如果只有物体的中间是可见的,人们也能粗略推断出物体的范围。

anchor-size

超出图片边界的anchor box要小心处理,在训练中,我们忽略了所有超过边界的anchor所以它们不会影响loss,对于典型的1000x6000的图片,大概共有20000个anchor(60x40x9),忽略跨边界的anchor后剩余大概6000个anchor用于训练,如果不忽略这些超过边界的anchor,那么它们会带来很大并且难以校正的误差,训练不会收敛。在测试中,我们会对整个图片进行全卷积RPN。产生的跨界proposal,我们会在图片边缘裁减掉。

有些RPN proposal之间高度重叠。为了减少冗余,我们对proposal region基于其分类得分采用非极大值抑制(NMS)。用于NMS的IoU阈值为0.7,留给我们每张图片约2000个proposal。NMS不会影响精度,但显著地减少了proposal数量。NMS后,我们选择top-N proposal用于检测。训练时,我们用2000个region训练FRCN,但测试时数量不一样。

4. Experiments

个人笔记

structure

$$ vgg16=((conv+relu)\times 2+pool)\times 2+((conv+relu)\times 3+pool)\times 2+((conv+relu)\times 3 $$