File size: 1,977 Bytes
872b0a0 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | 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()]
|