1

我正在尝试为 YOLO 定义自定义损失函数,以检测单个类对象的存在并定位其中心(有点地标检测),如从 Andrew NG 那里学到的。49 个网格的每个网格输出一个深度仅为 3 个单位的向量(7*7*3)。第一个通道表示该网格中对象的概率,其他两个预测我的对象中心的坐标以进行地标检测。我最近一直在努力研究张量演算以避免错误的损失函数,但在提高准确性方面遇到了麻烦。

我只是减去所有三个通道,y_truey_pred将第二和第三通道的结果与第一通道矩阵相乘,y_true因为如果第一通道没有预测对象本身的存在,我们不想考虑在第二和第三通道中预测的坐标。

def yol_loss(y_true, y_pred):
    shape = tf.shape( y_true[:, :, :, 0] )
    a=tf.ones([shape[0], shape[1], shape[2] ], tf.float32)
    loss = K.mean((K.square(tf.multiply(y_true[:, :, :, 0], a) - tf.multiply(y_pred[:, :, :, 0],a ))),axis=(1,2)) + 64*K.mean((K.square(tf.multiply(y_true[:, :, :, 0], y_true[:, :, :, 1]) - tf.multiply(y_true[:, :, :, 0],y_pred[:, :, :, 1]))),axis=(1,2)) + 64*K.mean((K.square(tf.multiply(y_true[:, :, :, 0], y_true[:, :, :, 2]) - tf.multiply(y_true[:, :, :, 0],y_pred[:, :, :, 2]))),axis=(1,2))
    return loss
4

0 回答 0