from evaluation_utils import * def process_depth(gt_depth, pred_depth, min_depth, max_depth): mask = gt_depth > 0 pred_depth[pred_depth < min_depth] = min_depth pred_depth[pred_depth > max_depth] = max_depth gt_depth[gt_depth < min_depth] = min_depth gt_depth[gt_depth > max_depth] = max_depth return gt_depth, pred_depth, mask def eval_depth(gt_depths, pred_depths, min_depth=1e-3, max_depth=80, nyu=False): num_samples = len(pred_depths) rms = np.zeros(num_samples, np.float32) log_rms = np.zeros(num_samples, np.float32) abs_rel = np.zeros(num_samples, np.float32) sq_rel = np.zeros(num_samples, np.float32) d1_all = np.zeros(num_samples, np.float32) a1 = np.zeros(num_samples, np.float32) a2 = np.zeros(num_samples, np.float32) a3 = np.zeros(num_samples, np.float32) for i in range(num_samples): gt_depth = gt_depths[i] pred_depth = pred_depths[i] mask = np.logical_and(gt_depth > min_depth, gt_depth < max_depth) if not nyu: gt_height, gt_width = gt_depth.shape crop = np.array([0.40810811 * gt_height, 0.99189189 * gt_height, 0.03594771 * gt_width, 0.96405229 * gt_width]).astype(np.int32) crop_mask = np.zeros(mask.shape) crop_mask[crop[0]:crop[1], crop[2]:crop[3]] = 1 mask = np.logical_and(mask, crop_mask) gt_depth = gt_depth[mask] pred_depth = pred_depth[mask] scale = np.median(gt_depth) / np.median(pred_depth) pred_depth *= scale gt_depth, pred_depth, mask = process_depth( gt_depth, pred_depth, min_depth, max_depth) abs_rel[i], sq_rel[i], rms[i], log_rms[i], a1[i], a2[i], a3[ i] = compute_errors(gt_depth, pred_depth, nyu=nyu) return [abs_rel.mean(), sq_rel.mean(), rms.mean(), log_rms.mean(), a1.mean(), a2.mean(), a3.mean()]