损失函数分为框预测回归和分类loss,每个都分为rpn和rcnn。
rpn损失:
_anchor_target_layer 给图像内部的anchors分配rpn_labels(1或0,前景或背景),再和rpn_cls_score做交叉熵,此时只关注物体是前景/背景,不管物体的类别
rpn_cross_entropy = tf.reduce_mean(
tf.nn.sparse_softmax_cross_entropy_with_logits(logits=rpn_cls_score, labels=rpn_label))对图像内部的框做回归
# 计算anchor平移和放缩的幅度target,和所属的类比较
bbox_targets = _compute_targets(anchors, gt_boxes[argmax_overlaps, :])
......
# bbox_targets
bbox_targets = bbox_targets \
.reshape((1, height, width, A * 4))
rpn_bbox_targets = bbox_targetsrpn_loss_box = self._smooth_l1_loss(rpn_bbox_pred, rpn_bbox_targets, rpn_bbox_inside_weights,
rpn_bbox_outside_weights, sigma=sigma_rpn, dim=[1, 2, 3])rcnn损失:
_proposal_target_layer 选出32个前景和96个背景,前景_crop_pool_layer之后做分类(cls_score)和回归(bbox_pred)
pool5 = self._crop_pool_layer(net_conv, rois, "pool5") # RCNN, class loss
cross_entropy = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(logits=cls_score, labels=label))
# RCNN, bbox loss
loss_box = self._smooth_l1_loss(bbox_pred, bbox_targets, bbox_inside_weights, bbox_outside_weights)
别人的终究是别人的,自己懂了才是自己的。(看了那么多博客,好像没什么帮助,还得靠自己悟)
版权声明:本文为ysh1026原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。