25 lines
847 B
Python
25 lines
847 B
Python
import tensorflow as tf
|
|
|
|
|
|
def dense_depth_loss_function(y, y_pred):
|
|
"""
|
|
Implementation of the loss from the dense depth paper https://arxiv.org/pdf/1812.11941.pdf
|
|
"""
|
|
if len(y.shape) == 3:
|
|
y = tf.expand_dims(y, 3)
|
|
if len(y_pred.shape) == 3:
|
|
y_pred = tf.expand_dims(y_pred, 3)
|
|
# Point-wise L1 loss
|
|
l1_depth = tf.reduce_mean(tf.math.abs(y_pred - y), axis=-1)
|
|
|
|
# L1 loss over image gradients
|
|
dy, dx = tf.image.image_gradients(y)
|
|
dy_pred, dx_pred = tf.image.image_gradients(y_pred)
|
|
gradient = tf.reduce_mean(tf.math.abs(dy_pred - dy) +
|
|
tf.math.abs(dx_pred - dx), axis=-1)
|
|
|
|
# Structural Similarity (SSIM)
|
|
ssim = tf.clip_by_value((1 - tf.image.ssim(y, y_pred, 100)) / 2, 0, 1)
|
|
|
|
return 0.1 * tf.reduce_mean(l1_depth) + tf.reduce_mean(gradient) + ssim
|