第1章 双阶段检测

1.5.1 提出动机

在R-CNN系列论文中,目标检测一般分成两个阶段:

(1)提取候选区域;

(2)候选区域分类和位置精校。

在R-FCN之前,效果最好的Faster R-CNN是使用RPN生成候选区域,然后使用Fast R-CNN进行分类。在Faster R-CNN中,首先使用ROI池化层将不同大小的候选区域归一化到统一大小,之后接若干全连接层,最后使用一个多任务作为损失函数。多任务包含两个子任务:

用于目标识别的分类任务;

用于目标检测的回归任务。

在Faster R-CNN中,为了保证特征的“位移可变性”,Faster R-CNN利用RPN提取了约2000个候选区域,然后使用全连接层计算损失函数。然而候选区域有大量的特征冗余,造成了一部分计算资源的浪费。R-FCN采用了和Faster R-CNN相同的过程,不过做了如下改进:

R-FCN模仿FCN,采用了全卷积的结构;

R-FCN的两个阶段的网络参数全部共享;

使用位置敏感网络产生检测框;

位置敏感网络无任何可学习的参数。

R-FCN最大的特点是使用了全卷积的网络结构,即使用1×1卷积代替了Faster R-CNN中使用的全连接。1×1卷积起到了全连接层加非线性的作用,同时还保证了特征点的位置敏感性。R-FCN的结构如图1.18所示。从图1.18中可以看出,R-FCN的最重要的模块便是位置敏感网络。

在R-FCN的位置敏感网络中,每个ROI被划分成一个k×k的栅格,每个栅格负责检测目标物体的不同部位。例如,对于“人”这个目标,中上部区域大概率对应的是人的头部,同理,ROI的其他栅格也对应到目标物体的其他部位。当ROI的每个栅格都找到目标物体的对应部位时,分类器便会判断该ROI的类别为目标物体。当ROI的每个栅格都没有找到目标物体的对应部位时,那么该ROI就是一个背景区域。

这个解决方案有两个问题:一是目标物体之间会有重叠,例如图1.18中有人骑在马上的情况;二是目标物体会有不同的姿势,例如人可以弯腰、蹲着等。对于第一个问题,R-FCN采用的策略是输出k2×(C+1)个通道的特征图,此时每个通道只负责检测某类目标的某个部位,例如某个通道只负责检测人脸。这个策略不仅可以解决不同物体之间的重叠问题,而且可以解决同一类目标的重叠问题。其实对于第二个问题,采用的策略是如果目标的大部分区域被检测到,我们便可以认为该目标被检测到,这种策略可以解决绝大多数目标物体的不同姿势的问题。

图1.18 R-FCN的结构