收藏 | Faster-RCNN详解 (训练过程和RPN与Fast R-CNN)

Faster-RCNN有两种训练方式:四步交替迭代训练和联合训练。本文主要讲解四步交替迭代的训练方式。Faster-RCNN主要由五部分构成:特征提取网络Backbone、RPN、ROI Pooing以及RCNN。其最大的创新点就是提出RPN替代RCNN中的Selective Search,应用卷积神经网络提取ROIs,极大地提升了检测的速度,称为实时目标检测的开山之作。笔者也会着重讲解RPN,请看下文。
首先讲一下Faster-RCNN的前向计算过程,再谈一下其整体网络结构和训练方式吧,搭建好框架,其余的模块理解起来便会轻松一些,看起来更有条理。
这里先说明一下,因为Faster-RCNN属于two-stage的目标检测框架,即先生成Region proposals,然后再进行精细分类与回归,所以我们把RPN和RCNN模块分开来分析,便于理解接下来要将的训练流程。
Faster RCNN的前向计算过程
输入一张待检测照片→Vgg16网络Conv layers提取整张图片的特征,输出的特征图分别输入RPN和Faster RCNN 网络开头→RPN 网络得到Region Proposals,将这些候选框信息送到Faster RCNN网络开头→利用候选框在之前送到的特征图提取特征,并通过ROI Pooling得到规定大小的特征图→将特征图送入到Faster-RCNN网络中进行分类和回归坐标,得到最终的检测结果。
训练步骤
1、训练RPN,使用大型数据集预训练模型初始化共享卷积和RPN权重,端到端训练RPN,用于生成Region Proposals;
2、训练Fast R-CNN,使用相同的预训练模型初始化共享卷积【注意此处是初始化一个新的与第1步结构相同的共享卷积网络,而不是第1步中训练得到的】,锁住第1步训练好的RPN权重,结合RPN得到的Proposals训练RCNN网络;
3、调优RPN,使用第2步训练好的共享卷积和RCNN,固定共享卷积层,继续训练RPN,我认为这一步相当于对第1步训练好的RPN进行微调;
4、调优Fast R-CNN,使用第3步训练好的共享卷积和RPN,继续对RCNN进行训练微调,训练之后得到最终完整的Faster-RCNN模型。
收藏 | Faster-RCNN详解 (训练过程和RPN与Fast R-CNN)_第1张图片
图片首先输入backbone,输出得到feature map,feature map输入RPN,输出proposals,筛选出一定数量的带有目标真值的proposal输入到RCNN进行精细分类和回归得到最终的label和location。从结构图中我们可以看到RPN模块有三个红色的小部件:Anchor Targrt Creator、Proposal Creator、Proposal Target Creator
Anchor Target Creator : 负责在训练RPN的时候,从上万个anchor中选择一些(比如128、256),以使得正负样本比例大概是1:1. 同时给出训练的位置参数目标。 即返回gt_rpn_loc和gt_rpn_label。
Proposal Target Creator: 负责在训练RoIHead/Fast R-CNN的时候,从Proposals继续筛选一部分(比如128个)用以训练。同时给定训练目标, 返回(sample_RoI, gt_RoI_loc, gt_RoI_label)
Proposal Creator: 在RPN中,从上万个anchor中选择一定数目(2000或者300),调整大小和位置,生成Proposals,用以Fast R-CNN训练或者测试。
注意:【其中Proposal Creator在训练和测试中都需要用到,Proposal Target Creator和Anchor Target Creator只在训练阶段使用】
RPN流程展示:feature map和标注信息输入到RPN中,feature map每个像素生成若干个Anchor,计算每个Anchor的类别真值(前景 or 背景)和偏移量真值(其相对于对应标注框的偏移量,中心点以及宽和高),RPN计算预测值,并结合真值进行反向传播,使Anchor更接近于真值框。回归之后对Anchor进行初筛,首先去掉超出图像范围的Anchor,然后按照预测得分取前12000(论文中的取值)个,接下来执行NMS进一步筛选并去得分前200个Anchor,使用真值信息对这些Anchor作进一步筛选,并给出目标真值,送入RCNN做精细分类和回归。

你可能感兴趣的:(目标检测,深度学习,目标检测,faster,rcnn)