第1章 双阶段检测

1.5.2 R-FCN的网络

1.骨干架构

R-FCN使用的是残差网络的ResNet-101[17]结构,ResNet-101采用的是100层卷积 + 全局平均池化(global average pooling,GAP)+ 全连接分类器的结构,ResNet-101的最后一层卷积的特征图的个数是2048。在R-FCN中,去掉了ResNet的GAP层和全连接层,并在最后一层卷积之后使用1024个1×1×2048的卷积将通道数调整为1024,然后使用k2×(C+1)个1×1×1024的卷积生成通道数为k2×(C+1)的位置敏感卷积层。R-FCN的骨干网络也使用了预训练的策略,即ResNet-101部分使用在ImageNet上训练好的模型作为初始化参数。


[17] 参见Kaiming He、Xiangyu Zhang、Shaoqing Ren等人的论文“Deep Residual Learning for Image Recognition”。

R-FCN也尝试了通过调整步长以及使用空洞卷积[18]来提升骨干网络的表现。首先,R-FCN将ResNet-101的有效步长从32降到16,以提升输出特征图的分辨率。具体来讲,Conv4之前的网络模型没有任何变化,但是将Conv5的第一个步长为2的操作调整为步长为1。为了保证感受野不至于过小,RFN将Conv5层的卷积替换为空洞卷积,实验结果表明空洞卷积带来了2.6%的准确率的提升。


[18] 参见Liang-Chieh Chen、George Papandreou、Iasonas Kokkinos等人的论文“Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs”。

从图1.18中可以看出,R-FCN的一个分支是Faster R-CNN论文中提出的RPN模块,它被用来生成若干候选区域。位置敏感网络通过这些ROI计算得到每个ROI的类别和检测框。

2.位置敏感网络

通过RPN我们可以得到图像中的ROI,下一步则需要将这个ROI对应到物体的具体类别和它的更精细的位置。在前文中分析到,位置敏感网络是一个通道数为k2×(C+1)的特征图,它的每个通道用来响应每类物体对应的目标部位。例如在图1.19中,一个ROI会被等比例地划分成一个k×k的栅格,每个栅格为一个桶,分别表示该栅格对应的物体的敏感位置(左上、正上、右上、左中、正中、右中、左下、正下、右下)编码。

对于一个尺寸为w×h的ROI,每个桶的大小为,每个桶对应ROI的特征图的一个子区域。接下来我们使用Fast R-CNN论文中提出的ROI池化(平均池化)得到每个桶的评分,然后将它们转换成一个大小为3×3、通道数为C+1的特征图,再通过投票的方式(取均值)得到一个长度为C+1的特征向量,最后通过softmax函数得到该ROI的预测的概率分布[19]


[19] 上述池化和投票均采用了取均值的方式,这里也可以换成取最大值的方式,效果类似。

图1.19 R-FCN流程图

如图1.20所示,一个大小为w×h、通道数为k2×(C+1)的ROI可以展平成k2w×h×(C+1)个ROI,每个ROI的第(i, j)个栅格对应物体的一个不同的敏感位置,这样我们可以提取k2个尺度为的得分图,对每个得分图求均值之后再整合到一起便得到了一个k2×(C+1)的位置敏感得分。对该位置敏感得分的k2个区域求均值得到一个1×1×(C+1)的向量,使用softmax函数(注意不是softmax分类器)便可以得到每个类别的概率分布。

上面介绍的都是对ROI进行分类的过程,自然我们也会遇到对ROI中目标进行位置精校的任务。在分类任务中,我们得到了每个ROI的C+1个类别的概率分布,那么我们只需要添加一个通道数为4的输出分支来得到预测框相对于ROI的偏移即可。在R-FCN中,检测模块是一个平行于分类模块的分支,它的输出特征图的通道数为4×k2。通过ROI池化我们可以得到大小为k×k、通道数为4的特征图,最后通过取均值的方式得到长度为4的特征向量,向量的值代表了预测框相对于ROI的位置偏移。

图1.20 图解位置敏感ROI池化的过程(k=3)

3.R-FCN的训练

R-FCN也采用了分类和回归的多任务损失函数:

(1.14)

其中,c*表示分类得到的ROI的类别,t是目标物体的真值框。是一个二值函数,它表示如果括号内的判断正确,结果为1,否则结果为0。λ为多任务的比重,是一个需要根据模型的收敛效果调整的超参数,论文的实验中其值是1。Lcls为分类损失函数,使用的是交叉熵损失函数,表示为Lreg为检测框回归损失函数,使用的是Fast R-CNN和Faster R-CNN均采用的Smooth L1损失。

在R-FCN中训练时使用了在线难负样本挖掘(online hard example mining,OHEM)[20]的策略,得益于位置敏感区域的高效性,OHEM在这里的速度也得到了很大的提升。假设我们在训练过程中每个输入图像通过RPN得到N个ROI,在前向传播的过程中我们会计算所有N个ROI的位置敏感得分。然后根据它们的损失值对这N个ROI进行排序,从中选择B个损失值最高的ROI进行反向传播的计算。


[20] 参见Abhinav Shrivastava、Abhinav Gupta、Ross Girshick的论文“Training Region-based Object Detectors with Online Hard Example Mining”。

4.R-FCN的推理

在R-FCN中,输入图像的短边先被缩放到了600,然后通过RPN产生300个候选区域,最后使用IoU阈值为0.3的NMS进行后处理,得到最终的检测结果。