Faster RCNN
3.1.2 Loss Function
为了训练rpn,我们为每个anchor分配一个二进制类标签(不管是否为对象)。我们给两种anchor分配一个正标签:(i)与ground-truth box有最高IoU的anchor。(ii)与ground-truth box的IoU交集大于0.7的anchor。请注意,一个ground-truth box可以将正标签分配给多个anchor。通常第二个条件足以确定阳性样本;但我们仍然采用第一个条件,因为在某些罕见的情况下,第二个条件可能找不到阳性样本。如果一个非正anchor的IoU比率低于0.3,我们给它分配一个负标签.anchor无论是positive的还是negative的,都无助于实现训练目标。
利用这些定义,我们在Fast R-CNN[2]中最小化了多任务丢失后的目标函数。我们对图像的损失函数定义为:
这里,i是一个小批量anchor的索引, p i p_i pi是anchor i作为对象的预测概率。如果anchor是positive的,对应的ground-truth label p i ∗ p_i^* pi∗为1,如果是negative的,为0。 t i t_i ti是表示预测边界框的4个参数化坐标的向量, t i ∗ t_i^* ti∗是positive anchor对应的ground-truth box。分类损失 L c l s L_{cls} Lcls是对数损失。对于回归损失,我们用 L r e g ( t i , t i ∗ ) = R ( t i − t i ∗ ) L_{reg}(t_i,t_i^*)=R(t_i-t_i^*) Lreg(ti,ti∗)=R(ti−ti∗)其中R为[2]中定义的鲁棒损失函数(光滑L1)。 p i ∗ L r e g p_i^*L_{reg} pi∗Lreg项意味着只被激活的positive anchor的回归损失 ( p i ∗ = 1 ) (p_i^*=1) (pi∗=1)否则就会被禁用 ( p i ∗ = 0 ) (p_i^*=0) (pi∗=0)。cls层和reg层的输出分别由 p i {p_i} pi和 t i {t_i} ti组成。
这两项用 N c l s N_{cls} Ncls和 N r e g N_{reg} Nreg规范化,并用平衡参数 λ \lambda λ加权。在我们当前的实现中(如在发布的代码中),Eqn(1)中的cls项通过小批量大小(即 N c l s N_{cls} Ncls=256)规范化,而reg项通过anchor 位置的数量(即 N r e g N_{reg} Nreg大约2400)规范化。默认情况下,我们将 λ \lambda λ =10,因此cls和reg项的权重大致相等。我们通过实验表明,结果在很大范围内对 λ \lambda λ 值不敏感(表9)。我们还注意到,上述规范化是不需要的,可以简化。
对于边界框回归,我们采用[5]之后的4个坐标的参数化:
其中x、y、w和h表示方框的中心坐标及其宽度和高度。变量x、 x a x_a xa和 x ∗ x^* x∗ 分别用于预测框、anchor框和groundtruth box(同样用于y,w,h)。这可以被认为是从anchor框到附近groundtruth box的边界框回归。