def loss_without_regularization(self, y_true, y_pred):

        #handle for config
        mc = self.config

        #slice y_true
        input_mask = y_true[:, :, 0]
        input_mask = K.expand_dims(input_mask, axis=-1)
        box_input = y_true[:, :, 1:5]
        box_delta_input = y_true[:, :, 5:9]
        labels = y_true[:, :, 9:]

        #number of objects. Used to normalize bbox and classification loss
        num_objects = K.sum(input_mask)

        #before computing the losses we need to slice the network outputs
        pred_class_probs, pred_conf, pred_box_delta = ut.slice_predictions(
            y_pred, mc)

        #compute boxes
        det_boxes = ut.boxes_from_deltas(pred_box_delta, mc)

        #again unstack is not avaible in pure keras backend
        unstacked_boxes_pred = []
        unstacked_boxes_input = []

        for i in range(4):
            unstacked_boxes_pred.append(det_boxes[:, :, i])
            unstacked_boxes_input.append(box_input[:, :, i])

        #compute the ious
        ious = ut.tensor_iou(ut.bbox_transform(unstacked_boxes_pred),
                             ut.bbox_transform(unstacked_boxes_input),
                             input_mask, mc)

        #compute class loss
        class_loss = K.sum(labels * (-K.log(pred_class_probs + mc.EPSILON)) +
                           (1 - labels) *
                           (-K.log(1 - pred_class_probs + mc.EPSILON)) *
                           input_mask * mc.LOSS_COEF_CLASS) / num_objects

        #bounding box loss
        bbox_loss = (K.sum(
            mc.LOSS_COEF_BBOX * K.square(input_mask *
                                         (pred_box_delta - box_delta_input))) /
                     num_objects)

        #reshape input for correct broadcasting
        input_mask = K.reshape(input_mask, [mc.BATCH_SIZE, mc.ANCHORS_NO])

        #confidence score loss
        conf_loss = K.mean(
            K.sum(K.square((ious - pred_conf)) *
                  (input_mask * mc.LOSS_COEF_CONF_POS / num_objects +
                   (1 - input_mask) * mc.LOSS_COEF_CONF_NEG /
                   (mc.ANCHORS_NO - num_objects)),
                  axis=[1]), )

        # add above losses
        total_loss = class_loss + conf_loss + bbox_loss

        return total_loss
    def conf_loss(self, y_true, y_pred):
        #handle for config
        mc = self.config

        #calculate non padded entries
        n_outputs = mc.CLASS_NO + 1 + 4

        #slice and reshape network output
        y_pred = y_pred[:, :, 0:n_outputs]
        y_pred = K.reshape(
            y_pred, (mc.BATCH_SIZE, mc.ANCHOR_HEIGHT, mc.ANCHOR_WIDTH, -1))

        #slice y_true
        input_mask = y_true[:, :, 0]
        input_mask = K.expand_dims(input_mask, axis=-1)
        box_input = y_true[:, :, 1:5]

        #number of objects. Used to normalize bbox and classification loss
        num_objects = K.sum(input_mask)

        #number of class probabilities, n classes for each anchor
        num_class_probs = mc.ANCHOR_PER_GRID * mc.CLASS_NO

        #number of confidence scores, one for each anchor + class probs
        num_confidence_scores = mc.ANCHOR_PER_GRID + num_class_probs

        #slice the confidence scores and put them trough a sigmoid for probabilities
        pred_conf = K.sigmoid(
            K.reshape(y_pred[:, :, :, num_class_probs:num_confidence_scores],
                      [mc.BATCH_SIZE, mc.ANCHORS_NO]))

        #slice remaining bounding box_deltas
        pred_box_delta = K.reshape(y_pred[:, :, :, num_confidence_scores:],
                                   [mc.BATCH_SIZE, mc.ANCHORS_NO, 4])

        #compute boxes
        det_boxes = ut.boxes_from_deltas(pred_box_delta, mc)

        #again unstack is not avaible in pure keras backend
        unstacked_boxes_pred = []
        unstacked_boxes_input = []

        for i in range(4):
            unstacked_boxes_pred.append(det_boxes[:, :, i])
            unstacked_boxes_input.append(box_input[:, :, i])

        #compute the ious
        ious = ut.tensor_iou(ut.bbox_transform(unstacked_boxes_pred),
                             ut.bbox_transform(unstacked_boxes_input),
                             input_mask, mc)

        #reshape input for correct broadcasting
        input_mask = K.reshape(input_mask, [mc.BATCH_SIZE, mc.ANCHORS_NO])

        #confidence score loss
        conf_loss = K.mean(
            K.sum(K.square((ious - pred_conf)) *
                  (input_mask * mc.LOSS_COEF_CONF_POS / num_objects +
                   (1 - input_mask) * mc.LOSS_COEF_CONF_NEG /
                   (mc.ANCHORS_NO - num_objects)),
                  axis=[1]), )

        return conf_loss