From 0182528dd240f08b06171cb285d7be1babc8c7c3 Mon Sep 17 00:00:00 2001 From: Michael Oliver Date: Fri, 9 Jun 2017 08:19:41 -0700 Subject: [PATCH] Fix DSSIM definition (#99) * Fix DSSIM definition Fix covariance definition: https://github.com/fchollet/keras/issues/4292#issuecomment-306976842 * second fix * fix PEP8 error --- keras_contrib/losses/dssim.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/keras_contrib/losses/dssim.py b/keras_contrib/losses/dssim.py index 0fd7308..735d722 100644 --- a/keras_contrib/losses/dssim.py +++ b/keras_contrib/losses/dssim.py @@ -53,10 +53,9 @@ class DSSIMObjective(): var_true = K.var(patches_true, axis=-1) var_pred = K.var(patches_pred, axis=-1) # Get std dev - std_true = K.sqrt(var_true + KC.epsilon()) - std_pred = K.sqrt(var_pred + KC.epsilon()) + covar_true_pred = K.mean(patches_true * patches_pred, axis=-1) - u_true * u_pred - ssim = (2 * u_true * u_pred + self.c1) * (2 * std_pred * std_true + self.c2) + ssim = (2 * u_true * u_pred + self.c1) * (2 * covar_true_pred + self.c2) denom = (K.square(u_true) + K.square(u_pred) + self.c1) * (var_pred + var_true + self.c2) ssim /= denom # no need for clipping, c1 and c2 make the denom non-zero return K.mean((1.0 - ssim) / 2.0)