F1得分作为损失函数

时间:2020-04-29 22:31:33

标签: tensorflow keras object-detection loss-function faster-rcnn

我正在尝试为RPN的Faster RCNN分类负责人重新计算F1分数损失。但是,使用下面的我的实现(使用Keras和Tensorflow后端),在训练过程中损失大约为0.9993782699。

def rpn_loss_cls_F_one(num_anchors):
        def rpn_loss_cls(y_true, y_pred):
                if K.image_dim_ordering() == 'tf':                        

                        tp = K.sum(K.cast( y_true[:, :, :, :num_anchors] * y_pred[:, :, :, :], 'float'), axis=0)
                        fp = K.sum(K.cast((1-y_true[:, :, :, :num_anchors])* y_pred[:, :, :, :], 'float'), axis=0)
                        fn = K.sum(K.cast(y_true[:, :, :, :num_anchors]*(1- y_pred[:, :, :, :]), 'float'), axis=0)

                        p = (tp / (tp + fp + K.epsilon()))
                        r = (tp / (tp + fn + K.epsilon())) 

                        f1 = 2*p*r / (p+r+K.epsilon())
                        f1 = tf.where(tf.is_nan(f1), tf.zeros_like(f1), f1)
                        return 1 - K.mean(f1)


        return rpn_loss_cls

我错过了什么吗?如果没有,我可以进一步寻找什么可能的原因来解释这种奇怪的损失行为?这是使用更快的RCNN存储库:https://github.com/kbardool/keras-frcnn

谢谢:)

0 个答案:

没有答案