Label的生成(RPN)
RPN部分的Label,是连同数据增广,在送入网络训练之前就已经生成好的。由于检测需要解决的是2个问题:坐标的回归&坐标点的分类,自然地这里的Label包含的是2方面:分类Label的生成&回归Label的生成
分类Label的生成(RPN)
假设原图大小为 ,有9个anchor,Feature Map stride为16,那么最终关于分类的样本维度为 H/stride * W/stride * numanchor,即 H/16 * W/16 * 9,下面将结合实际图例,说明分类样本产生的过程。
这里举例一种简单的情况:原图的大小为768 * 1024,为了适配网络(1024 * 1024),我们在底部补黑边(0,0,0)。图中只有1个框,坐标为,如下图所示。
这里先给出最终生成的,每个Anchor下的分类Label。其中-1代表Ignore,实际训练中不会回传该部分的梯度;0代表负样本,即背景;1代表正样本,即目标。
可以看到,大部分的Anchor,对应的Label,不是0就是-1,只有Anchor 6中有少部分的目标。但具体是为什么,而每个点对应的值是如何计算的,下面给出说明。
分类Label的生成,涉及到以下的变量:
- Anchor Map:上文提到的 的Feature Map,记为
- 负样本(背景)的IoU阈值(neg)
- 正样本(目标)的IoU阈值(pos)
- 图片的ROI区域
- 图中目标的GT坐标值,这里我们先讨论只有一个GT框的情况,记这个GT框为
给定一个GT框,我们需要计算出,输出Feature Map中的每个坐标点中的每个Anchor Box与之间的交并比(IoU)。需要注意的是,任何超过图像边界框的Anchor都会被记为无效,并且忽略。 以Anchor3(wh = (368,192))为例,图中的某个Anchor Box与GT的相互关系如下图所示。显然此时IOU = 0。
计算所有有效Anchor的原图,并映射回Output Feature Map,就能得到如下的IoU Map。可以看到有相当一部分的Anchor都为无效,我们将对应的值设为-1,这里有效Anchor和GT的IoU都比较小,基本在0.2以下,这也说明了这个宽高为(368,192)无法很好地作为这个GT框的先验
基于IoU Map,我们可以得到正负样本的Label:iou > pos的对应的位置,我们标记为正样本(1,目标),而iou < neg对应的位置,我们标记为负样本(0,背景),而 neg<= iou <= pos的区域,我们标记为-1(忽略),这么做的原因,一方面我们要在正负样本的数量上做均衡,另一方面neg<= iou <= pos很难区分,不利于网络的学习。最终得到下图所示的分类Label。通过刚才的IOU计算,其实已经可以知道这个Anchor下无法生成正样本Label
同理,可以得到Anchor6(736, 384)下的IoU Map以及分类Label