目标检测学习笔记——RPN和ROI Pooling

一、RPN

首看这个链接:
CNN目标检测(一):Faster RCNN详解
下图展示了Python版本中的VGG16模型中的faster_rcnn_test.pt的网络结构,可以清晰的看到该网络对于一副任意大小PxQ的图像,首先缩放至固定大小MxN,然后将MxN图像送入网络;而Conv layers中包含了13个conv层+13个relu层+4个pooling层;RPN网络首先经过3x3卷积,再分别生成foreground anchors与bounding box regression偏移量,然后计算出proposals;而Roi Pooling层则利用proposals从feature maps中提取proposal feature送入后续全连接和softmax网络作classification(即分类proposal到底是什么object)。

目标检测学习笔记——RPN和ROI Pooling_第1张图片

目标检测学习笔记——RPN和ROI Pooling_第2张图片
上图展示了RPN网络的具体结构。可以看到RPN网络实际分为2条线,上面一条通过softmax分类anchors获得foreground和background(检测目标是foreground),下面一条用于计算对于anchors的bounding box regression偏移量,以获得精确的proposal。而最后的Proposal层则负责综合foreground anchors和bounding box regression偏移量获取proposals,同时剔除太小和超出边界的proposals。其实整个网络到了Proposal Layer这里,就完成了相当于目标定位的功能。

RPN所做的事:
1、RPN网络中利用anchors和softmax初步提取出foreground anchors作为候选区域。
2、Proposal Layer负责综合所有[d x(A),d y(A),d w(A),d h(A)]变换量和foreground anchors,计算出精准的proposal,送入后续RoI Pooling Layer.
3、按照输入的foreground softmax scores由大到小排序anchors,提取前pre_nms_topN(e.g. 6000)个anchors。即提取修正位置后的foreground anchors.
4、将anchors映射回原图,判断fg(foreground) anchors是否大范围超过边界,剔除严重超出边界fg anchors。
5、进行nms(nonmaximum suppression,非极大值抑制).
6、再次按照nms后的foreground softmax scores由大到小排序fg anchors,提取前post_nms_topN(e.g. 300)结果作为proposal输出。
7、将最后的anchors送入ROI Pooing.

faster rcnn原论文
RPN 解析
Faster-rcnn详解

RPN第一次提出是在faster rcnn论文中,对于任意尺寸的输入图像,产生一系列目标矩形框。取代了rcn中采用ss算法生成候选框的方法来产生候选框。

而RoI Pooling层则负责收集proposal,并计算出proposal feature maps,送入后续网络。从下图中可以看到Rol pooling层有2个输入:
原始的feature maps
RPN输出的proposal boxes(大小各不相同)
目标检测学习笔记——RPN和ROI Pooling_第3张图片
原论文采用3x3卷积核在最后一层特征图上进行卷积生成256HW的特征图,然后再两次用11卷积核生成2kHW和4kH*W的特征图(相当于全连接层,k为每个网格对应的anchor数,这里为三个尺度三个比例的一共9个anchors)。
目标检测学习笔记——RPN和ROI Pooling_第4张图片

二、ROI Pooling

ROI(region of interest),通过SS或者RPN生成。
ROI Pooling的作用是通过最大池化操作将特征图上面的ROI(不是特征图)固定为特定大小的特征图(7x7),以便进行后续的分类和包围框回归操作。步骤:先将proposal映射到原图大小,再将其高宽都分成7份,对每一份都进行max pooling处理得到fixed-length output。

存在的问题:
由于预选ROI的位置通常是有模型回归得到的,一般来说是浮点数,而赤化后的特征图要求尺度固定,因此ROI Pooling这个操作存在两次数据量化的过程。1)将候选框边界量化为整数点坐标值;2)将量化后的边界区域平均分割成kxk个单元,对每个单元的边界进行量化。事实上,经过上面的两次量化操作,此时的ROI已经和最开始的ROI之间存在一定的偏差,这个偏差会影响检测的精确度。

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