FasterRCNN网络原理与流程梳理

FasterRCNN网络是一种二阶段的目标检测方法,目标检测方法旨在给定的图片中找出目标物体的坐标位置和所属类别。我们在这里来梳理一下训练的大致流程谨供参考,我参考的算法实现为:https://github.com/chenyuntc/simple-faster-rcnn-pytorch

1.特征提取

在特征提取前,需要对初始图片和标签数据进行预处理,假设经过数据预处理后,我们得到的输入数据为:600x800x3 的原图矩阵、nx4 的坐标标签gt_bbox、n 个分类标签gt_label,其中 n 代表每张图片中目标物体的数量。我们将 600x800x3 的图片矩阵输入到特征提取网络中,然后得到 37x50x512 的特征图,网络详细结构如下所示:

2.RPN网络

RPN网络首先将上一步得到的 37x50x512特征图经过卷积网络分别得到 16650x2(经过了维度变换,16650=37x50x9)的是否包含目标物体的分数预测、16650x4的坐标调整值预测,具体网络结构如下图所示:

然后便可以计算RPN网络的损失:
1.FasterRCNN网络对特征图上每个点选取了9个基础anchor,并将 37x50的特征图中心坐标映射回原图尺寸(600x800),结合得到基于原图尺寸的 16650x4的anchor;
2.由AnchorTargetCreator首先去掉超出图片范围的anchor,然后计算anchor与gt_bbox的IOU值,根据设定好的正负样本阈值筛选用于训练的128个正样本和128个负样本,由此得到 256x2的样本分类标签,坐标调整值标签只取正样本且由anchor与gt_bbox作变换得到 128x4的张量;
3.根据得到的标签和上面卷积网络得到的预测值便可分别计算分类损失和坐标损失

接着由ProposalCreator产生用于ROI网络的proposals:
1.将上面步骤1产生的基础anchor和卷积网络得到的 16650x4的坐标调整值预测作变换得到实际预测的 16650x4的roi坐标值;
2.去掉超出图片范围的roi,再去掉宽高小于阈值的roi,然后根据卷积网络得到的分数预测提取前topN个roi;
3.对剩余的roi进行nms筛选以去掉高度重叠的roi,由此得到用于ROI网络的roi(假设其维度为 2000x4)

3.ROI网络

在ROI网络之前还需要从RPN网络产生的2000个roi中进一步筛选用于训练的正负样本,这一步由ProposalTargetCreator完成:
1.计算roi与gt_bbox的IOU值,根据设定好的正负样本阈值筛选用于训练的共128个正负样本,由此得到 128个样本分类标签,坐标调整值标签同样只取正样本且由roi与gt_bbox作变换得到

接着,ROI网络首先取 37x50x512特征图上对应的每个roi区域进行ROIPooling操作得到 7x7x512的特征图,然后由如下全连接网络得到最终的分类预测和第二次坐标调整值预测:

最后便可由得到的预测值和标签值计算ROI网络的损失,其中坐标调整值为每个类别都预测了,训练时取真实标签类别所对应的预测值。

结语

本文对FasterRCNN网络的训练流程进行了大致的归纳,其他细节之处可以参考其他文章,且纰漏之处也在所难免,恳请指正。

猜你喜欢

转载自www.cnblogs.com/qxcheng/p/12312898.html