Faster RCNN
https://blog.csdn.net/qq_43477550/article/details/105584364
https://zhuanlan.zhihu.com/p/31426458
https://blog.csdn.net/weixin_39749553/article/details/94833656
Faster-RCNN是在Fast RCNN的基础上做的,他的主要贡献是设计了RPN网络,之前的工作生成预选框用的方法是selective search的方法。
RPN的具体工作流程是这样的:Faster RCNN首先会有一个骨干网络,这个骨干网络是负责特征提取的。经过特征提取之后会得到一个feature map。这个feature map就是RPN网络的输入。在进入RPN网络之前,这个feature map有9个维度。每个像素点的9个维度代表了9个anchor box,这9个anchor box的尺寸是提取定义好的(anchor box的中心点坐标应该就是grid cell的中心点)。比如原文是40*60*9,大约20000个框。之后这20000个框的信息分成两路,分别做1*1的卷积操作。
第一路卷积后的尺寸是40*60*36(4*9 9个框,每个框有4个数值的信息);
另一路卷积后的结果是40*60*18(2*9 9个框,每个框有两种可能,positive和negative),在第一条支路经过softmax的打分后就可以得到每个框的分数,有了分数,又有这些框的坐标,我们就可以做NMS。在NMS之后选出排名最靠前(也就是softmax得分最高)的2000个框. 再然后从这2000个框中选择出 256 个框包括 128 个正样本和 128 个负样本来计算 Loss. Loss的话就两个部分来计算置信度损失和定位损失,分别用着256个框的 score 和 坐标去计算就行了。计算positive和negative的分类损失时,每个anchor box的标签值是根据当前anchor的IoU得到的:当anchor与ground truth(GT)的IoU>0.7,则认为该anchor是positive,标签值P=1;反之IoU<0.3时,认为该anchor是negative,标签值p=0;至于那些0.3<IoU<0.7的anchor则不参与训练。分类的损失函数使用的是softmax loss,回归使用的损失函数是smooth L1 loss。 RPN的流程到这里就结束了,后边就是用 RPN 选出来的 ROI 训练全连接层进行分类和位置预测的部分了。
参考链接:https://zhuanlan.zhihu.com/p/31426458
1、Faster-rcnn主要分为以下4个部分:
1、Conv layers。Faster RCNN首先使用一组基础的conv+relu+pooling层提取image的feature maps。该feature maps被共享用于后续RPN层的全连接层。
1、所有的conv层都是:kernel_size=3,pad=1,stride=1
2、所有的pooling层都是:kernel_size=2,pad=1,stride=1; kernel_size=2,pad=0,stride=2
Conv layers卷积部分不改变feature的大小,只通过pad来降采样。
2、RPN(region proposal networks)。RPN网络用于生成region proposals。该层通过softmax判断anchors属于positive或者negative,再利用bounding box regression修正anchors获得精确的proposals。
3、Roi Poiling。该层收集输入的feature maps和proposals,综合这些信息后提取proposal features maps,送入后续全连接层判定目标类别。
因为RPN网络生成的proposal是根据positive anchors进行bounding box regression,那么这样获得的proposals也是大小形状各不相同,ROI Poiling就是为了解决这个问题。
4、Classification。利用proposal feature maps计算proposal的类别,同时再次bounding box regression获得检测框最终的精确位置。
classification部分利用已经获得的proposal feature maps,通过full connect层与softmax计算每个proposal具体属于哪个类别(如人、车、电视等),输出cls_prob概率向量;同时再次利用bounding box regression获得每个proposal的位置偏移量bbox_pred,用于回归更加准确的目标检测框。