faster_rcnn 目标检测网络模型解析-resnet目标检测代码
faster_rcnn是由Ross B.Girshick 在2016提出的一种目标检测网络,是基于VGG16的一种卷积神经网络。首先由初期的 rcnn 演变为 fast_rcnn 最终才演变为 faster_rcnn,faster_rcnn 由四个主要部分组成,分别为 Conv layers(卷积层)、RPN(区域生成网络)、Roi Pooling(ROI 池化层)、Classifier(分类及回归)。模型的整体框架图如下图所示,以下对四个部分做出进一步介绍。

①Conv layers(卷积层)
faster_rcnn 基于的是传统的卷积神经网络,其通过 13 个卷积层加 13 个 rule 激励函数再加 4 个池化层的方式提取输入图像的特征图,并将其用于后面的 rpn 层和全连接层。
②RPN(区域生成网络)
区域生成网络的框架如下图所示,将卷积层输出的特征图再进行一次卷积将特征图数量扩展为 512。之后对特征图分别进行两个全卷积 cls layer 和 reg layer,分别得到 9 个 Anchor box 的二分类结果和四个坐标信息。

Anchor 的生成方法为,对于特征图上的每个像素点生成 16x16 的区域,并通过将面积不变长宽比变为 1:1、2:1、1:2 生成三个新的区域,并将长宽扩展为 128、256、512 生成 9 个 Anchor box,生成方式示例图如下图所示。

在每个像素点的 Anchor box 生成后需要对其进行标记和获取坐标偏移量,标记方法为计算 Anchor box 与目标区域的重叠度,重叠度等于两区域的重叠面积与并集的面积比。去掉原图的边界,若重叠度最大或大于 0.7 标记为正样本编号为 1,小于 0.3 标记为负样本编号为 0 其他的舍去。获取坐标偏移量方法为取得 Anchor box 与目标区域的中心坐标和宽高[x* y* w* h*]、[x y w h]。偏移量的计算公式如下。

③Roi Pooling(ROI 池化层)
利用 RPN 生成的特征图,将特征图划分为多个小区域,并利用 max pooling 的方法将所需的小特征图进行提取,max pooling 为取得小区域内的最大值,并作为全连接层的输入。
④Classifier(分类及回归)
最终将所有的数据通过全连接层并利用 softmax 函数对小特征图进行分类并计算其概率值及对候选边界框进行 L1 Loss 回归。
Softmax 公式为:

Smooth L1 函数计算损失值的公式为:
