我正在尝试为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
谢谢:)