Faster R-CNN 理论原理
一、Faster R-CNN介绍
在b站看到一位大神up主发布的CNN原理和代码的教学视频,发现非常有帮助,于是将他所讲的内容总结了下来供大家学习讨论。
下面是up的视频、代码、博客的连接:
b站视频链接:https://space.bilibili.com/18161609/channel/index
github代码和PPT:https://github.com/WZMIAOMIAO/deep-learning-for-image-processing
up主的CSDN博客:https://blog.csdn.net/qq_37541097/article/details/103482003
引言
Faster R-CNN原论文:
Ren S, He K, Girshick R, et al. Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks[J]. IEEE Transactions on Pattern Analysis & Machine Intelligence, 2017, 39(6): 1137-1149.
Faster R-CNN是作者Ross Girshick在Fast R-CNN后的又一力作。同样使用VGG16作为网络的backbone,包含候选区域的生成下的推理时间达到5fps也就是1秒检测5张图片(GPU),准确率也有一定提升。在2015年的ILSVRC以及COCO竞赛中获得多个项目的第一名。
二、Faster RCNN算法步骤
网络推理流程:
如上图,对于已经训练好的Faster R-CNN网络,要检测一张任意P·Q大小的待检测图片步骤如下:
1.首先将其reshape成CNN特征提取网络的固定输入大小M·N;
2.将上一步的输出输入CNN特征提取网络(VGG16或者ZF),经过若干卷积层和池化层得到整个图像的特征图片Feature Map(Feaure Map深度:VGG16 512维,ZF 256维);
3.将Feature Map输入FPN层,获得若干候选框;
4.Feature Map与候选框相对应获得相应的候选框特征矩阵,再将其输入到Rol pooling层缩放至7X7的特征图,接着将特征图展平通过一系列全连接层得到每个候选框的类别预测概率;
5.将候选框按照框回归参数进行调整,然后按照非极大抑制的方法去除重复框,输出预测结果。
网络训练流程:
Faster CNN网络的训练,需要在已经训练好的网络模型上(VGG,ZF等)的继续进行训练。将Faster R-CNN看作是两个独立的训练结构,即对RPN结构和Fast R-CNN结构分别交替进行训练(实际上只需要分别交替训练两次即可,因为作者提到:“A similar alternating training can be run for more iterations, but we have observed negligible improvements”,即循环更多次没有提升了)。步骤如下:
1.首先用ImageNet数据集对VGG16模型(ZF)进行预训练,预训练是进行有监督的分类的训练;
2.在已经预训练好的VGG16模型上,训练RPN网络,RPN网络的输出是当前网络对于某个anchor预测为前景还是背景的概率,以及该anchor的框回归参数。它们的定义以及对应标签的获得将在第三部分详细介绍;
3.对于第一次训练好RPN的Faster R-CNN网络,输入训练集经过RPN得到候选框特征图,然后对Fast R-CNN进行训练(只训练Fast R-CNN部分RPN参数保持不变);
4.对于第一次训好的Fast R-CNN的Faster R-CNN网络,继续输入训练集第二次训练RPN网络(Fast R-CNN部分保持不变);
5.对于第二次训练好RPN的Faster R-CNN网络,输入训练集经过RPN得到候选框特征图,然后对Fast R-CNN进行第二次训练(RPN参数保持不变)。
网络结构:
如下图所示,Faster R-CNN与Fast R-CNN的区别就在于将候选框提取的SS算法换成了效率更高的RPN算法。
<