R-FCN: Object Detection via Region-based Fully Convolutional Networks
本文旨在介绍一种基于R-CNN框架的改进版本的目标检测技术。该研究提出了一种名为R-FCN: Object Detection via Region-based Fully Convolutional Networks的方法,在某些标准数据集上的评估结果表明其性能优于现有的Faster R-CNN + resNet组合算法。文中通过图示展示了这一优势关系

基于VOC2012 Leaderboard实时数据的研究表明,在准确率上超越了Faster R-CNN的同时,在速度上也快出两到半倍。然而,在速度上仍未能达到与实时要求相当的速度水平。值得借鉴的是,在准确性上确实略逊于基于区域的方法(如YOLO和SSD)。相比之下,在准确性上确实略逊于其他方法(如YOLO和SSD),尤其是在目前各数据集上的表现中依然无法超越Faster R-CNN的水平。因此改进Faster R-CNN以兼具更高的精度与更快的速度就显得尤为重要。本文沿袭了R-CNN的基本架构,并在此基础上提出了自己的改进方案。目标检测主要分为两个阶段:第一阶段是特征提取与候选区域生成;第二阶段是对候选区域进行分类与细化处理以获得最终的目标定位结果。值得注意的是,在某些方法中,并未采用提出检测建议的方式而是直接进行回归预测来实现目标定位效果(如YOLO与SSD)。The key takeaway is that the primary innovation lies in optimizing the detection and classification stages while maintaining computational efficiency.

基于预先确定的区域-of-interest( RoIs ),即proposals,在R-FCN中被设计用于对这些区域进行分类任务。其核心特点在于所有可训练参数均集中在卷积层中,相较于传统的全连接层架构,在特征提取阶段摒弃了复杂的全连接计算过程。这种网络架构被称为纯卷积网络(fully convolutional network),其主要优势在于能够有效提取空间信息并减少计算复杂度。纯卷积网络通过将全连接层替换为深度堆叠的卷积操作实现了这一目标,并且其最后一层输出会生成k×k个位置敏感的概率得分图(位敏分图)。假设目标类别数量为C,则加上背景类别后总共有C+1个类别需要识别;因此最后一层输出会生成k×k×(C+1)个位敏分图。这种设计在特征提取效率和空间分辨率方面均有显著提升,并且通过多级卷积操作实现了多层次语义信息的提取

这里的k通常取3(后续统一以k=3举例),则这9个位置敏感特征图能够表征单个物体类别的9种不同位置信息(包括{top-left, top-center, top-right,…, bottom-right})。在这些总共9(C+1)通道的位置敏感特征图上应用RoI pooling操作(RoI pooling为SPP-net的一种变体,在Fast R-CNN中首次提出),该操作将每个RoI划分为3×3网格区域后进行选择性池化处理:具体而言,在上述位置敏感特征图中橙色(最左侧)响应图像的(top-left)区域将提取对应的橙色RoI并对其进行池化处理以得到橙色小方块(赋值分数);其他颜色响应图像采用相同方法进行处理。对所有颜色的小方块进行投票(或池化操作)最终生成1类的响应结果。这种设计的目的在于:原文指出"Through end-to-end training, this RoI layer effectively guides the final convolutional layer to learn class-specific position-sensitive score maps."
我们都知道,在检测任务中通常会使用到一个基础网络(base network),这个网络通常是用于进行分类任务的卷积神经网络的核心模块。在这里作者采用了ResNet-101(目前在ImageNet上实现top 5误差率为3.0%的最优分类网络),仅保留其实现卷积层架构及预训练权重参数而放弃其他额外组件。由于ResNet-101的最后一层卷积层输出的空间维度为2048通道(即通道数为2048),为了降低计算复杂度与存储需求我们采用一个参数为2048×1×1×1024的卷积层将其降维至中间特征图层面,并在此基础上应用k×k大小(k=3)可学习卷积操作以生成具有k²×(C+1)通道数的特征图(其中C表示类别数量)。

其中rc(i, j)是对位于网格位置(i, j)上的位敏分图中的第c类特征进行全局池化的结果;而Zi,j,c则表示对位于网格位置(i, j)上的第c类物体对应的位敏分图进行池化处理。其中(x0,y0)标记的是RoI区域的左上角顶点坐标;x和y分别代表该区域左上角顶点坐标系下的横向和纵向偏移量。通过在RoI区域内划分3×3个均匀分布的小网格并对每个网格内的特征进行平均池化操作后会得到9个中间输出特征向量;随后将这9个输出向量取平均值即可得到一个类别特征向量;因此对于每个RoI区域来说共有C+1(包括背景类别)个这样的特征向量被生成出来。具体而言,在计算该类别c对应的分数时,则需将所有可能的空间位置i,j上的Zi,j,c值累加后再除以9

此处9(k×k)对任何一个类别而言都是恒定不变的;因此,在计算过程中省去了这部分数值;进一步而言,则可以采用Softmax函数来得出针对一个区域兴趣(RoI)的概率值大小的表达式;即通过这种方法即可获得各类别概率分布的结果。

在这里,默认情况下,默认情况下,默认情况下,默认情况下,默认情况下,默认情况下

其中c*表示一个RoI的真实类别标签,分类的损失函数如下图:

回归问题中的损失函数Lreg与Fast R-CNN架构中所采用的形式具有一致性。在RPN机制中,在RoI与真实边界框交并比(IoU)达到或超过0.5的情况下,则将其归类为正样本候选。本文除了上述工作外,在线难例挖掘方面的研究也取得了进展:为了实现该目标,在每个图像生成N个区域建议后计算所有候选区域对应的损失值。随后根据这些损失值对所有RoIs进行排序,并最终选取具有最高B个损失值的RoIs进行进一步处理。
此外,在R-FCN模型的设计中还包括几个关键组件:首先是在训练阶段应用权重衰减和动量项;其次则是合理设置学习率;最后通过动态平衡各参数更新步长来优化模型收敛速度。
经过测试实验发现:相比于Faster R-CNN算法,在相同测试环境下其平均检测速度达到了每帧170ms左右。
该项目的具体实现地址可参考:https://github.com/daijifeng001/r-fcn
