y_true shape:(batch_size, n_boxes, n_classes)
def log_loss(self, y_true, y_pred):
# 确保y_pred中不含0,否则会使log函数崩溃的
y_pred = tf.maximum(y_pred, 1e-15)
# Compute the log loss
log_loss = -tf.reduce_sum(y_true * tf.log(y_pred), axis=-1)
return log_loss
3 hard negative mining
主要思路:
1.根据正样本的个数和正负比例,确定负样本的个数,negative_keep
2.找到confidence loss最大的negative_keep个负样本,计算他们的分类损失之和
3.计算正样本的分类损失之和,分类损失是正样本和负样本的损失和
4.计算正样本的位置损失localization loss.无法计算负样本位置损失 %>_<%
- 对回归损失和位置损失之和
def compute_loss(self, y_true, y_pred):
self.neg_pos_ratio = tf.constant(self.neg_pos_ratio)
self.n_neg_min = tf.constant(self.n_neg_min)
self.alpha = tf.constant(self.alpha)
batch_size = tf.shape(y_pred)[0] # Output dtype: tf.int32
n_boxes &#