Faster R-CNN算法(论文部分翻译+总结)

论文题目是《Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks》

在Fast R-CNN中,候选区域的选择是用的Selective Search(SS)方法,因此在生成候选区域的这一步上要花费很长时间,几乎和检测时间一样长。本文提出了一种用深度网络生成候选区域的网络RPN,与检测网络的计算相比,使用该网络对候选区域的计算几乎不花费太多时间。


RPN的结构

RPN的输入是一个任意大小的图像,输出是一系列矩形候选区域,并且每个候选区域都有一个objectness score(objectness衡量的是一系列对象类和背景的关系)。为了让RPN与Fast R-CNN目标检测网络共享权值,论文假设两个网络共享一些卷积层。论文研究了ZF模型和VGG模型,在ZF模型中,有5个可共享的卷积层;在VGG模型中,有13个可共享的卷积层。
Faster R-CNN算法(论文部分翻译+总结)_第1张图片
上图是RPN的结构(以ZF为参考模型)。conv feature map是由最后一个可共享的卷积层输出的特征图,其上的sliding window的大小是n × n,属于RPN中的第一个卷积层,它的作用相当于卷积操作中的滑动窗口。这篇论文中n=3,因为在输入图像上的有效感受野是很大的(ZF中是171个像素,VGG中是228个像素)。
整个RPN的结构是
首先是n × n(3×3)的卷积层,其输出用ReLU函数激活;
然后将n × n(3×3)卷积层中每个sliding window映射到一个低维的向量中(ZF是256维,VGG是512维);
最后向量通过两个同级的1×1的卷积层分为两路,再分别馈入到两个全连接层中——回归层(reg)和分类层(cls)。


Anchors

什么是anchor? 在每个sliding window的位置上,同时预测k个候选区域,将这k个候选区域相对于k个参考框(大小已被预设)进行参数化,那么这k个参考框就是anchor。如上图的右边,一个sliding window中有k个大小不同的anchor,它们都是矩形区域。
每个anchor的中心点与sliding window的中心点重合,也就是说,anchor是以sliding window的中心点为基准,有不同的大小的形状。论文中,anchor有3种比例和3种长宽比,因此在每个sliding window中共有9个anchor,即k=9。对于一个大小为W×H的特征图来说,总共有WHk个anchor。
本论文所使用的方法中,anchor具有平移不变性——相对于anchor来计算候选区域的函数和anchor本身,anchor都是平移不变的。


训练RPN

1.损失函数

为了训练RPN,为每个anchor设置一个二分类标记(是一个对象/不是一个对象)。其中,有两种anchor可以被设置成positive第一种,anchor与ground-truth box有最大的IoU;第二种,anchor与任一个ground-truth box的IoU大于0.7。一个ground-truth box可能会把多个anchor设置为positive。当anchor与所有ground-truth box的IoU小于0.3,那么将其设置为nagetive
损失函数定义如下:
在这里插入图片描述
其中,i是一个anchor在一个mini-batch上的索引, p i p_{i} pi是anchor i 是否是一个对象的预测概率。 p ∗ p^{*} p表示anchor是否为positive,当anchor是positive时, p ∗ p^{*} p=1;当anchor是nagetive时, p ∗ p^{*} p=0。 t i t_{i} ti表示预测的边界框的4个坐标经过参数化后的向量, t ∗ t^{*} t表示与positive anchor相关的ground-truth box的坐标。

L c l s L_{cls} Lcls是一个log损失函数,它是基于两个类(是对象/不是对象)的分类损失函数。由 N c l s N_{cls} Ncls进行归一化。

L r e q L_{req} Lreq( t i t_{i} ti, t ∗ t^{*} t) = R( t i t_{i} ti - t ∗ t^{*} t)是回归函数。 p ∗ p^{*} p L r e q L_{req} Lreq表示回归函数只能由positive anchor( p ∗ p^{*} p=1)激活,而当 p ∗ p^{*} p=0时,这一项是没用的。由 N r e q N_{req} Nreq和λ进行归一化。回归后的4个坐标参数化如下:
在这里插入图片描述
下标x,y代表box中心点的两个坐标,下标w代表深度,下标h代表高度。变量 x x x表示预测的box, x a x_{a} xa表示anchor box, x ∗ x^{*} x表示ground-truth box。这可以看成是边界框从一个anchor box回归到一个邻近的ground-truth box。

2.训练过程的优化

论文中遵循Fast R-CNN中的“image-centric”采样策略来训练网络。每个mini-batch由包含了许多positive和negative anchor的图像产生。优化所有anchor的损失函数虽然是可行的,但由于负样本占了大多数,因此在优化时会更偏向负样本。论文采用的方法是,随机从一个图像中采样256个anchor来计算一个mini-batch的损失函数,在采样时,positive anchor和negative anchor的比例为1:1。如果一个图像中的正样本少于128,那么就用负样本填充这个mini-batch。
训练时,通过从零均值高斯分布(标准差为0.01)中抽取权重来随机初始化一个新的层,所有其它的层(比如共享的层)通过为ImageNet分类预训练一个模型来初始化。对于ZF网络,对所有层进行调整,对VGG网络,调整从conv 3_1开始的层,然后保存在内存中。在PASCAL数据集上,mini-batch大小为60000时,学习率为0.001;mini-batch大小为20000时,学习率为0.0001。使用的动量为0.9,权重衰减为0.0005。

3.RPN和Fast R-CNN实现共享权值

可以简单地将RPN和Fast R-CNN整合到一个单一网络中来实现权值共享吗?答案是否定的。因为Fast R-CNN的训练依赖于固定的候选区域,并且也不清楚在训练Fast R-CNN的同时改变候选机制,Fast R-CNN能否收敛。
论文提出一种算法通过交替优化来实现权值共享,有四个步骤:
1.用之前提到的方法训练RPN。RPN网络由一个预训练的ImageNet来初始化,并且经过了端到端的微调来生成候选区域。
2.将RPN生成的候选区域给Fast R-CNN,训练一个单独的检测网络。这个检测网络也由一个预训练的ImageNet来初始化。
3.用这个检测网络来初始化RPN,但是固定共享的卷积层不变,只对RPN的那几层微调。
4.保持共享的卷积层不变,用RPN的参数对Fast R-CNN的全连接层进行微调。

4.训练过程中的一些细节

anchor box的大小
在训练时,anchor box有三种面积大小 12 8 2 128^{2} 1282 25 6 2 256^{2} 2562 51 2 2 512^{2} 5122三种长宽比:1:1,1:2,2:1。当预测较大的候选区域时,允许anchor box的范围大于既定的感受野。这种预测之所以能够实现,是因为如果一个对象只有中间部分可见,依然能粗略的推断出对象的范围。通过这种设计,在预测较大的候选区域时不需要多尺度特征和多尺度sliding window,从而节省了运行时间。

过界anchor的处理
在训练时,忽略那些超过图像边界的anchor,因此这些anchor不会对损失函数造成影响。相反,如果没有忽略这些anchor,会在检测结果中引入较大且难以校正的误差项,并且训练不会收敛。但是在训练时,依然将RPN应用于整个图像,这可能会产生超过图像边界的候选框,解决方法是将它们裁剪到图像边界。

处理重叠的候选区域
RPN生成的一些候选区域可能会互相重叠,解决方法是用non- maximum suppression (NMS)。将NMS的IoU阈值固定为0.7,这使每个图像大约有2k个候选区域。 NMS并不会损害最终的检测精度,但是会大大减少候选区域的数量。 在NMS之后,选择排名前N位的候选区域进行检测。

你可能感兴趣的:(目标检测)