Keras / Tensorflow:图像梯度损失

时间:2018-08-04 15:34:55

标签: python opencv tensorflow keras gradient

我知道如何在Keras中创建自定义损失函数,例如:

# scale invariant error
def sie(y_true, y_pred):
    epsilon = 1e-6
    log_pred = K.log(y_pred + epsilon)
    log_true = K.log(y_true + epsilon)
    d = (log_pred - log_true)
    return K.mean(K.square(d)) - (K.mean(d) ** 2)

# and then when compiling the model
model.compile(loss='mse', ...)

但是现在我需要找到图像之间的梯度损耗,然后使用opencv sobel滤波器对其进行计算

def gradient_loss_abs(gt, pd):
    sobelx_gt = cv2.Sobel(gt, cv2.CV_64F, 1, 0, ksize=3)
    sobely_gt = cv2.Sobel(gt, cv2.CV_64F, 0, 1, ksize=3)

    sobelx_pd = cv2.Sobel(pd, cv2.CV_64F, 1, 0, ksize=3)
    sobely_pd = cv2.Sobel(pd, cv2.CV_64F, 0, 1, ksize=3)

    loss = np.mean(np.abs(sobelx_gt - sobelx_pd) + np.abs(sobely_gt - sobely_pd))
    return loss

是否有keras.backend个等价物?另外,如何对多个图像批量执行这样的操作?

如何计算地面真实图像和预测图像之间的图像梯度损失,并将其纳入损失函数?

我发现对Stackoverflow的一些尝试,例如this questionanother one,其中在loss函数中尝试了opencv。我知道,要使差异自动发挥作用,我们只需要使用keras.backend所定义的内容,但是我相信image gradient loss是一种流行的语言,许多人都想使用(或使用它)。

0 个答案:

没有答案