Faster R-CNN = Fast R-CNN + RPN
RPN是一个全卷积网络,可以同时预测每个位置的目标边框和目标得分。RPN通过端到端的训练产生高质量的候选区域,由Fast R-CNN使用进行目标检测。
本文通过共享卷积特征将RPN和Fast R-CNN合并为一个网络——使用 Attention 机制。
RPN(区域候选网络)
该网络与检测网络共享全图像卷积特征,因此实现了几乎无花费的区域候选。这是因为基于区域的检测器使用的卷积特征映射也可以用于生成候选区域,在这些卷积特征上面,本文添加了两个额外的卷积层来组建RPN:
- 一个是将每一个卷积映射位置编码成一个短的(比如256维)特征向量
- 另一个是在每一个卷积映射位置,输出两个结果:
- 输出一个目标分数
- 是输出在那个位置k个不同规模和纵横比的候选区域的回归边界(经典值是k=9)
RPN用任意大小的图片作为输入,输出是一组矩形目标候选,并且每一个都有一个目标得分。为了生成候选区域,本文在最后一个共享卷积层输出的卷积特征映射上滑动一个小的网络。这个网络全连接到输入卷积特征映射的一个 n × n n\times n n×n的空间窗口。
每一个滑动窗口被映射到较低维的向量,这个向量被传入两个兄弟全连接层——一个回归层和一个分类层。因为mini-network是以滑动窗口的方式运行,所以全连接层在所有的空间位置是共享的。这个结构使用 n × n n \times n n×n(本文中中n=3)的卷积层接着两个 1 × 1 1\times 1 1×1的卷积层(一个是回归,一个是分类)实现。ReLUs应用于 n × n n\times n n×n卷积层的输出。
anchor平移不变性
在每个滑动窗口位置,本文同时预测k个候选区域,所以回归层有 4k 个输出来描述 k 个box的坐标,分类层输出 2k 个分值来估计每个候选框中 是目标/不是目标 的可能性。这 k 个候选相对于 k 个参考框被参数化,称为anchor。每一个anchor定位于滑动窗口的中心,并与尺寸和纵横比相关。本文使用3个尺寸和3个纵横比,在每个滑动位置产生 9 个anchor。对于一个 W × H W\times H W×H大小的卷积特征向量,会产生 W × H × K W\times H\times K W×H×K个anchor。关键是anchor和相对于anchor计算proposal的函数具有平移不变性。
候选区域学习的损失函数
为了训练RPN,本文给每一个anchor分配了一个二进制类标签(是目标/不是目标)。其中有两种anchor可以赋值为正标签:
- 与ground-truth box重叠的IoU最大的anchor
- 与任意ground-truth box重叠的IoU高于0.7的anchor
一个ground-truth box 可以为多个anchor分配正标签,并将与所有ground-truth box重叠的IoU低于0.3的非正anchor赋值为负标签。既不是正标签也不是负标签的anchor对训练没有贡献。
//接下来的损失函数比较容易懂
本文中用于回归的特征在特征图上具有相同的空间大小($n\times n $),为了解释不同的anchor大小,学习了 k 个bounding-box 回归器,每一个回归器负责一个尺寸或者一个纵横比,并且 k 个回归器不共享权重。因此,即使特征的大小/尺寸是固定的,仍然可以预测不同大小的box。
优化
RPN通过反向传播和SGD进行端到端的训练。从图像中随机采样256个anchor来计算一个mini-batch的损失函数,其中正样本和负样本的比例为1:1,如果图像中正样本的数量小于128,那么用负样本补充。
候选区域和目标检测共享卷积特征
本文使用一个4步训练算法,通过交替优化来学习共享特征。
-
如上所述训练RPN
该网络使用经过ImageNet预训练的模型进行初始化,并且针对候选区域任务进行端到端的微调。
-
用第一步RPN生成的候选区域,由Fast R-CNN训练一个单独检测网络
这个检测网络也用经过ImageNet预训练的模型进行初始化。
此时这两个网络没有共享卷积层。
-
使用检测网络初始化RPN训练,但是固定住共享卷积层,只微调RPN特有的层
此时两个网络只共享卷积层
-
固定住共享卷积层,只微调Fast R-CNN的全连接层
此时两个网络共享同样的卷积层,形成统一网络