import json,glob,sys,numpy as np EV="/lp-dev/jonghoon/mv-mesh/.debug_overnight_maintable/results/eval" def good(r): return r.get("geometry") and r.get("input_view") and r.get("novel_view") and "error" not in r def load(pat): d={} for p in sorted(glob.glob(pat)): for r in json.load(open(p)): if r["object"] not in d or (good(r) and not good(d[r["object"]])): d[r["object"]]=r return d def summ(d): ok=[r for r in d.values() if r.get("geometry") and r.get("input_view") and r.get("novel_view")] def m(f): return float(np.mean([f(r) for r in ok])) return dict(n=len(ok), lpips=m(lambda r:(r["input_view"]["lpips"]+r["novel_view"]["lpips"])/2), psnr=m(lambda r:(r["input_view"]["psnr"]+r["novel_view"]["psnr"])/2), ssim=m(lambda r:(r["input_view"]["ssim"]+r["novel_view"]["ssim"])/2), cd=m(lambda r:r["geometry"]["cd_l1"]), f01=m(lambda r:r["geometry"]["fscore"]["0.01"]["f"])) rows=[] for m,new in [("rvg","alignv2"),("amodal3r","alignv2"),("hy3d2mv","alignv2"),("pixal3d","cammap")]: o=load(f"{EV}/{m}_toys4k300_1v/results.json"); n=load(f"{EV}/{m}_toys4k300_1v_{new}/*/results.json") ks=set(o)&set(n) so=summ({k:o[k] for k in ks}); sn=summ({k:n[k] for k in ks}) for tag,s in [("old",so),(new,sn)]: print(f"{m:9s} {tag:8s} n={s['n']:3d} LPIPS {s['lpips']:.4f} PSNR {s['psnr']:.2f} SSIM {s['ssim']:.3f} CD {s['cd']:.4f} F@.01 {s['f01']:.3f}")