组成部分:

1、Conv Layers:是一组基础的Conv+relu+pooling层提取image的feature maps,该feature maps共享用于后续的RPN层和全连接层。注:该conv layers 可用任意的卷积结构代替,比如resnet,inception model,depthwise separable convolution等都可以替代该结构,只要能提取image的feature maps就行。

2、Region Proposal Networks(RPN):用于生成region proposal(候选区域),通过softmax判断anchors属于negtive或是positiov,再利用bounding box regression(边框回归)修正anchors,以获得精确的region proposal.

3、Roi Pooling:该层收集输入的features maps和proposal,综合这些信息后,提取proposal feature maps,送入后续的全连接层判定目标类别。

4、Classification:利用proposal feature maps计算proposal的类别,同时再次bounding box region获得最终的精确位置。

 

 

 

 

 

1、输入P*Q的图像,resize成M*N后,送入13个conv、13个relu及4个pooling组成的Conv layers,生成一个feature map

2、生成的feature map分成两个分支,一路进入RPN,一路进入ROIPooling,汇总后再进行分类

 

 

 

一、conv layer

共包含三个conv、pooling、relu三种层。共有13个conv、13个relu及4个pooling层

在conv layer中,

1、所有的conv都是:kernel_size = 3,pad = 1,stride=1

2、所有的pooling都是:kernel_size = 2,pad = 1,stride=2

3、对所有conv都做了padding处理(pad=1),这样就导致conv的输入输出shape保持不变

4、因为pooling层会使输出长度变为原来的1/2,所以经过四个pooling层后,最后输出的feature map是原图像的1/16。这样conv layer生成的feature map能笔原图对应起来。

 

二、区域生成网络Region Propasl Networks (RPN)

因为经典的检测方法生成检测框都非常耗时,所以faster rcnn对此做了改进,用RPN生成检测框,大大提升了检测速度。

 

 

 

RPN分为两路:

1、上面一路经过softmax生成anchors,获得positive和negtive分类。

2、下面一路用于计算对于anchors的bounding box regression的偏移量,以获得精确的proposal.

3、最后的proposal层是负责综合positve anchors和对应的bounding box偏移量,获取proposal,同时踢除太小和超出边界的propasal。

4、RPN是完成了目标定位的功能。

 

Anchors

RPN网络在卷积后,对每个矩陈点,上采样映射到原始图像的一个区域,找到这个区域的中心点,然后基于这个中心点按规则选取9个anchor box。

9个矩形共有三种面积:128,256,512;

3种形状:长宽比约为1:1,1:2,2:1(该比例可调)

 

 

 

左边每行的四个值为矩形的左上和右下角点的坐标

遍历conv layers获得的feature maps,为每个点都配备这9种anchors作为初始的检测框。

 

 

 

softmax判定positvate笔negtivate

RPN就是从上面feature map上设置的候选anchors,用cnn去判断哪些anchor中是有目标的positive anchor,哪些是没目标的negative anchor.

 

 

 

softmax中前后的Reshape只是方便softmax分类,跟算法没关系。

所以上面那条分支是rpn网络利用anchors和softmax初步提取positive anchors作为候选区域。

 

 

 

 

因为feature map中的每个点都对应有9个anchors,每个anchor又都有4个用于回归的变换量。

得到

 

 

三、proposal layer

主要负责综合所有的变量和positive achors,计算出精准的proposal,送入后续的Roi Pooling layer

Proposal layer有四个输入:

1、positive vs negtive anchors分类器结果rpn_cls_prob_reshape

2、对应的bbox reg的变换量rpn_bbox_pred

3、Im_info:[M,N,scale_factor]

4、参数feature_stride = 16:因为输入图像经过conv layer后,经过四个pooling,变为M/16,N/16,该参数用于计算anchor的偏移量。

proposal layer处理顺序:

1、利用变换量对所有的anchors做bbox regression回归

2、按照输入的anchors softmax scores由大到小排序anchors,提取前pre_nms_top个anchors,即提取修正位置后的posivate anchors

3、踢除尺寸小的positive anchors

4、对剩余的positive anchors进行NMS

5、之后 输出proposal

生成anchors->softmax分类器提取positive anchors->bbox reg回归positive anchors->proposal layer生成proposal。

四、Roi Pooling

1、原始的feature maps

2、RPN输出的proposal boxes

参数:

Pooled_w,pooled_h,spatial_scale(Pooled_w = 7,pooled_h = 7)

Roi Pooling forward过程

1、因为proposal是对应M*N尺寸的,所以首先使用spatial_scale参数将其映射回(M/16,N/16)大小的feature map尺寸

2、再将每个proposal对应的feature map区域平分为pooled_w*pooled_h的网格

3、对风格的每一份都要进行maxpooling操作

这样处理后,即使大小不同的proposal输出结果都是pooled_w*pooled_h固定大小,实现了固定长度输出。

五、Classfication

从ROI POOLing获取到的Pooled_w*pooled_h大小的feature_map后,送入后续网络,做以下两件事:

1、通过全连接和softmax对proposal分类

2、再次对proposal进行bounding box regression,获得更高精度的预测框。

 

 

六、速度对比