一:流程
faster rcnn是目标检测的一个模型,它的流程是
第一步整张图输入一个cnn,进行特征提取,获取最后一层卷积的feature map
第二步feature map输入rpn网络,生成region proposal(大约300个),并提取region的等长特征向量
第三步对提取的特征使用分类器进行分类
第四步是回归对bounging box进行微调。
二: rpn
rpn?传统的生成检测框的方法都很耗时。所以提出了rpn。
rpn是一个全卷积网络,用于提取候选框region proposal。
rpn的输入是cnn得到的featrue map,对feature map使用滑动窗口(3x3),每个滑动窗口有k个不同尺度的anchor box,所有的anchor box就是初始的候选框也是基准框,但是这些region proposal太多了而且很不准确,所以随后会筛出去大部分还会进行2次回归修正;
然后每个滑动窗口区域(3x3)还会(通过一个3x3卷积)被映射到一个低维特征向量,这个特征向量输入2个并行的(1x1卷积),分别输出物体得分(有和没有的概率foreground score和background score)和bbox的边界(4个数dxdydwdh)
训练的时候不可能把全部anchor拿去训练,太多了,需要判定anchor内是否有目标,如果anchor与任一ground truth的iou大于0.7就认为该anchor有目标,作为正样本(foreground),iou小于0.3就是背景(background),作为负样本进行训练,其他的anchor就不训练。
rpn网络:
具体就是输入为WxH的feature map,先3x3卷积,其实就相当于3x3的滑动窗口了,每个1x1的column就是特征向量,接下来是2个分支,(但都是1x1卷积),分类的分支经过1x1卷积后得到WxHx18,然后reshape,softmax,reshape,输出还是WxHx18,每个anchor box2个得分(有/没有);回归的分支经过一个1x1卷积,输出为WxHx36,每个anchor得到4个坐标(dx,dy,dw,dh)用于回归出proposals。这两个分支得到的2k个得分和4k个坐标送入proposal layer。(首先这一层的输入还有一个保存了原图缩放到featrue map的信息因为我们是要在原图画框。)
如何回归得到rpn最终的 region proposal:
- 再次生成anchors,并使用4k个坐标对所有的anchors做bbox位置回归(平移和缩放)
- 按照anchor的foreground scores降序排列anchors,取前6000个(位置已修正)
- 映射回原图,剔除foreground anchor中严重超出边界的。
- 进行nms
- 再次按照foreground scores降序排列,取前300个作为region proposal输出。
注意两点,一是这里输出的proposal是对应原图的。二是严格意义上的检测到这里就结束了,后续是识别部分了。
bbox regression是通过神经网络学习的。
三: Rol pooling
Rol pooling负责收集proposal,并计算出proposal feature map,送入后续网络(分类)。
Rol pooling 的输入有2个:cnn生成的feature map和RPN输出的proposals
Rol pooling层是为了解决输入尺寸固定的问题,是从SPP发展而来。
Rol pooling前向过程:
- 之前提到rpn生成的proposal是对应原图尺寸的,所以首先将feature map映射回原图尺寸
- 比如我们要得到固定尺寸为7x7的输出,那么我们将每个proposal分成7x7的网格,每个网格做max pooling就成了7x7的固定size。
四: 分类
利用Rol pooling的固定尺寸输出proposal feature map进行分类和回归。
通过全连接和softmax计算每个proposal属于每个类别的概率。
同时再次利用bbox regression获得每个proposal的位置偏移量,用于回归更加精确的检测框。
五: 关于训练
1) 单独训练RPN网络,网络参数由预训练模型载入;
2) 单独训练Fast-RCNN网络,将第一步RPN的输出候选区域作为检测网络的输入。具体而言,RPN输出一个候选框,通过候选框截取原图像,并将截取后的图像通过几次conv-pool,然后再通过roi-pooling和fc再输出两条支路,一条是目标分类softmax,另一条是bbox回归。截止到现在,两个网络并没有共享参数,只是分开训练了;
3) 再次训练RPN,此时固定网络公共部分的参数,只更新RPN独有部分的参数;
4) 那RPN的结果再次微调Fast-RCNN网络,固定网络公共部分的参数,只更新Fast-RCNN独有部分的参数。