论文题目是《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个可共享的卷积层。
上图是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^{*}