|
|
@@ -30,51 +30,54 @@ def evaluate(model_paths):
|
|
|
per_view_dict_polytopeonly = {}
|
|
|
|
|
|
for scene_dir in model_paths:
|
|
|
- print("Scene:", scene_dir)
|
|
|
- full_dict[scene_dir] = {}
|
|
|
- per_view_dict[scene_dir] = {}
|
|
|
- full_dict_polytopeonly[scene_dir] = {}
|
|
|
- per_view_dict_polytopeonly[scene_dir] = {}
|
|
|
+ try:
|
|
|
+ print("\nScene:", scene_dir)
|
|
|
+ full_dict[scene_dir] = {}
|
|
|
+ per_view_dict[scene_dir] = {}
|
|
|
+ full_dict_polytopeonly[scene_dir] = {}
|
|
|
+ per_view_dict_polytopeonly[scene_dir] = {}
|
|
|
|
|
|
- test_dir = Path(scene_dir) / "test"
|
|
|
+ test_dir = Path(scene_dir) / "test"
|
|
|
|
|
|
- for method in os.listdir(test_dir):
|
|
|
- print("Method:", method)
|
|
|
+ for method in os.listdir(test_dir):
|
|
|
+ print("Method:", method)
|
|
|
|
|
|
- full_dict[scene_dir][method] = {}
|
|
|
- per_view_dict[scene_dir][method] = {}
|
|
|
- full_dict_polytopeonly[scene_dir][method] = {}
|
|
|
- per_view_dict_polytopeonly[scene_dir][method] = {}
|
|
|
+ full_dict[scene_dir][method] = {}
|
|
|
+ per_view_dict[scene_dir][method] = {}
|
|
|
+ full_dict_polytopeonly[scene_dir][method] = {}
|
|
|
+ per_view_dict_polytopeonly[scene_dir][method] = {}
|
|
|
|
|
|
- method_dir = test_dir / method
|
|
|
- gt_dir = method_dir/ "gt"
|
|
|
- renders_dir = method_dir / "renders"
|
|
|
- renders, gts, image_names = readImages(renders_dir, gt_dir)
|
|
|
+ method_dir = test_dir / method
|
|
|
+ gt_dir = method_dir/ "gt"
|
|
|
+ renders_dir = method_dir / "renders"
|
|
|
+ renders, gts, image_names = readImages(renders_dir, gt_dir)
|
|
|
|
|
|
- ssims = []
|
|
|
- psnrs = []
|
|
|
- lpipss = []
|
|
|
+ ssims = []
|
|
|
+ psnrs = []
|
|
|
+ lpipss = []
|
|
|
|
|
|
- for idx in tqdm(range(len(renders)), desc="Metric evaluation progress"):
|
|
|
- ssims.append(ssim(renders[idx], gts[idx]))
|
|
|
- psnrs.append(psnr(renders[idx], gts[idx]))
|
|
|
- lpipss.append(lpips(renders[idx], gts[idx], net_type='vgg'))
|
|
|
+ for idx in tqdm(range(len(renders)), desc="Metric evaluation progress"):
|
|
|
+ ssims.append(ssim(renders[idx], gts[idx]))
|
|
|
+ psnrs.append(psnr(renders[idx], gts[idx]))
|
|
|
+ lpipss.append(lpips(renders[idx], gts[idx], net_type='vgg'))
|
|
|
|
|
|
- print("SSIM: {}".format(torch.tensor(ssims).mean()))
|
|
|
- print("PSNR: {}".format(torch.tensor(psnrs).mean()))
|
|
|
- print("LPIPS: {}".format(torch.tensor(lpipss).mean()))
|
|
|
+ print(" SSIM : {:>12.7f}".format(torch.tensor(ssims).mean(), ".5"))
|
|
|
+ print(" PSNR : {:>12.7f}".format(torch.tensor(psnrs).mean(), ".5"))
|
|
|
+ print(" LPIPS: {:>12.7f}".format(torch.tensor(lpipss).mean(), ".5"), "\n")
|
|
|
|
|
|
- full_dict[scene_dir][method].update({"SSIM": torch.tensor(ssims).mean().item(),
|
|
|
- "PSNR": torch.tensor(psnrs).mean().item(),
|
|
|
- "LPIPS": torch.tensor(lpipss).mean().item()})
|
|
|
- per_view_dict[scene_dir][method].update({"SSIM": {name: ssim for ssim, name in zip(torch.tensor(ssims).tolist(), image_names)},
|
|
|
- "PSNR": {name: psnr for psnr, name in zip(torch.tensor(psnrs).tolist(), image_names)},
|
|
|
- "LPIPS": {name: lp for lp, name in zip(torch.tensor(lpipss).tolist(), image_names)}})
|
|
|
+ full_dict[scene_dir][method].update({"SSIM": torch.tensor(ssims).mean().item(),
|
|
|
+ "PSNR": torch.tensor(psnrs).mean().item(),
|
|
|
+ "LPIPS": torch.tensor(lpipss).mean().item()})
|
|
|
+ per_view_dict[scene_dir][method].update({"SSIM": {name: ssim for ssim, name in zip(torch.tensor(ssims).tolist(), image_names)},
|
|
|
+ "PSNR": {name: psnr for psnr, name in zip(torch.tensor(psnrs).tolist(), image_names)},
|
|
|
+ "LPIPS": {name: lp for lp, name in zip(torch.tensor(lpipss).tolist(), image_names)}})
|
|
|
|
|
|
- with open(scene_dir + "/results.json", 'w') as fp:
|
|
|
- json.dump(full_dict[scene_dir], fp, indent=True)
|
|
|
- with open(scene_dir + "/per_view.json", 'w') as fp:
|
|
|
- json.dump(per_view_dict[scene_dir], fp, indent=True)
|
|
|
+ with open(scene_dir + "/results.json", 'w') as fp:
|
|
|
+ json.dump(full_dict[scene_dir], fp, indent=True)
|
|
|
+ with open(scene_dir + "/per_view.json", 'w') as fp:
|
|
|
+ json.dump(per_view_dict[scene_dir], fp, indent=True)
|
|
|
+ except:
|
|
|
+ print("Unable to compute metrics for model", scene_dir)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
device = torch.device("cuda:0")
|