Download scripts/plot_densification_timeseries.py from KCBtheone/SplatAtlas: direct link, hf CLI and curl.
- Browser
- Download file 2.23 kB
-
https://huggingface.co/KCBtheone/SplatAtlas/resolve/main/scripts/plot_densification_timeseries.py
- Command line
-
hf download hf://KCBtheone/SplatAtlas/scripts/plot_densification_timeseries.py
-
curl -L -o plot_densification_timeseries.py https://huggingface.co/KCBtheone/SplatAtlas/resolve/main/scripts/plot_densification_timeseries.py
2.23 kB
| """Plot edge/flat densification-event ratio over training steps (Exp 2 curve).""" | |
| import os, json, argparse | |
| import matplotlib | |
| matplotlib.use("Agg") | |
| import matplotlib.pyplot as plt | |
| import numpy as np | |
| def main(): | |
| ap = argparse.ArgumentParser() | |
| ap.add_argument("--methods", nargs="+", default=["vanilla_logged","vanillasgf_logged"]) | |
| ap.add_argument("--scenes", nargs="+", default=["francis","m60","panther","bonsai","bicycle","garden"]) | |
| ap.add_argument("--outputs_root", default="/root/autodl-tmp/SplatAtlas/outputs") | |
| ap.add_argument("--out", default="/root/autodl-tmp/SplatAtlas/densification_timeseries.png") | |
| ap.add_argument("--bin_size", type=int, default=1000) | |
| args = ap.parse_args() | |
| fig, ax = plt.subplots(figsize=(8, 5)) | |
| colors = {"vanilla_logged":"#888888", "vanillasgf_logged":"#1f77b4"} | |
| for method in args.methods: | |
| all_steps, all_ratios = [], [] | |
| for scene in args.scenes: | |
| p = os.path.join(args.outputs_root, f"{method}_{scene}", "densification_events.json") | |
| if not os.path.exists(p): continue | |
| for e in json.load(open(p)): | |
| all_steps.append(e["step"]) | |
| all_ratios.append(e["n_edge"] / max(e["n_flat"], 1)) | |
| if not all_steps: | |
| print(f"no data for {method}"); continue | |
| steps, ratios = np.array(all_steps), np.array(all_ratios) | |
| bins = np.arange(0, int(steps.max())+args.bin_size, args.bin_size) | |
| bc, bm = [], [] | |
| for i in range(len(bins)-1): | |
| m = (steps >= bins[i]) & (steps < bins[i+1]) | |
| if m.sum() > 0: | |
| bc.append((bins[i]+bins[i+1])/2); bm.append(ratios[m].mean()) | |
| ax.plot(bc, bm, label=method, marker='o', markersize=4, linewidth=1.5, | |
| color=colors.get(method)) | |
| ax.axhline(1.0, color="black", linewidth=0.5, linestyle="--", alpha=0.5) | |
| ax.set_xlabel("Training step"); ax.set_ylabel("Edge / Flat densification-event ratio") | |
| ax.legend(loc="best", frameon=False) | |
| ax.set_title("Densification event redistribution over training") | |
| plt.tight_layout(); plt.savefig(args.out, dpi=120, bbox_inches="tight") | |
| print(f"saved {args.out}") | |
| if __name__ == "__main__": | |
| main() | |