第1章 双阶段检测

1.2.2 SPP-Net的推理流程

简单地回顾一下R-CNN的推理流程。对于一个要检测n类目标的模型,R-CNN首先利用选择性搜索在输入图像上提取2000个左右的候选区域,然后将每个候选区域拉伸到227×227的尺寸,再使用标准的CNN训练这些候选区域,最后提取特征层的特征用于训练n个二分类的SVM作为分类模型以及一个岭回归位置精校器用于位置精校。R-CNN的性能瓶颈之一是在同一幅图像的2000个左右的候选区域上重复进行卷积操作时,存在大量的冗余计算,这是非常耗时的。

SPP-Net首先在输入图像上提取2000个候选区域。按照图像的短边(缩小到s)将图像缩放后(在实验中,SPP-Net使用了s∈{480, 576, 688, 864, 1200}中的多个缩放尺度,原始策略是将这5个尺度的特征连在一起作为特征向量,但是SPP-Net发现将图像缩放到接近224×224像素的那个尺度得到的效果最好),使用CNN提取整幅图像的特征(这是提升时间最关键的部分)。找到每个候选区域对应的输出特征图的部分,使用SPP的方法提取长度固定的特征向量。特征向量经过一个全连接层后输入二分类SVM用于训练SVM分类器。同R-CNN一样,SPP-Net也使用了n个二分类的SVM。SPP-Net的检测过程如图1.7所示。

图1.7 SPP-Net的检测过程

上文提到,我们需要找到原图的候选区域在特征层对应的相对位置。由于卷积操作并不影响物体在图像中的相对位置,这涉及感受野(receptive field)的计算问题。感受野的计算要从第一个全连接层从后往前推,表示为式(1.3):

(1.3)

其中,out是上一层感受野的大小,stride是步长,ksize是核函数的大小。根据SPP-Net论文中给出的ZFNet的网络结构(见表1.1),便得出了SPP-Net论文附录A中感受野139的计算方法,如式(1.4)所示。当得到感受野之后,我们便可以得到候选区域在骨干网络输出层的位置。候选区域左上角的计算方式为,其中139/2是感受野的半径,16是有效步长,63是左上角的位置偏移;右下角的计算方式为,其中75是右下角的位置偏移。

表1.1 SPP-Net中使用的ZFNet的网络结构

图片表格

(1.4)

上面通过感受野来确定候选区域的方式计算起来非常复杂,因为在一些复杂的网络中它的感受野并不是非常容易计算的。一个更简单且直接的确定候选区域的方式是按照候选区域的位置等比例地换算到特征网络输出层上。

SPP-Net的CNN是可以使用候选区域进行微调的。针对候选区域的类别(n+1个)特征,SPP-Net 在全连接层的最后一层又接了一个n+1个类别的分类层。在实验中,SPP-Net的特征层没有经过微调,只是微调了一下分类层,其使用的数据是25%的正样本(和真值框的IoU大于50%)。和R-CNN一样,SPP-Net也使用了岭回归位置精校器用于位置精校。