def loss_sirmse_DepthNorm(truth, pred, mindepth=args.mindepth, maxdepth=args.maxdepth): truth = DepthNorm(truth, maxdepth) one_shape = tf.ones_like(truth, dtype=tf.float32) zero_shape = tf.zeros_like(truth, dtype=tf.float32) thresh = tf.constant(mindepth, dtype=tf.float32) mask = tf.where(tf.greater(truth, thresh), one_shape, zero_shape) num_pixels = K.cast(K.sum(mask), tf.float32) # pred = pred * 1000 pred = DepthNorm(pred, maxdepth) pred = tf.clip_by_value(pred, mindepth, maxdepth) log_diff = tf.math.multiply((tf.math.log(pred) - tf.math.log(truth)), mask) loss_si_rmse = K.sqrt( K.sum(K.square(log_diff)) / num_pixels - K.square(K.sum(log_diff)) / K.square(num_pixels)) return loss_si_rmse
def loss_rmse_DepthNorm(truth, pred, mindepth=args.mindepth, maxdepth=args.maxdepth): truth = DepthNorm(truth, maxdepth) one_shape = tf.ones_like(truth, dtype=tf.float32) zero_shape = tf.zeros_like(truth, dtype=tf.float32) thresh = tf.constant(mindepth, dtype=tf.float32) mask = tf.where(tf.greater(truth, thresh), one_shape, zero_shape) num_pixels = K.cast(K.sum(mask), tf.float32) # pred = pred * 1000 pred = DepthNorm(pred, maxdepth) pred = tf.clip_by_value(pred, mindepth, maxdepth) diff = tf.math.multiply( pred - truth, mask) / 1000.0 # mapping the distance from millimeters to meters loss_mse = K.sum(K.square(diff)) / num_pixels loss_rmse = K.sqrt(loss_mse) return loss_rmse
def load_label(self, label_path): label = np.asarray(Image.open(label_path)).astype(np.float32).reshape( *self.image_shape, 1) if self.select_label_mode == "baseline1": label = np.where(label == 0.0, self.max_depth, label) label = np.clip(label, self.min_depth, self.max_depth) elif self.select_label_mode == "baseline": label = np.clip(label, self.min_depth, self.max_depth) elif self.select_label_mode == "Norm1": label = np.where(label == 0.0, self.max_depth, label) label = np.clip(label, self.min_depth, self.max_depth) label = DepthNorm(label, self.max_depth) elif self.select_label_mode == "Norm": label = np.clip(label, self.min_depth, self.max_depth) label = DepthNorm(label, self.max_depth) elif self.select_label_mode == "log": label = np.clip(label, self.min_depth, self.max_depth) label = np.log(label) elif self.select_label_mode == "log1": label = np.where(label == 0.0, self.max_depth, label) label = np.clip(label, self.min_depth, self.max_depth) label = np.log(label) return label