Faster-RCNN

双阶段目标检测算法——Faster-RCNN

Faster-RCNN是双阶段目标检测算法中的典型代表,该算法于2016年提出,在目标检测领域具有十分重要的地位。该算法采用了先进行区域生成(即生成一个可能包含待检测物体的预选框),再通过后续网络对各个预选框进行分类(物体类别)和回归(用于回归检测框精确位置),故此被称为双阶段目标检测算法 如图1所示,Faster-RCNN检测模型共分为四个模块: (1)conv layers。即特征提取网络,这个模块主要用于提取图片特征。这部分网络在原文中为VGG-16。但在本研究中,为了提升模型的预测精度,本研究使用ResNet-50网络代替VGG-16。由ResNet-50输出的特征图(feature map),将用于后续的RPN层输入和候选框特征图(proposal feature map)截取。 (2)RPN(Region proposal Network)。即区域候选网络,该网络用于生成可能包含物体的候选框。 (3)RoI Pooling。即兴趣区域池化,其具体工作是通过收集RPN网络生成的候选框(每个框的坐标),将对应区域从(1)中提到的特征图(feature map)提取出来,生成预选框特征图。这些预选框特征图将输入后续的全连接层。 (4)Classification and regression。该层本质为全连接层,接受预选框特征图作为输入,通过仿射变换,计算得出物体的类别,同时回归获得检测框的准确位置。

![wps1.jpg][1] 图1 Faster-RCNN网络概略图
![wps2.jpg][2] 图2 Faster RCNN网络展开图

上面针对Faster-RCNN的结构作了简单的介绍,下面将对四个组成部分以及该网络如何训练进行更加具体的介绍。

1.1.1 特征提取网络

本研究使用了表示能力更强的ResNet-50代替了原论文中的VGG16作为特征提取网络。ResNet-50中最基本的结构是Bottleneck,该网络的结构如图3所示,可以看到,总体的思路是先通过1×1的卷积对特征图像进行降维,再做一次3×3的卷积操作,最后再通过1×1卷积恢复维度,每个卷积层后跟着BatchNorm层(有益于网络泛化)和ReLU激活层。ResNet-50如图所示,图像输入后首先由一个7X7、步幅为2的卷积处理,再由一个3x3步幅为2的最大池化层进行下采样,后续网络通过重复Bottleneck模块组成,这些Bottleneck模块可以分为四组,分别由3、4、6、3个Bottleneck模块组成。每组Bottleneck的第一个进行了下采样,特征图的尺寸逐渐缩小,通道数逐渐增加。最终得到的特征图尺寸大小为输入图像的三十二分之一

![wps3.jpg][3] 图3 两种Bottleneck模块示意图
![wps4.jpg][4] 图4 Resnet-50网络结构

1.1.2 RPN网络

RPN网络用于为后续网络提供建议框。Anchors框是RPN模型中的关键概念,设置这些锚框的目的是为了通过这些框来覆盖图像上各种大小的目标,其在Faster-RCNN原论文中有三种长宽比例{1:1,1:2,2:1}和3种缩放比例{0.5,1,2},故在特征图的每个像素点上都有9个锚框,如图5所示。

![wps5.jpg][5] 图5 锚框示意图
![wps6.jpg][6] 图6 RPN网络结构图

图6为RPN网络结构,可见该网络由两条工作主线构成,第一条线通过softmax分类器对锚框进行分类,判断其是否包含物体,第二条工作线用于计算锚框的偏移量,以获得更加精确的锚框位置。最后由Proposal层负责综合两条工作线输出的信息,剔除不包含物体锚框,并对包含物体的锚框位置进行微调,输出为建议框。

1.1.3 ROI POOLING

RoI Pooling层则负责收集建议框,并计算出建议框特征图(从特征提取网络最后输出的特征图中扣出对应位置并进行池化),该层输入有两个: (1)特征提取网络提出的原始特征图,大小(M/32)x(N/32) (2)RPN网络生成的建议框,这些建议框大小各不相同,由左上角坐标和右下角坐标四个值表示。 之所以要进行ROI Pooling,是因为后续的全连接层的每次输入的特征大小必须是相同的,而这里得到的建议框特征图大小各不相同。传统的有两种解决办法: (1)从图像从crop(裁剪)一部分送入网络 (2)将图像wrap(resize)成需要的大小送入网络

![wps7.jpg][7] 图7 crop与warp效果展示

由图7可以看出,crop会损失图像完整的结构信息,wrap会破坏图像原始形状信息。因此,需要一种能够把各种图像大小整合到一起又不会简单粗暴造成破坏的方法,而由SSP(Spatial Pyramid Pooling)发展而来的ROI pooling就正好满足了这样的要求。 RoI pooling会有一个预设的池化后宽度(pooled_w)和池化后高度(pooled_h)。其具体的流程如下: (1)由于建议框坐标是基于原图(MxN)尺度的,故需将其映射到特征图(M/32)x(N/32)尺度 (2)再将每个建议框对应的特征图区域分为pooled_w x pooled_h的网格 (3)对网格的每一部分做最大池化。 这样处理后,所有大小不同的建议框经过ROI pooling后输出的建议特征图都是pooled_w x pooled_h的固定大小。

![wps8.jpg][8] 图8 ROIPooling示意图

1.1.4 Classification and regression网络

这里的分类和RPN中的分类不同,RPN中只是进行二分类,以区分目标还是背景;而这里的分类是对之前的所有包含物体的锚框进一步分类以识别其具体属于哪一类。

![wps9.jpg][9] 图9 分类回归网络结构图

这部分网络输入的是从RoI pooling处获取到的pooled_w x pooled_h大小的建议框特征图,对每个建议框特征图执行Flatten操作,将其从三维展开为一维,送入后续网络,以完成以下两项工作: (1)通过全连接层和softmax对所有建议框进行具体类别的分类(通常为多分类) (2)通过全连接层再次对建议框进行位置回归,获取更高精度的最终预测框

1.1.5 Faster-RCNN训练

由于Faster RCNN是两阶段检测器,迭代的进行RPN网络、分类回归网络这两部分网络的训练。详细的训练过程如下: 第一步:先使用预训练权重初始化特征提取网络(RPN网络可随机初始化),然后训练RPN网络。训练时,特征提取网络和RPN网络的权重都更新。 第二步:根据训练好的RPN网络获取建议框,用于下一步训练分类回归网络。 第三步:再次使用预训练权重初始化特征提取网络(分类回归网络随机初始化),然后训练分类回归网络。训练时,特征提取网络和分类回归网络的权重都更新。 第四步:使用第三步训练好的特征提取网络和第一步训练好的RPN网络权重进行对应网络初始化,第二次训练RPN网络。但这次把特征提取网络的权重固定,只训练RPN网络的权重。 第五步:根据训练好的RPN网络获取建议框,用于下一步训练分类回归网络。 第六步:使用第三步训练好的特征提取网络和第三步训练好的分类回归网络权重进行对应网络初始化,再次训练分类回归网络。固定特征提取网络,只微调分类回归网络。

评论区 0