Я пытаюсь повторно реализовать потерю счета F1 для главы классификации RPN Faster RCNN. Однако, с моей (с использованием Keras и Tensorflow backend) реализацией ниже, потеря застряла на уровне ~ 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
Я что-то упустил? Если нет, какие возможные причины я могу дополнительно изучить, чтобы объяснить это странное поведение потери? Вот репозиторий Faster RCNN, который я использую: https://github.com/kbardool/keras-frcnn
Спасибо:)