소스 검색

more eval

Felix Kleinsteuber 3 년 전
부모
커밋
d7d2362438
100개의 변경된 파일55개의 추가작업 그리고 35개의 파일을 삭제
  1. 2 1
      .gitignore
  2. 9 7
      approach1a_basic_frame_differencing.ipynb
  3. 12 9
      approach2_background_estimation.ipynb
  4. BIN
      approach3_dsift.png
  5. BIN
      approach3_keypoints.pdf
  6. BIN
      approach3_keypoints_lapse.pdf
  7. 0 0
      approach3_local_features.ipynb
  8. 6 6
      approach4_autoencoder.ipynb
  9. BIN
      approach4_difficult_anomalous_beaver_01.png
  10. BIN
      approach4_difficult_anomalous_marten_01.png
  11. BIN
      approach4_difficult_normal_beaver_01.png
  12. BIN
      approach4_difficult_normal_marten_01.png
  13. BIN
      approach4_easy_anomalous_beaver_01.png
  14. BIN
      approach4_easy_anomalous_marten_01.png
  15. BIN
      approach4_easy_normal_beaver_01.png
  16. BIN
      approach4_easy_normal_marten_01.png
  17. 10 5
      eval_autoencoder.py
  18. 16 7
      eval_bow.py
  19. BIN
      imgs/approach1a_lapse.pdf
  20. BIN
      imgs/approach1a_motion.pdf
  21. BIN
      imgs/approach1a_sigma4_lapse.pdf
  22. BIN
      imgs/approach1a_sigma4_motion.pdf
  23. BIN
      imgs/approach1a_sigma4_sqdiff.pdf
  24. BIN
      imgs/approach1a_sqdiff.pdf
  25. BIN
      plots/approach1a/roc_curves/Beaver_01_absmean.pdf
  26. BIN
      plots/approach1a/roc_curves/Beaver_01_absmean_sigma2.pdf
  27. BIN
      plots/approach1a/roc_curves/Beaver_01_absmean_sigma4.pdf
  28. BIN
      plots/approach1a/roc_curves/Beaver_01_absmean_sigma4.png
  29. BIN
      plots/approach1a/roc_curves/Beaver_01_absmean_sigma6.pdf
  30. BIN
      plots/approach1a/roc_curves/Beaver_01_absmean_sigma6.png
  31. BIN
      plots/approach1a/roc_curves/Beaver_01_absvar.pdf
  32. BIN
      plots/approach1a/roc_curves/Beaver_01_absvar_sigma2.pdf
  33. BIN
      plots/approach1a/roc_curves/Beaver_01_absvar_sigma4.pdf
  34. BIN
      plots/approach1a/roc_curves/Beaver_01_absvar_sigma4.png
  35. BIN
      plots/approach1a/roc_curves/Beaver_01_absvar_sigma6.pdf
  36. BIN
      plots/approach1a/roc_curves/Beaver_01_absvar_sigma6.png
  37. BIN
      plots/approach1a/roc_curves/Beaver_01_sqmean.pdf
  38. BIN
      plots/approach1a/roc_curves/Beaver_01_sqmean_sigma2.pdf
  39. BIN
      plots/approach1a/roc_curves/Beaver_01_sqmean_sigma4.pdf
  40. BIN
      plots/approach1a/roc_curves/Beaver_01_sqmean_sigma4.png
  41. BIN
      plots/approach1a/roc_curves/Beaver_01_sqmean_sigma6.pdf
  42. BIN
      plots/approach1a/roc_curves/Beaver_01_sqmean_sigma6.png
  43. BIN
      plots/approach1a/roc_curves/Beaver_01_sqvar.pdf
  44. BIN
      plots/approach1a/roc_curves/Beaver_01_sqvar_sigma2.pdf
  45. BIN
      plots/approach1a/roc_curves/Beaver_01_sqvar_sigma4.pdf
  46. BIN
      plots/approach1a/roc_curves/Beaver_01_sqvar_sigma4.png
  47. BIN
      plots/approach1a/roc_curves/Beaver_01_sqvar_sigma6.pdf
  48. BIN
      plots/approach1a/roc_curves/Beaver_01_sqvar_sigma6.png
  49. BIN
      plots/approach2/roc_curves/Beaver_01_sqmean.pdf
  50. BIN
      plots/approach2/roc_curves/Beaver_01_sqmean.png
  51. BIN
      plots/approach2/roc_curves/Beaver_01_sqmean_sigma2.pdf
  52. BIN
      plots/approach2/roc_curves/Beaver_01_sqmean_sigma2.png
  53. BIN
      plots/approach2/roc_curves/Beaver_01_sqmean_sigma4.pdf
  54. BIN
      plots/approach2/roc_curves/Beaver_01_sqmean_sigma4.png
  55. BIN
      plots/approach2/roc_curves/Beaver_01_sqmean_sigma6.pdf
  56. BIN
      plots/approach2/roc_curves/Beaver_01_sqmean_sigma6.png
  57. BIN
      plots/approach2/roc_curves/Beaver_01_sqvar.pdf
  58. BIN
      plots/approach2/roc_curves/Beaver_01_sqvar.png
  59. BIN
      plots/approach2/roc_curves/Beaver_01_sqvar_sigma2.pdf
  60. BIN
      plots/approach2/roc_curves/Beaver_01_sqvar_sigma2.png
  61. BIN
      plots/approach2/roc_curves/Beaver_01_sqvar_sigma4.pdf
  62. BIN
      plots/approach2/roc_curves/Beaver_01_sqvar_sigma4.png
  63. BIN
      plots/approach2/roc_curves/Beaver_01_sqvar_sigma6.pdf
  64. BIN
      plots/approach2/roc_curves/Beaver_01_sqvar_sigma6.png
  65. BIN
      plots/approach3/roc_curves/Beaver_01_30_30_1024.pdf
  66. BIN
      plots/approach3/roc_curves/Beaver_01_30_30_1024.png
  67. BIN
      plots/approach4/roc_curves/Beaver_01_kde.pdf
  68. BIN
      plots/approach4/roc_curves/Beaver_01_kde.png
  69. BIN
      plots/approach4/roc_curves/Beaver_01_loss.pdf
  70. BIN
      plots/approach4/roc_curves/Beaver_01_loss.png
  71. BIN
      plots/approach4/roc_curves/GFox_03_kde,loss.pdf
  72. BIN
      plots/approach4/roc_curves/GFox_03_kde,loss.png
  73. BIN
      plots/approach4/roc_curves/GFox_03_kde.pdf
  74. BIN
      plots/approach4/roc_curves/GFox_03_kde.png
  75. BIN
      plots/approach4/roc_curves/GFox_03_loss.pdf
  76. BIN
      plots/approach4/roc_curves/GFox_03_loss.png
  77. BIN
      plots/approach4/roc_curves/Marten_01_kde,loss.pdf
  78. BIN
      plots/approach4/roc_curves/Marten_01_kde,loss.png
  79. BIN
      plots/approach4/roc_curves/Marten_01_kde.pdf
  80. BIN
      plots/approach4/roc_curves/Marten_01_loss.pdf
  81. BIN
      plots/approach4/roc_curves/Marten_01_loss.png
  82. BIN
      plots/approach4/roc_curves/ae2_deep_beaver_01_Beaver_01_kde.pdf
  83. BIN
      plots/approach4/roc_curves/ae2_deep_beaver_01_Beaver_01_kde.png
  84. BIN
      plots/approach4/roc_curves/ae2_deep_beaver_01_Beaver_01_loss.pdf
  85. BIN
      plots/approach4/roc_curves/ae2_deep_beaver_01_Beaver_01_loss.png
  86. BIN
      plots/approach4/roc_curves/ae2_deep_beaver_01_exp_Beaver_01_kde.pdf
  87. BIN
      plots/approach4/roc_curves/ae2_deep_beaver_01_exp_Beaver_01_kde.png
  88. BIN
      plots/approach4/roc_curves/ae2_deep_beaver_01_nodo_Beaver_01_kde.pdf
  89. BIN
      plots/approach4/roc_curves/ae2_deep_beaver_01_nodo_Beaver_01_kde.png
  90. BIN
      plots/approach4/roc_curves/ae2_deep_gfox_03_GFox_03_kde.pdf
  91. BIN
      plots/approach4/roc_curves/ae2_deep_gfox_03_GFox_03_kde.png
  92. BIN
      plots/approach4/roc_curves/ae2_deep_gfox_03_GFox_03_loss.pdf
  93. BIN
      plots/approach4/roc_curves/ae2_deep_gfox_03_GFox_03_loss.png
  94. BIN
      plots/approach4/roc_curves/ae2_deep_marten_01_Marten_01_kde,loss.pdf
  95. BIN
      plots/approach4/roc_curves/ae2_deep_marten_01_Marten_01_kde,loss.png
  96. BIN
      plots/approach4/roc_curves/ae2_deep_marten_01_Marten_01_kde.pdf
  97. BIN
      plots/approach4/roc_curves/ae2_deep_marten_01_Marten_01_kde.png
  98. BIN
      plots/approach4/roc_curves/ae2_deep_marten_01_Marten_01_loss.pdf
  99. BIN
      plots/approach4/roc_curves/ae2_deep_marten_01_Marten_01_loss.png
  100. BIN
      plots/approach4/roc_curves/ae2_deep_marten_01_exp_Marten_01_kde.pdf

+ 2 - 1
.gitignore

@@ -1,3 +1,4 @@
 *.jpg
 __pycache__
-*_NoBackup
+*_NoBackup
+*.sh

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 9 - 7
approach1a_basic_frame_differencing.ipynb


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 12 - 9
approach2_background_estimation.ipynb


BIN
approach3_dsift.png


BIN
approach3_keypoints.pdf


BIN
approach3_keypoints_lapse.pdf


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
approach3_local_features.ipynb


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 6 - 6
approach4_autoencoder.ipynb


BIN
approach4_difficult_anomalous_beaver_01.png


BIN
approach4_difficult_anomalous_marten_01.png


BIN
approach4_difficult_normal_beaver_01.png


BIN
approach4_difficult_normal_marten_01.png


BIN
approach4_easy_anomalous_beaver_01.png


BIN
approach4_easy_anomalous_marten_01.png


BIN
approach4_easy_normal_beaver_01.png


BIN
approach4_easy_normal_marten_01.png


+ 10 - 5
eval_autoencoder.py

@@ -15,7 +15,7 @@ from torch.utils.data import DataLoader
 from py.FileUtils import dump
 from py.Dataset import Dataset
 from py.PyTorchData import create_dataloader
-from py.Autoencoder3 import Autoencoder
+from py.Autoencoder2 import Autoencoder
 from py.Labels import LABELS
 
 TRAIN_FOLDER = "./ae_train_NoBackup"
@@ -32,10 +32,11 @@ def load_autoencoder(train_name: str, device: str = "cpu", model_number: int = -
     print("Loaded!")
     return model
 
-def eval_autoencoder(model: Autoencoder, data_loader: DataLoader, device: str = "cpu"):
+def eval_autoencoder(model: Autoencoder, data_loader: DataLoader, device: str = "cpu", include_images: bool = False):
     losses = [] # reconstruction errors
     encodings = [] # latent representations for KDE
     labels = []
+    imgs = [] # input images (optional)
 
     with torch.no_grad():
         model = model.to(device)
@@ -54,7 +55,9 @@ def eval_autoencoder(model: Autoencoder, data_loader: DataLoader, device: str =
             for input, enc, output in zip(features, encoded_flat, output_batch):
                 encodings.append(enc)
                 losses.append(criterion(input, output).cpu().numpy())
-    return np.array(losses), np.array(encodings), np.array(labels)
+                if include_images:
+                    imgs.append(input.cpu().numpy())
+    return np.array(losses), np.array(encodings), np.array(labels), np.array(imgs)
 
 def main():
     parser = argparse.ArgumentParser(description="Autoencoder eval script - evaluates Motion and Lapse images of session")
@@ -66,6 +69,7 @@ def main():
     parser.add_argument("--latent", type=int, help="Number of latent features", default=512)
     parser.add_argument("--model_number", type=int, help="Load model save of specific epoch (default: use latest)", default=-1)
     parser.add_argument("--image_transforms", action="store_true", help="Truncate and resize images (only enable if the input images have not been truncated resized to the target size already)")
+    parser.add_argument("--include_images", action="store_true", help="Include input images in Motion eval file")
     
 
     args = parser.parse_args()
@@ -82,8 +86,9 @@ def main():
     train_dir = os.path.join(TRAIN_FOLDER, args.name)
     save_dir = os.path.join(train_dir, "eval")
     os.makedirs(save_dir, exist_ok=True)
+    suffix = "_withimgs" if args.include_images else ""
     lapse_eval_file = os.path.join(save_dir, f"{session.name}_lapse.pickle")
-    motion_eval_file = os.path.join(save_dir, f"{session.name}_motion.pickle")
+    motion_eval_file = os.path.join(save_dir, f"{session.name}_motion{suffix}.pickle")
 
     # Load model
     model = load_autoencoder(args.name, args.device, args.model_number, latent_features=args.latent)
@@ -123,7 +128,7 @@ def main():
     else:
         print("Creating motion data loader... ", end="")
         motion_loader = create_dataloader(session.get_motion_folder(), batch_size=args.batch_size, skip_transforms=not args.image_transforms, shuffle=False, labeler=labeler, filter=is_labeled)
-        results = eval_autoencoder(model, motion_loader, args.device)
+        results = eval_autoencoder(model, motion_loader, args.device, include_images=args.include_images)
         dump(motion_eval_file, results)
         print(f"Results saved to {motion_eval_file}!")
     print("Done.")

+ 16 - 7
eval_bow.py

@@ -7,6 +7,7 @@ import argparse
 import os
 import numpy as np
 from sklearn import svm
+from tqdm import tqdm
 
 from py.Dataset import Dataset
 from py.LocalFeatures import generate_bow_features
@@ -49,18 +50,26 @@ def main():
         print(f"ERROR: Eval file already exists! ({eval_file})")
     else:
         print(f"Loading dictionary from {dictionary_file}...")
-        dictionary = np.load(dictionary_file)
+        dictionaries = np.load(dictionary_file)
+        print(f"Shape of dictionaries: {dictionaries.shape}") # (num_dicts, dict_size, 128)
+        assert len(dictionaries.shape) == 3 and dictionaries.shape[2] == 128
         print(f"Loading training data from {train_feat_file}...")
-        train_data = np.load(train_feat_file).squeeze()
+        train_data = np.load(train_feat_file)
+        print(f"Shape of training data: {train_data.shape}") # (num_train_images, num_dicts, 1, dict_size)
+        assert len(train_data.shape) == 4
+        assert train_data.shape[1] == dictionaries.shape[0]
+        assert train_data.shape[2] == 1
+        assert train_data.shape[3] == dictionaries.shape[1]
         
-        print(f"Fitting one-class SVM...")
-        clf = svm.OneClassSVM().fit(train_data)
+        print(f"Fitting {dictionaries.shape[0]} one-class SVMs...")
+        clfs = [svm.OneClassSVM().fit(train_data[:,i,0,:].squeeze()) for i in tqdm(range(dictionaries.shape[0]))]
 
         print("Evaluating...")
         with open(eval_file, "a+") as f:
-            for filename, feat in generate_bow_features(list(session.generate_motion_images()), dictionary, kp_step=args.step_size, kp_size=args.keypoint_size):
-                y = clf.decision_function(feat)[0]
-                f.write(f"{filename},{y}\n")
+            for filename, feats in generate_bow_features(list(session.generate_motion_images()), dictionaries, kp_step=args.step_size, kp_size=args.keypoint_size):
+                ys = [clf.decision_function(feat)[0] for clf, feat in zip(clfs, feats)]
+                ys_out = ",".join([str(y) for y in ys])
+                f.write(f"{filename},{ys_out}\n")
                 f.flush()
 
         print("Complete!")

BIN
imgs/approach1a_lapse.pdf


BIN
imgs/approach1a_motion.pdf


BIN
imgs/approach1a_sigma4_lapse.pdf


BIN
imgs/approach1a_sigma4_motion.pdf


BIN
imgs/approach1a_sigma4_sqdiff.pdf


BIN
imgs/approach1a_sqdiff.pdf


BIN
plots/approach1a/roc_curves/Beaver_01_absmean.pdf


BIN
plots/approach1a/roc_curves/Beaver_01_absmean_sigma2.pdf


BIN
plots/approach1a/roc_curves/Beaver_01_absmean_sigma4.pdf


BIN
plots/approach1a/roc_curves/Beaver_01_absmean_sigma4.png


BIN
plots/approach1a/roc_curves/Beaver_01_absmean_sigma6.pdf


BIN
plots/approach1a/roc_curves/Beaver_01_absmean_sigma6.png


BIN
plots/approach1a/roc_curves/Beaver_01_absvar.pdf


BIN
plots/approach1a/roc_curves/Beaver_01_absvar_sigma2.pdf


BIN
plots/approach1a/roc_curves/Beaver_01_absvar_sigma4.pdf


BIN
plots/approach1a/roc_curves/Beaver_01_absvar_sigma4.png


BIN
plots/approach1a/roc_curves/Beaver_01_absvar_sigma6.pdf


BIN
plots/approach1a/roc_curves/Beaver_01_absvar_sigma6.png


BIN
plots/approach1a/roc_curves/Beaver_01_sqmean.pdf


BIN
plots/approach1a/roc_curves/Beaver_01_sqmean_sigma2.pdf


BIN
plots/approach1a/roc_curves/Beaver_01_sqmean_sigma4.pdf


BIN
plots/approach1a/roc_curves/Beaver_01_sqmean_sigma4.png


BIN
plots/approach1a/roc_curves/Beaver_01_sqmean_sigma6.pdf


BIN
plots/approach1a/roc_curves/Beaver_01_sqmean_sigma6.png


BIN
plots/approach1a/roc_curves/Beaver_01_sqvar.pdf


BIN
plots/approach1a/roc_curves/Beaver_01_sqvar_sigma2.pdf


BIN
plots/approach1a/roc_curves/Beaver_01_sqvar_sigma4.pdf


BIN
plots/approach1a/roc_curves/Beaver_01_sqvar_sigma4.png


BIN
plots/approach1a/roc_curves/Beaver_01_sqvar_sigma6.pdf


BIN
plots/approach1a/roc_curves/Beaver_01_sqvar_sigma6.png


BIN
plots/approach2/roc_curves/Beaver_01_sqmean.pdf


BIN
plots/approach2/roc_curves/Beaver_01_sqmean.png


BIN
plots/approach2/roc_curves/Beaver_01_sqmean_sigma2.pdf


BIN
plots/approach2/roc_curves/Beaver_01_sqmean_sigma2.png


BIN
plots/approach2/roc_curves/Beaver_01_sqmean_sigma4.pdf


BIN
plots/approach2/roc_curves/Beaver_01_sqmean_sigma4.png


BIN
plots/approach2/roc_curves/Beaver_01_sqmean_sigma6.pdf


BIN
plots/approach2/roc_curves/Beaver_01_sqmean_sigma6.png


BIN
plots/approach2/roc_curves/Beaver_01_sqvar.pdf


BIN
plots/approach2/roc_curves/Beaver_01_sqvar.png


BIN
plots/approach2/roc_curves/Beaver_01_sqvar_sigma2.pdf


BIN
plots/approach2/roc_curves/Beaver_01_sqvar_sigma2.png


BIN
plots/approach2/roc_curves/Beaver_01_sqvar_sigma4.pdf


BIN
plots/approach2/roc_curves/Beaver_01_sqvar_sigma4.png


BIN
plots/approach2/roc_curves/Beaver_01_sqvar_sigma6.pdf


BIN
plots/approach2/roc_curves/Beaver_01_sqvar_sigma6.png


BIN
plots/approach3/roc_curves/Beaver_01_30_30_1024.pdf


BIN
plots/approach3/roc_curves/Beaver_01_30_30_1024.png


BIN
plots/approach4/roc_curves/Beaver_01_kde.pdf


BIN
plots/approach4/roc_curves/Beaver_01_kde.png


BIN
plots/approach4/roc_curves/Beaver_01_loss.pdf


BIN
plots/approach4/roc_curves/Beaver_01_loss.png


BIN
plots/approach4/roc_curves/GFox_03_kde,loss.pdf


BIN
plots/approach4/roc_curves/GFox_03_kde,loss.png


BIN
plots/approach4/roc_curves/GFox_03_kde.pdf


BIN
plots/approach4/roc_curves/GFox_03_kde.png


BIN
plots/approach4/roc_curves/GFox_03_loss.pdf


BIN
plots/approach4/roc_curves/GFox_03_loss.png


BIN
plots/approach4/roc_curves/Marten_01_kde,loss.pdf


BIN
plots/approach4/roc_curves/Marten_01_kde,loss.png


BIN
plots/approach4/roc_curves/Marten_01_kde.pdf


BIN
plots/approach4/roc_curves/Marten_01_loss.pdf


BIN
plots/approach4/roc_curves/Marten_01_loss.png


BIN
plots/approach4/roc_curves/ae2_deep_beaver_01_Beaver_01_kde.pdf


BIN
plots/approach4/roc_curves/ae2_deep_beaver_01_Beaver_01_kde.png


BIN
plots/approach4/roc_curves/ae2_deep_beaver_01_Beaver_01_loss.pdf


BIN
plots/approach4/roc_curves/ae2_deep_beaver_01_Beaver_01_loss.png


BIN
plots/approach4/roc_curves/ae2_deep_beaver_01_exp_Beaver_01_kde.pdf


BIN
plots/approach4/roc_curves/ae2_deep_beaver_01_exp_Beaver_01_kde.png


BIN
plots/approach4/roc_curves/ae2_deep_beaver_01_nodo_Beaver_01_kde.pdf


BIN
plots/approach4/roc_curves/ae2_deep_beaver_01_nodo_Beaver_01_kde.png


BIN
plots/approach4/roc_curves/ae2_deep_gfox_03_GFox_03_kde.pdf


BIN
plots/approach4/roc_curves/ae2_deep_gfox_03_GFox_03_kde.png


BIN
plots/approach4/roc_curves/ae2_deep_gfox_03_GFox_03_loss.pdf


BIN
plots/approach4/roc_curves/ae2_deep_gfox_03_GFox_03_loss.png


BIN
plots/approach4/roc_curves/ae2_deep_marten_01_Marten_01_kde,loss.pdf


BIN
plots/approach4/roc_curves/ae2_deep_marten_01_Marten_01_kde,loss.png


BIN
plots/approach4/roc_curves/ae2_deep_marten_01_Marten_01_kde.pdf


BIN
plots/approach4/roc_curves/ae2_deep_marten_01_Marten_01_kde.png


BIN
plots/approach4/roc_curves/ae2_deep_marten_01_Marten_01_loss.pdf


BIN
plots/approach4/roc_curves/ae2_deep_marten_01_Marten_01_loss.png


BIN
plots/approach4/roc_curves/ae2_deep_marten_01_exp_Marten_01_kde.pdf


이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.