机器学习

Faster R-CNN的参数设计细节

2020-12-29  本文已影响0人  ce0b74704937

之前有篇关于原理的文章(Faster R-CNN文章详细解读),该文章讲述了网络的设计原理,但是具体实现还有很多细节,比如RPN层在推断的时候选了多少候选框,怎么将得到的候选框分配给FPN层的各个层进行特征的提取,Faster R-CNN的正负样本选择方式等等细节,下面来给出一些记录。

下面是根据detectron2中带FPN结构的Faster R-CNN来解释的,那么FPN规定的层中都会跟一个RPN,具体结构如下图所示。

frcnn结构

1. RPN层的ground truth中正负样本怎么定义的?

生成的所有的anchor框与标注框计算iou,如果iou小于0.3则将anchor定义为负样本,如果大于0.7则定义为正样本,在[0.3, 0.7]之间的不参与rpn层的loss计算

2. RPN层的ground truth中正负样本的占比怎么分配?

预先设定RPN层参与训练的anchor框为256个,其中正样本最多为256 * 0.5 = 128个,256减去正样本个数为参与训练的负样本个数

3. R-CNN部分的ground truth是什么?

不同于RPN需要自己根据标注框生成ground truth,R-CNN部分的ground truth就是标注框

4. RPN采用的是哪几层作为提取候选区域的feature输出层?

RPN提取的特征是["p2", "p3", "p4", "p5", "p6"],对应的stride(也就是输出的feature相对于原始输入的缩小尺度)为(4, 8, 16, 32, 64),这里"p2", "p3", "p4", "p5"都是根据backbone输出的feature获得的,只有"p6"是直接通过"p5"下采样得到的。

5. RPN阶段,每层输出多少个候选框,最终总共输出多少个候选框?

这个问题分为训练阶段和推断阶段

训练阶段,每层feature("p2", "p3", "p4", "p5", "p6"),先从RPN层输出中最多2000个框,这些框是根据置信度从大到小排序选出,然后将所有层的候选合并(合并后有2000*6=12000个候选)经过NMS操作选出最多1000个候选框作为最终的输出

测试阶段逻辑同训练阶段,只是从每层的RPN输出中选出最多1000个框,合并后有1000 * 6 = 6000个候选,然后经过NMS操作选出最多1000个候选框

6. RPN选出的候选后,提取FPN中的那些feature用于之后的R-CNN训练和推断中?

训练时,RPN提出了1000个候选框,这些框的大小都是不一样的,需要根据候选框的大小分配给FPN中的五层featuremap("p2", "p3", "p4", "p5")中去,分配的公式如下:
floor(4 + log_2(\sqrt{\frac{\sqrt{area}}{224}}))
上式中area为候选框的面积,floor为向下取整操作。上式求出的值小于等于2则分配个p2,等于3分配给p3,等于4分配各p4,大于等于5则分配给p5。举个例子,当area=224*224时,就将该候选框分配到p4层中,去使用ROIPooling操作获取roi特征。

这里要注意是分配给五层,而不是使用用于提出候选框的六层feature

7. 训练时,经过RPN后选出了最多1000个框用于R-CNN的训练,怎么平衡正负样本数?

将候选框与R-CNN的ground truth(也就是标注框)计算iou,大于0.5的作为正样本,其余的为负样本。预设R-CNN部分参与选了的样本总数为512个,为了平衡正负样本,先从上述的正样本中选出最多512 * 0.25 = 128个,剩下的为负样本的个数,即尽量控制参与训练的正负样本数为1:3。

8. 推断时,经过RPN后选出了最多1000个框用于R-CNN的推断,最终怎么输出?

将候选框提取相应的feature后,输入R-CNN的输出结构中,得到输出的1000个框,将这些框经过NMS操作后,选择置信度最高的100个框作为最终的输出

上一篇 下一篇

猜你喜欢

热点阅读