diff --git a/SIBR_viewers_windows b/SIBR_viewers_windows index f9b5d03..71ced00 160000 --- a/SIBR_viewers_windows +++ b/SIBR_viewers_windows @@ -1 +1 @@ -Subproject commit f9b5d03bc86c8fabd8d7a26fabff91129618b4ce +Subproject commit 71ced0023fd0c0aaaa83bb1ab32bce1d4ed630c7 diff --git a/metrics.py b/metrics.py index 469a415..f59949a 100644 --- a/metrics.py +++ b/metrics.py @@ -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")