mapvggt / mapgs /eval /report.py
ChenmingWu's picture
Upload folder using huggingface_hub
b2efbe4 verified
Raw
History Blame Contribute Delete
3.11 kB
"""Render measured metrics into the §4 protocol-template tables.
Per the design's integrity note, only the MapGS column is filled (with your
measured values); baseline columns are emitted as ``TBD`` and must be produced
by re-running each baseline — never pasted across datasets.
"""
from __future__ import annotations
from typing import Dict
FF_BASELINES = ["STORM", "DGGT", "PointForward", "TokenGS"]
def _fmt(x, nd=3):
if x != x: # NaN
return "n/a"
return f"{x:.{nd}f}"
def interpolation_table(by_dataset: Dict[str, Dict[str, float]]) -> str:
lines = ["### 4.2 Interpolation (held-out frames) — measured MapGS\n",
"| Dataset | PSNR↑ | SSIM↑ | LPIPS↓ | D-RMSE↓ (m) |",
"|---|---|---|---|---|"]
for ds, m in by_dataset.items():
lines.append(f"| {ds} | {_fmt(m['PSNR'],2)} | {_fmt(m['SSIM'])} | "
f"{_fmt(m['LPIPS'])} | {_fmt(m['D-RMSE'])} |")
lines.append("\n_Baselines (STORM/DGGT/PointForward/TokenGS): TBD — re-run with verified provenance._")
return "\n".join(lines)
def extrapolation_table(sweep: Dict[float, Dict[str, float]], metric: str = "FID") -> str:
shifts = sorted(sweep.keys())
direction = "higher is better" if metric in ("PSNR", "SSIM") else "lower is better"
header = "| Lateral shift (m) | " + " | ".join(FF_BASELINES) + " | MapGS | MapGS+TT |"
sep = "|" + "---|" * (len(FF_BASELINES) + 3)
lines = [f"### 4.3 Out-of-trajectory extrapolation — {metric} ({direction}), measured MapGS\n",
header, sep]
for sh in shifts:
base = " | ".join(["TBD"] * len(FF_BASELINES))
val = _fmt(sweep[sh].get(metric, float("nan")), 2)
lines.append(f"| {sh:g} | {base} | {val} | TBD |")
lines.append("\n_Also reports PSNR/SSIM per shift; baseline + MapGS+TT columns: TBD._")
return "\n".join(lines)
def lane_table(m: Dict[str, float]) -> str:
return ("### 4.4 Semantic consistency — measured MapGS\n\n"
f"| Metric | MapGS |\n|---|---|\n"
f"| lane mIoU↑ (vs projected map) | {_fmt(m['lane_mIoU'])} |\n"
f"| rendered-lane reprojection (px)↓ | {_fmt(m['lane_chamfer_px'],2)} |\n\n"
"_CondLaneNet-based lane mIoU on real data: TBD._")
def write_report(path: str, interpolation=None, extrapolation=None, lane=None, header: str = ""):
parts = ["# MapGS evaluation report",
"",
"> All numbers are **measured on this run's data**. Baseline columns are TBD: "
"reproduce or cite-with-verified-provenance; never paste numbers across dataset columns.",
""]
if header:
parts += [header, ""]
if interpolation is not None:
parts += [interpolation_table(interpolation), ""]
if extrapolation is not None:
parts += [extrapolation_table(extrapolation, "FID"), "",
extrapolation_table(extrapolation, "PSNR"), ""]
if lane is not None:
parts += [lane_table(lane), ""]
text = "\n".join(parts)
with open(path, "w") as fh:
fh.write(text)
return text