机器学习30:关于FasterRCNN代码中三个Creator及四个损失的补充
机器学习30:关于FasterRCNN代码中三个Creator及四个损失的补充
这是关于Faster RCNN的第四篇博客,之前写过机器学习17:FasterRCNN简介,机器学习18:RPN区域候选网络简介主要是基于原理和流程上的简介,转载了Faster RCNN的代码流程梳理【转载整理】,主要是从代码的角度梳理Faster RCNN的流程。
目标检测之Faster-RCNN的pytorch代码详解(数据预处理篇)及同作者的另外三篇博客详细分析了FasterRCNN的pytorch代码实现,但是“代码目录/simple-faster-rcnn-pytorch-master/model/”中的部分代码解析还尚未完成。
本文主要对代码中“creator tools.py”中的三个Creator类及FasterRCNN的四部分损失的解释进行补充,pytorch源码依然是基于 目标检测之Faster-RCNN的pytorch代码详解(数据预处理篇)中的pytorch代码。
1.三个Creator类:
(1) AnchorTargetCreator:
AnchorTargetCreator负责在训练RPN网络时,从上万个Anchor中选出正负样本比例约为1:1的一些样本(如256个),并给出训练的位置参数目标。
AnchorTargetCreator 是RPN网络中的一部分,用于RPN的自身训练。
(2) ProposalCreator :
RPN网络的两个功能为:
1)自我训练:二分类问题,BBox回归。(由AnchorTargetCreator实现)
2)向ROIHead提供ROIs:(由ProposalCreator实现)
因此 ProposalCreator是RPN网络的一部分,功能是从上万个Anchor中选定一定数目(如2000个)调整大小和位置,生成ROIs,用以后续检测网络的训练和测试。
ProposalCreator与AnchorTargetCreator其实并无交集。ProposalCreator 用1*1卷积的输出loc和score和20000个Anchor来筛选出最终的2000个ROIs;AnchorTargetCreator所做的事情就是自我训练,输出真实值来和1*1卷积的输出loc和score进行训练,优化RPN网络,这样ProposalCreator 筛选选出来的2000个ROI质量也会提高,所以二者唯一的共同点就是都利用了预测的loc/score及20000个原始anchor坐标!
(3) ProposalTargetCreator:
ProposalTargetCreator是ROIHead的一部分,功能是从RPN网络给出的2000个Anchor中继续筛选,选取其中一部分样本(如128个)用于检测网络训练,并给出训练目标。
2.四个损失函数:
(1)RPN分类损失:
二分类问题,256个样本参与,正负样本比例约为1:1。
预测值:RPN网络1*1卷积的输出;
真实值:AnchorTargetCreator生成的GrouthTruth。
(2)RPN位置回归损失:
回归样本数是所有20000个Anchor中完整出现在原图范围中的部分。
预测值:RPN网络另一组1*1卷积的输出;
真实值:AnchorTargetCreator生成的GrouthTruth。
(3)ROI分类损失:
21分类问题,128个样本参与,正负样本比例约为1:3。
预测值:全连接层FC21的输出;
真实值:ProposalTargetCreator生成的GrouthTruth。
(4)ROI位置回归损失:
二分类问题,128个样本参与,只对其中的正样本计算回归损失。
预测值:全连接层FC84的输出;
真实值:ProposalTargetCreator生成的GrouthTruth。
3.参考文献:
Faster_RCNN 2.模型准备(上),作者的其它几篇讲解FasterRCNN的pytorch代码的博客也值得一看。