Faster R-CNN
引言
根据以往R-CNN系列的分析,现在影响网络性能的是候选区域提取的部分。比如SS算法,在CPU上处理一张图片大约要2秒。
文中提出了一种算法的改进——使用卷积神经网络来生成候选区域,命名为Region Proposal Networks (RPN)
。RPN共享现有的目标检测网络的卷积层。这种方法既优雅又高效,几乎是 cost-free
的(每张图片在测试时大约10ms)。
使用VGG16作为主干网络,一秒大约处理5帧(张)图片
文中观察到,基于区域的目标检测网络产生的特征图也可以用于生成候选区域。 在这些卷积特征图的基础上,通过增加一些额外的卷积层来构造一个RPN。添加的这些卷积层在特征图的每个位置同时进行区域边界的回归以及是否有对象的打分判定。
RPN是一种全卷积网络(FCN),可以通过端到端的训练,专门用于产生候选区域。
RPN的设计是为了有效地预测具有广泛尺寸和纵横比的候选区域。 与使用图像金字塔或滤波器金字塔的方法不同,文中引入了**“锚框”**的概念,在多个尺度和纵横比下作为参考。
正文
网络分为两个模块:
- RPN
- Fast R-CNN
RPN
RPN将任意大小的图像作为输入,然后输出一组矩形候选框,每个候选框都有一个对象性分数。
为了生成候选框,文中在最后一个共享卷积层输出的卷积特征图后面接一个小型网络。
这个小型网络将特征图上的 n × n 窗口作为输入。 每个滑动窗口都映射到一个低维特征(ZF 为 256-d,VGG 为 512-d,随后是 ReLU 层)。 这个特征被输入到两个全连接层——一个回归层(reg)和一个分类层(cls)。
文中使用 n = 3,注意输入图像上的有效感受野很大(ZF 和 VGG 分别为 171 和 228 像素)。 由于小网络以滑动窗口方式运行,因此全连接层在所有空间位置之间共享。 这种架构自然是用一个 n×n 卷积层和两个同级 1×1 卷积层(分别用于 reg 和 cls)来实现的。
这里的意思是说,用1 x 1 的卷积代替了全连接层
Anchors
在每个滑动窗口的位置,同时预测多个候选区域,其中每个位置的最大的候选框的数量记为k。因此,reg层有4k个输出,cls层输出2k个分数(为每个候选框的有无对象的的概率,其实也可以只输出k个分数)。
k个候选区域是k个锚框(参考框)的参数化表示。锚点以滑动窗口为中心,并与尺度和高宽比相关联。默认情况下,我们使用3个尺度和3个长宽比,在每个滑动位置产生k=9个锚框。对于大小为W×H的特征图,总共有WHk锚点。
锚框是平移不变的。
锚点设计提出了一种解决多尺度(和纵横比)的新方案。基于anchor的方法是建立在anchors金字塔上的,更具成本效益。 文中的方法使用多尺度和纵横比的锚框对边界框进行分类和回归,仅依赖于单一尺度的图像和特征图,并使用单一尺寸的过滤器(特征图上的滑动窗口)
这种基于锚点的多尺度设计,可以简单地使用在单尺度图像上计算的卷积特征,就像 Fast R-CNN 检测器所做的那样。 多尺度锚框的设计是共享特征的关键组成部分。
损失函数
训练RPN时,每个框都会有一个二分类的标签(有待检测的物体,标签为1,没有则为0)。
分类成标签1(正样本)的标准:
- 和真实的边界框的交并比(IoU)最大的那个或者那些
- 和任意真实的边界框交并比大于0.7的那些(如果都小于0.7则条件一就显得很重要,不至于没有样本)
如果和所有真实的边界框的交并比小于0.3,则为负样本。非正非负的锚框直接扔掉。
i i i 是锚框的索引, p i p_i pi是锚框 i i i里面是否有感兴趣对象的预测值。 p i ∗ p_i^* pi∗是真值(如果锚框是正样本,则为1,负样本为0)。 t i t_i ti是预测出现的边界框的参数化表示,是一个4维的向量。 t i ∗ t_i^* ti∗是边界框真实值的参数化表示。
其他细节:
坐标参数化表示的细节:
可以看做是锚框向真实边界框进行回归
也可以看做是平移加缩放的运算
预知后事如何,请看下集