Example #1
0
    def loss(self, prediction_dict):
        # Note: The loss should be using mini-batch values only
        loss_dict, rpn_loss = self._rpn_model.loss(prediction_dict)
        losses_output = avod_loss_builder.build(self, prediction_dict)

        classification_loss = \
            losses_output[avod_loss_builder.KEY_CLASSIFICATION_LOSS]

        final_reg_loss = losses_output[avod_loss_builder.KEY_REGRESSION_LOSS]

        avod_loss = losses_output[avod_loss_builder.KEY_AVOD_LOSS]

        offset_loss_norm = \
            losses_output[avod_loss_builder.KEY_OFFSET_LOSS_NORM]

        loss_dict.update({self.LOSS_FINAL_CLASSIFICATION: classification_loss})
        loss_dict.update({self.LOSS_FINAL_REGRESSION: final_reg_loss})

        # Add localization and orientation losses to loss dict for plotting
        loss_dict.update({self.LOSS_FINAL_LOCALIZATION: offset_loss_norm})

        ang_loss_loss_norm = losses_output.get(
            avod_loss_builder.KEY_ANG_LOSS_NORM)
        if ang_loss_loss_norm is not None:
            loss_dict.update({self.LOSS_FINAL_ORIENTATION: ang_loss_loss_norm})

        with tf.variable_scope('model_total_loss'):
            total_loss = rpn_loss + avod_loss

        return loss_dict, total_loss
Example #2
0
    def loss(self, prediction_dict):
        # Note: The loss should be using mini-batch values only
        loss_dict, rpn_loss, rpn_acc_all, rpn_acc_pos, \
            rpn_acc_score_neg, rpn_acc_score_pos = self._rpn_model.loss(prediction_dict)
        losses_output, avod_acc_all, avod_acc_pos = avod_loss_builder.build(
            self, prediction_dict)

        classification_loss = \
            losses_output[avod_loss_builder.KEY_CLASSIFICATION_LOSS]

        final_reg_loss = losses_output[avod_loss_builder.KEY_REGRESSION_LOSS]

        avod_loss = losses_output[avod_loss_builder.KEY_AVOD_LOSS]

        offset_loss_norm = \
            losses_output[avod_loss_builder.KEY_OFFSET_LOSS_NORM]

        loss_dict.update({self.LOSS_FINAL_CLASSIFICATION: classification_loss})
        loss_dict.update({self.LOSS_FINAL_REGRESSION: final_reg_loss})

        # Add localization and orientation losses to loss dict for plotting
        loss_dict.update({self.LOSS_FINAL_LOCALIZATION: offset_loss_norm})

        ang_loss_loss_norm = losses_output.get(
            avod_loss_builder.KEY_ANG_LOSS_NORM)
        if ang_loss_loss_norm is not None:
            loss_dict.update({self.LOSS_FINAL_ORIENTATION: ang_loss_loss_norm})

        with tf.variable_scope('model_total_loss'):
            if self.TRAIN_REFINE:
                total_loss = rpn_loss + avod_loss
            else:
                total_loss = rpn_loss

        rpn_score_2d_loss = loss_dict[self._rpn_model.LOSS_RPN_SCORE_2D]
        rpn_class_loss = loss_dict[self._rpn_model.LOSS_RPN_OBJECTNESS]
        rpn_reg_loss = loss_dict[self._rpn_model.LOSS_RPN_REGRESSION]
        refine_class_loss = classification_loss
        refine_reg_loss = final_reg_loss

        return loss_dict, \
               total_loss, \
               rpn_score_2d_loss, \
               rpn_acc_score_neg, \
               rpn_acc_score_pos, \
               rpn_class_loss, \
               rpn_reg_loss, \
               rpn_acc_all, \
               rpn_acc_pos, \
               refine_class_loss, \
               refine_reg_loss, \
               avod_acc_all, \
               avod_acc_pos