组成部分:
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,获得更高精度的预测框。
六、速度对比