本篇文章结合了源码解读记忆对于faster rcnn进行一些新的看法
精髓就是:使用深度卷积网络选出候选框,fast rcnn选出候选区域,attention,RPN告诉fast rcnn
到底应该关注哪里。
首先faster rcnn在定义网络结构的时候,是在原来的特征提取网络的基础上进行微调的,所以网络结构主要分为
- Extrator:利用CNN进行特征提取,网路结构可以采用VGG16也可以采用resnext,或者直接使用与训练模型,可以将conv5-3的输出作为图片的特征输入到RPN中,因为这一层的感受野为16,相当于原始图片的大小。
- RPN。候选区域网络,为ROIhead模块提取候选区域,是一个完全的卷积网络,可端到端的训练,产生检测区域,anchor就是多尺度宽高比
- ROIhead:负责ROI的微调
RPN可以使用反向传播算法和SGD进行端到端的训练,作者遵循image-centric采样原则,训练网络,每个mini-batch都是从一个image中产生,包含很多正anchor和负anchor的例子。这样优化损失函数是可能的,但是由于负anchor按主导地位,可能会产生偏差。因此,一个mini-batch中随机抽选了一个image中的256个anchor来计算损失函数,其中正负比为1:1,如果一个image中正样本少于128,则使用负样本补足。
新的层权重都使用均值0,标准差0.01的高斯分布初始化,其它层(共享卷积)使用在ImageNet上预训练的网络进行初始化。
Sharing Features for RPN and Fast RCNN
如何使RPN和fast RCNN共享卷积层,一起训练。文中讨论了三种方法:
交替训练:首先训练RPN,然后使用proposal训练fast rcnn。然后用fast rcnn微调好的网络来初始化RPN,重复进行这个过程。论文中的实验也是采用这个方法。
近似联合训练:RPN和fast rcnn合并到一个网络中训练。在每个SGD迭代中,前向传播产生region proposal,然后用来训练fast rcnn。反向传播则跟以前一样,在fast rcnn和RPN的共享卷积层的损失中传播信号。
非近似联合训练:上述讨论的RPN预测的bounding box也是输入函数。fast rcnn中的RoI pooling层接收这些卷积层,将预测的bounding box作为输入。
- Step Alternating Training
实际采用4步训练算法,通过交替优化学习共享特征。
第一步,训练RPN,由ImageNet预训练的模型初始化,由端到端训练的网络微调。
第二步,使用第一步中的region proposal训练一个单独的fast rcnn检测网络。目前为止这两个网络并没有共享卷积层。
第三步,使用检测网络来初始化RPN训练,但是冻结共享卷积层,只训练RPN中独有的层。现在这两个网络共享卷积层,
第四步,冻结共享卷积层,微调fast rcnn中独有的层。如此,两个网络来自一个统一的网络,并且共享卷积层。
来源:CSDN
作者:沙雅云
链接:https://blog.csdn.net/yychentracy/article/details/103460489