faster rcnn中的关键知识点解析

                                                faster rcnn中的关键知识点解析

 

Anchor:

anchor的本质是SPP(spatial pyramid pooling)思想的逆向。而SPP就是将不同尺寸的输入resize成为相同尺寸的输出。所以SPP的逆向就是,将相同尺寸的输出,倒推得到不同尺寸的输入

在RPN中,作者提出了anchor。Anchor是大小和尺寸固定的候选框。论文中用到的anchor有三种尺寸和三种比例,如下图所示,三种尺寸分别是小(蓝128)中(红256)大(绿512),三个比例分别是1:1,1:2,2:1。3×3的组合总共有9种anchor。

https://pic1.zhimg.com/80/v2-7abead97efcc46a3ee5b030a2151643f_hd.jpg

 

然后用这9种anchor在特征图(feature)左右上下移动,每一个特征图上的点都有9个anchor,最终生成了 (H/16)× (W/16)×9个anchor. 对于一个512×62×37的feature map,有 62×37×9~ 20000个anchor。 也就是对一张图片,有20000个左右的anchor。这种做法很像是暴力穷举,20000多个anchor,哪怕是蒙也能够把绝大多数的ground truth bounding boxes蒙中。

 

Rpn:

Rpn网络结构?

faster rcnn中的关键知识点解析_第1张图片

Rpn如何训练?

如何通过训练使得网络结构具有 region proposal的能力?

anchor的数量和feature map相关,不同的feature map对应的anchor数量也不一样。RPN在Extractor输出的feature maps的基础之上,先增加了一个卷积(用来语义空间转换?),然后利用两个1x1的卷积分别进行二分类(是否为正样本)和位置回归。进行分类的卷积核通道数为9×2(9个anchor,每个anchor二分类,使用交叉熵损失),进行回归的卷积核通道数为9×4(9个anchor,每个anchor有4个位置参数)。

接下来RPN做的事情就是利用(AnchorTargetCreator)将20000多个候选的anchor选出256个anchor进行分类和回归位置。选择过程如下:

 

对于每一个ground truth bounding box (gt_bbox),选择和它重叠度(IoU)最高的一个anchor作为正样本

对于剩下的anchor,从中选择和任意一个gt_bbox重叠度超过0.7的anchor,作为正样本,正样本的数目不超过128个。

随机选择和gt_bbox重叠度小于0.3的anchor作为负样本。负样本和正样本的总数为256。

对于每个anchor, gt_label 要么为1(前景),要么为0(背景)计算分类损失用的是交叉熵损失,而计算回归损失用的是Smooth_l1_loss. 在计算回归损失的时候,只计算正样本(前景)的损失,不计算负样本的位置损失。

 

训练 rpn ,目的是为了选取与groundtruth box重合程度最高的anchors

分类损失:

对于分类正负样本的界定是依据 选取的anchor与groundtruth box的重叠度大小来定义;样本选择数目:正负样本比例为1:1

回归损失:

正负样本的界定是由分类网络对anchor进行前景背景预测的概率来界定;

 

训练fast rcnn检测网络的训练;目的是refine rpn网络预测的proposal 和对proposal进行分类

faster rcnn中的关键知识点解析_第2张图片

 

Proposal来源:proposal就是roi; rpn网络依据特征图提取大概2w个anchor,经过rpn的分类网络对每个anchor进行前景的概率预测;选取概率大于一定阈值的L个anchors,利用回归的位置参数修正这Lanchor,得到rois这个时候才改名字,因为不再是anchors,位置被修正了),来做非极大值抑制(NMS),剔除N个rois,剩余M个rois,M在训练阶段一般取2000;

 

为何可以利用回归的位置参数修正anchor得到roi

 因为对于1*1 conv,36这个回归位置的卷积层来说,参数是共享的;换句话说就是对于每个特征map上的每一个点,都是经过同样的参数来回归该点对应的anchor的位置,只是对应于每个点9个不同的anchor的参数不一样。因此,可以利用回归的位置板书来修正anchor得到roi。

1.对于rpn提供的proposal,fast rcnn 先是要做roi pooling;

ROIs Pooling顾名思义,是Pooling层的一种,而且是针对RoIs的Pooling,他的特点是输入特征图尺寸不固定,但是输出特征图尺寸固定;做roi pooling的原因是proposal大小不统一,anchor选取的时候为了覆盖不同尺寸的目标,选择了3中面积和3种不同长宽比合起来的9种anchor,即使经过回归修正,proposal的大小仍然不统一,要将 proposal 归一到同一尺寸,便于输入到后续的全连接层,由于输入的图片大小不一,在Pooling的过程中需要计算Pooling后的结果对应到feature map上所占的范围,然后在那个范围中进行取max或者取average。

2.经过两层全连接层组合特征,猜测是为了延用vgg16的全连接层(个人来看 faster rcnn的网络结构其实就是 vgg + rpn+roipooling);可以使用vgg分类网络的参数来初始化全连接层;

3.检测网络的分类和loc的训练过程和rpn网络的训练过程类似,只不过一个输入是anchor,一个输入是proposal。

参考文献:https://zhuanlan.zhihu.com/p/32404424

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