2.6 Fast R-CNN

為{幸葍}努か 提交于 2019-11-28 14:07:08

2.6 Fast R-CNN

Fast R-CNN 是 rgb 完成的 R-CNN 家族中的第二篇重要作品,在 R-CNN 以及 SPPNet 的基础上做了许多优化工作,在识别精度以及性能上均有较大提升。

2.6.1、Fast R-CNN 整体架构概览图

Fast R-CNN 的整体检测流程为:首先利用 CNN 网络在输入图像上进行特征提取,生成特征图,然后将区域候选框映射到特征图中,并经过 RoI 池化层,将任意大小的候选区域映射到一个固定大小的输出空间中,并接入全连接层。

在网络的顶层,我们接入两个同级输出层,实现分类与目标检测框的回归问题,具体流程如图 1、2 所示。
【图 1】
【图 2】

2.6.2、Fast R-CNN 架构

Fast R-CNN 是基于 R-CNN 及 SPP-Net 发展而来,因此其设计初衷就是为了改进现有模型中存在的一些缺陷,以寻求更高的精度及性能,因此我们需要首先分析 R-CNN 及 SPP-Net 存在的不足之处。

在 SPP-Net 章节,我们曾提到过 R-CNN 的劣势,现在我们再次分析综合分析其劣势,主要表现在:(1)训练过程是多阶段的,卷积网络生成的候选区域与图片分类以及检测框回归是通过三个阶段实现的,因此对于每个候选框的特征抽取需要存储于磁盘空间中,因此(2)训练阶段在空间上的开销非常大,加之 R-CNN 为每个目标候选框进行卷积特征抽取是不共享计算的,因此(3)R-CNN 的检测速度很慢。

尽管 SPP-Net 在 R-CNN 的基础上共享卷积计算,即先在原始图像上进行特征抽取,然后将候选框映射到特征图中进行 RoI 截取,其架构上仍然是多阶段的。另外在 SPP-Net 中提出的微调算法不能更新空间金字塔之前的卷积层,这几乎限制了深层网络的精度。

如图 1 及 图 2 所示,Fast R-CNN 最大的改进在于架构是单阶段的,使用的是多任务损失架构,利用反向传播算法可以实现端到端的训练,这不仅解决了多阶段训练不连贯以及空间存储问题,而且可以实现全网络层的更新。

2.6.2.1 RoI 池化层

RoI(region of interest)即候选区域,RoI 池化层使用最大池化将任何有效的 RoI 内的特征转换成具有 H×WH\times W(例如,7×77 \times 7)的固定空间范围的小特征图,其中 HHWW 是层的超参数,其独立于任何特定的 RoI。RoI 最大池化通过将大小为 h×wh \times w 的 RoI 窗口分割成 H×WH\times W 个网格,子窗口大小约为 h/H×w/Wh/H \times w/W,然后对每个子窗口执行最大池化,并将输出合并到相应的输出网格单元中。同标准的最大池化一样,池化操作独立应用于每个特征图通道,具体流程示例如图 3 所示。
【图 3】

2.6.2.2 多任务损失

Fast R-CNN 网络具有两个同级输出层,第一个输出层利用 softmax 实现目标分类任务,第二个输出用于边界框回归任务。我们将损失函数定义为:
L(p,u,tu,v)=Lcls(p,u)+λ[u1]Lloc(tu,v)(1) L(p, u, t^u, v) = L_{cls}(p, u) + \lambda \lbrack u \ge 1 \rbrack L_{loc}(t^u, v) \tag{1}
其中的 p,u,tu,vp, u, t^u, v 分别表示分类概率预测值,目标真值,边界框预测值及边界框真值,而 tu=(txu,tyu,twu,thu)t^u = (t^u_x, t^u_y, t^u_w, t^u_h)v=(vx,vy,vw,vh)v = (v_x, v_y, v_w, v_h)

在上式的等号右边,第一项表 Lcls(p,u)=logpuL_{cls}(p, u) = -\log p_u,表示为目标的分类误差,第二项是定义在检测框回归目标真值元组 vv 和预测元组 $t^u $ 上的损失. 括号指示函数 [u1]\lbrack u \ge 1 \rbrack 表示当 u1u \ge 1 的时候为值 1, 否则为 0。这是因为按照惯例, 背景类标记为 u=0u = 0, 对于背景 RoI, 没有检测框真值的概念, 因此 LlocL_{loc} 被忽略. 对于检测框回归, 我们使用损失
Lloc(tu,v)=i{x,y,w,h}smoothL1(tiuvi)(2) L_{loc}(t^u, v) = \sum_{i \in \lbrace x, y, w, h \rbrace}smooth_{L_1}(t^u_i - v_i) \tag{2}
其中
smoothL1(x)={0.5x2ifx<1x0.5otherwise(3) smooth_{L_1}(x) = \left\{\begin{matrix} 0.5x^2 & if \vert x \vert \lt 1\\ \vert x \vert - 0.5 & otherwise \end{matrix}\right. \tag{3}
是鲁棒的 L1L_1 损失, 对于异常值比在 R-CNN 和 SPPnet 中使用的 L2L_2 损失更不敏感,当回归目标无界时, 具有 L2L_2 损失的训练可能需要仔细调整学习速率, 以防止爆炸梯度,而公式(3)可以消除这种灵敏度。

公式中的超参数 λ\lambda 用于控制两个任务损失之间的平衡,另外回归目标真值 viv_i 通常归一化为具有零均值和单位方差。

R-CNN、SPP-Net、Fast R-CNN 技术在目标检测早期都是非常经典的算法,然而不可否认的是在目前先进的技术更新迭代下,这些早期技术已光辉不再,因此不再对其中的技术细节做过多介绍,但这并不意味着该技术已不存在学习的必要,其中的一些实验及技巧仍存在学习的价值,例如,实验证实,在 VGG16 网络下,微调 RoI 池化层前的卷积层对识别精度有很高的提升,另外在全连接层中,作者引入了 SVD 截断加速技巧,以及证实 SoftMax 与 SVM 分类器的差异。更多的内容,可以将原论文作为拓展阅读获得更详细的说明。

参考资料

Paper: Fast R-CNN

1、What do we learn from region based object detectors (Faster R-CNN, R-FCN, FPN)?

2、Review: Fast R-CNN (Object Detection)

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!