bkerbl před 2 roky
rodič
revize
45a9877ac4
2 změnil soubory, kde provedl 40 přidání a 37 odebrání
  1. 1 1
      SIBR_viewers_windows
  2. 39 36
      metrics.py

+ 1 - 1
SIBR_viewers_windows

@@ -1 +1 @@
-Subproject commit f9b5d03bc86c8fabd8d7a26fabff91129618b4ce
+Subproject commit 71ced0023fd0c0aaaa83bb1ab32bce1d4ed630c7

+ 39 - 36
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")