Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
论文:https://arxiv.org/abs/1506.01497
代码:Faster R-CNN、other
作者引入了一个区域提议网络(RPN),RPN 进行端到端训练以生成高质量的区域提议,Fast R-CNN 使用这些区域提议进行检测。通过共享 RPN 和 Fast R-CNN 的卷积特征,进一步将RPN和Fast R-CNN 合并 成一个单独的网络。
架构

look上图,图像经过卷积层得到特征图。为了生成区域提议(Region Proposal),在特征图上滑动一个小网络(RPN),这个小网络的输入为特征图的 n × n 窗口。每个滑动窗口映射到一个低维特征。特征被输入到两个同级的全连接的层(box 回归层和 box 分类层)。在本文中,我们使用窗口大小 n = 3,注意到输入图像上的有效感受野很大。这个小网络在下图(左)的一个位置上进行了说明。请注意,由于小网络以滑动窗口方式运行,全连接层在所有空间位置上共享。这个体系结构自然是通过 n×n 卷积层和两个同级的 1× 1 卷积层(分别用于回归和分类)来实现的。
锚
锚位于滑动窗口的中心,每个锚同时预测 k 个(3个尺度和3个比例,k = 9)区域提议,对于大小为W × H的特征图,总共有WHk个锚点(特征图中每个像素对应一个锚点,因此有WHk个) 。因此,回归层有4k(回归有4个参数)输出,编码k个边框的坐标,分类层对每个提议输出2k(前景和背景)个估计目标概率的分数。
平移不变的锚 。这个方法一个重要性质是,它是共享参数,因此平移不变,减少了模型的规模。
多尺度锚作为回归参考
基于锚的方法是建立在一个锚金字塔(比例不变)上,这是更经济的。我们的方法分类和回归边界框参考锚框多尺度和比例。它只依赖于单一比例的图像和特征图,并使用单一尺寸的滤波器。我们通过实验展示了该方案对多个尺度和比例的处理效果(见下表)。
由于这种基于锚的多尺度设计,我们可以简单地使用在单尺度图像上计算的卷积特征,正如Fast R-CNN检测器所做的那样。多尺度锚的设计是共享特性而不需要额外的尺度寻址成本的关键组件。
损失函数
训练 RPN ,给每个锚分配一个二进制类标签(是否为目标)。我们为两种锚分配了一个正标签:
- 锚与 ground-truth box 有最高的IoU
- 锚与 ground-truth box 有大于0.7的IoU
请注意,一个ground-truth 框可以为多个锚分配阳性标签。通常第二个条件足以确定阳性样本;但我们仍然采用第一种条件,因为在某些罕见的情况下,第二种条件可能找不到阳性样本。如果一个非正锚的IoU比在所有的ground-truth box中低于0.3,我们就给它分配一个负标签。既不正也不负的锚点对训练目标没有贡献。
利用这些定义,我们最小化了Fast R-CNN中多任务损失后的目标函数。我们对图像的损失函数定义为:
L ( { p i } , { t i } ) = 1 N c l a s s ∑ i L c l a s s ( p i , p i ∗ ) + λ 1 N r e g r e s s ∑ i p i ∗ L r e g r e s s ( t i , t i ∗ ) L(\{p_i\},\{t_i\}) =\frac{1}{N_{class}} \sum_i L_{class}(p_i, p^∗_i) + λ \frac{1}{N_{regress}} \sum_i p^∗_i L_{regress}(t_i,t^∗_i) L({
pi},{
ti})=Nclass1i∑Lclass(pi,pi∗)+λNregress1i∑pi∗Lregress(ti,ti∗)
分类损失