| 489 | |
| 490 | |
| 491 | def evaluate_tsdf_prediction(pred_sdf, gt_sdf, sdf_threshold): |
| 492 | res = {} |
| 493 | |
| 494 | l1_error = torch.abs(pred_sdf - gt_sdf) |
| 495 | rel_error = l1_error / torch.abs(gt_sdf) |
| 496 | acc = (pred_sdf * gt_sdf >= 0).float() |
| 497 | |
| 498 | res["mean_tsdf_l1_error"] = l1_error.mean().item() |
| 499 | res["mean_tsdf_rel_error"] = rel_error.mean().item() |
| 500 | res["mean_tsdf_acc"] = acc.mean().item() |
| 501 | |
| 502 | n = 4 |
| 503 | unit = sdf_threshold / n |
| 504 | threshold_ranges = [i * unit for i in range(n + 1)] + [unit * (n + 1)] |
| 505 | |
| 506 | for i in range(len(threshold_ranges) - 1): |
| 507 | lower = threshold_ranges[i] |
| 508 | upper = threshold_ranges[i + 1] |
| 509 | mask = (gt_sdf.abs() >= lower) & (gt_sdf.abs() < upper) |
| 510 | |
| 511 | res[f"mean_tsdf_l1_error_{i}-{n}-{i + 1}-n"] = l1_error[mask].mean().item() |
| 512 | res[f"mean_tsdf_rel_error_{i}-{n}-{i + 1}-n"] = rel_error[mask].mean().item() |
| 513 | res[f"mean_tsdf_acc_{i}-{n}-{i + 1}-n"] = acc[mask].mean().item() |
| 514 | res[f"mean_tsdf_count_{i}-{n}-{i + 1}-n"] = mask.sum().item() |
| 515 | |
| 516 | return res |