Faster rcnn概述

参考:

https://www.jianshu.com/p/9da1f0756813

https://www.cnblogs.com/wangyong/p/8523814.html

https://www.cnblogs.com/wangyong/p/8513563.html

Faster rcnn概述

网络结构图是理解神经网络的核心,理解了这张图,就能通过它理解那些零散的知识点。而且,这张网络图也能便于记忆,一片论文放出来,很多知识点,你看似都理解了,但是,并不能将这些知识点都联系到一起。我们通过网络结构图就能快速的记忆理解这些东西。

言归正传,上面的这张图,我们先看左边的部分,VOCDataset,COCODataset这部分,很明显是否数据集部分,为了生成真实的groundtruth,也就是label,送到网络末端进行训练。

从dataset解析出来了的有两个部分,一个是用于网络末端的label,另一个就是网络的输入img,这里首先经过了一个特征提取网络,当然特征提取网络分为好多种,有resnet,vgg,mobienet等,虽然他们的参数大小等都很不相同,但是他们实现的功能是一致的。

接下来就会通过ROIPooling对网络进行训练。我们知道RPN网络生成2万个候选狂,然后这些候选框的图片被送到ROIPooling中进行学习。

RPN网络就是生成候选框的网络,这里就不做介绍了,大家可以看下其他文章。

代码地址:https://github.com/jwyang/faster-rcnn.pytorch

我们来分析一下:

Faster rcnn概述

原始图像没有固定大小,我们假设为1000×1000,最后的输出为60*40(1000/16≈60,600/16≈40),因为有4个pooling,相当于缩小了16倍。完毕。

RPN网络参数参数ratios=[0.5, 1, 2]scales=[8, 16, 32]。生成2万个achoc,60*40*9=21600个Anchor box

过滤的规则:

这一层主要是为特征图60*40上的每个像素生成9个Anchor box,并且对生成的Anchor box进行过滤和标记,参照源码,过滤和标记规则如下:

①    去除掉超过1000*600这原图的边界的anchor box

②    如果anchor boxground truthIoU值最大,标记为正样本,label=1

③    如果anchor boxground truthIoU>0.7,标记为正样本,label=1

④    如果anchor boxground truthIoU<0.3,标记为负样本,label=0

 除了对anchor box进行标记外,另一件事情就是计算anchor box与ground truth之间的偏移量,预测X,Y偏移

   令:ground truth:标定的框也对应一个中心点位置坐标x*,y*和宽高w*,h*

    anchor box: 中心点位置坐标x_a,y_a和宽高w_a,h_a

    所以,偏移量:

    x=(x*-x_a)/w_a   y=(y*-y_a)/h_a 

   △w=log(w*/w_a)   h=log(h*/h_a)

    通过ground truth box与预测的anchor box之间的差异来进行学习,从而是RPN网络中的权重能够学习到预测box的能力

源码中,会重新生成60*40*9个anchor box,然后累加上训练好的△x, △y, △w, △h,从而得到了相较于之前更加准确的预测框region proposal,进一步对预测框进行越界剔除和使用nms非最大值抑制,剔除掉重叠的框;比如,设定IoU为0.7的阈值,即仅保留覆盖率不超过0.7的局部最大分数的box(粗筛)。最后留下大约2000个anchor,然后再取前N个box(比如300个);这样,进入到下一层ROI Pooling时region proposal大约只有300个。