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
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