文接上篇。
7、损失函数
这是通过_add_losses()函数来实现的。
如原论文所说,faster rcnn包括两个损失:rpn网络损失、rcnn网络的损失,每个损失又包括分类损失和回归损失,所以需要定义一个多任务损失函数(Multi-task Loss Function),包括Softmax Classification Loss和Bounding Box Regression Loss。分类损失使用的是交叉熵,回归损失使用的是smooth L1 loss。损失函数如下公式定义:
其中:
- i, 表示anchors的索引。
,表示positive softmax probability,即anchors的分类概率值。
,表示样本的标定值(label)。当第i个anchor与GT间IoU>0.7,认为该anchors是正样本,
=1;反之IoU<0.3时,认为该anchors是负样本,
=0;至于那些0.3<IoU<0.7的anchors则忽略掉不参与训练。
, 表示predict bounding box,该anchor预测的偏移量。
,表示anchor相对于GT box实际的偏移量。
为两种类别的对数损失(log loss)。
从上面公式能看出损失分为两部分,第一是分类损失,第二是bbox回归损失。
1、分类损失(cls loss),即rpn_cls_loss层计算的softmax loss,用于将anchor分为正负样本的二分类网络训练。
2、bbox回归损失(reg loss),即rpn_loss_bbox层计算的soomth L1 loss,用于bounding box regression网络训