| |
| """Evaluate MapGS and write the §4 protocol-template report. |
| |
| python scripts/eval.py --config configs/synthetic_smoke.yaml --ckpt runs/mapgs_synth/ckpt_final.pt |
| """ |
|
|
| import argparse |
|
|
| import torch |
|
|
| from mapgs.config import load_config |
| from mapgs.data import build_dataset |
| from mapgs.eval import Evaluator, write_report |
| from mapgs.model import MapGS |
|
|
|
|
| def main(): |
| ap = argparse.ArgumentParser() |
| ap.add_argument("--config", type=str, default=None) |
| ap.add_argument("--override", nargs="*", default=[]) |
| ap.add_argument("--ckpt", type=str, default=None) |
| ap.add_argument("--split", type=str, default="val") |
| ap.add_argument("--out", type=str, default="eval_report.md") |
| ap.add_argument("--max-scenes", type=int, default=50) |
| ap.add_argument("--tt", action="store_true", help="apply test-time token tuning") |
| args = ap.parse_args() |
|
|
| cfg = load_config(args.config, args.override) |
| model = MapGS(cfg).to(cfg.device) |
| if args.ckpt: |
| ckpt = torch.load(args.ckpt, map_location=cfg.device, weights_only=False) |
| model.load_state_dict(ckpt["model"]) |
| print(f"loaded {args.ckpt}") |
| model.eval() |
|
|
| dataset = build_dataset(cfg, args.split) |
| ev = Evaluator(model, cfg, device=cfg.device) |
| interp = ev.interpolation(dataset, max_scenes=args.max_scenes) |
| print("interpolation:", interp) |
| sweep = ev.extrapolation_sweep(dataset, max_scenes=min(args.max_scenes, 30)) |
| for sh, m in sweep.items(): |
| print(f" shift {sh}m:", m) |
| lane = ev.lane_consistency(dataset, max_scenes=min(args.max_scenes, 30)) |
| print("lane:", lane) |
| write_report(args.out, interpolation={cfg.data.name: interp}, extrapolation=sweep, lane=lane) |
| print(f"report written to {args.out}") |
|
|
|
|
| if __name__ == "__main__": |
| main() |
|
|