第1章 双阶段检测

1.3.3 Fast R-CNN网络结构

Fast R-CNN选择了VGG-16网络结构,并将最后一层的最大池化换成了ROI池化。经过两层共享的全连接和Dropout后,Fast R-CNN接了一个双任务的损失函数,分别用于分类和检测精校,具体结构如图1.9所示。其中Convi_j表示的是第i个网络块的第j层的卷积操作,ReLUi_j表示的是第i个网络块的第j层的ReLU激活函数;Pooli表示第i个网络块的最大池化。FC6、FC7以及FC8是3个全连接层。cls_score是分类评分,bbox_pred是预测的检测框, loss_cls和loss_box分别是分类任务和检测任务的损失函数。

图1.9 Fast R-CNN网络结构

1.ROI池化层

ROI池化层是一个单层的SPP。ROI池化可以由(r, c, w, h)定义,其中(r, c)表示候选区域的左上角坐标,(w, h)表示候选区域的宽和高。假设我们要将特征层映射成大小为H×W的特征图。ROI池化将特征层分成的栅格,每个栅格通过最大池化得到。在Fast R-CNN中,ROI池化使用的是固定栅格数量的最大池化,在反向传播时,只对栅格中选为最大值的像素更新参数,可以表示为式(1.5)。[bool(•)]在Fast R-CNN论文中叫作Iverson括号,它的本质是一个指示函数,表示当布尔值为True时,该函数的值为1,否则为0。

(1.5)

2.候选区域的ROI池化的计算

在Fast R-CNN中,所有候选区域的卷积操作是共享的,而选择性搜索是在输入图像上完成的,所以需要将从输入图像上提取的候选区域对应到Conv5层的特征图。然后在这个特征图上进行ROI池化的操作,如图1.10所示。因为骨干网络是一个全卷积的网络结构,输入图像像素之间的相对位置不会变化,所以我们可以根据候选区域在原图中的大小占比以及相对位置等比例地换算出它应该在Conv5层上的哪个位置。在换算的过程中,我们主要关注图像尺寸下降了多少。在Fast R-CNN中,它使用了VGG-16作为骨干网络,VGG-16共有4个步长为2的最大池化操作,而卷积操作是步长为1、加边为1的卷积操作,所以它最终得到的Conv5层的特征图的尺寸是输入图像的1/16。

图1.10 Fast R-CNN算法流程以及ROI池化

输入图像上的候选区域(x1, y1, x2, y2)在与之对应的特征图的区域 的计算方式为:

(1.6)