File size: 4,831 Bytes
b57d99f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
---
trainer:
  class_path: eva.Trainer
  init_args:
    n_runs: &N_RUNS ${oc.env:N_RUNS, 5}
    default_root_dir: &OUTPUT_ROOT ${oc.env:OUTPUT_ROOT, logs/${oc.env:MODEL_NAME, dino_vits16}/offline/patch_camelyon}
    max_steps: &MAX_STEPS ${oc.env:MAX_STEPS, 12500}
    checkpoint_type: ${oc.env:CHECKPOINT_TYPE, best}
    accelerator: ${oc.env:ACCELERATOR, auto}
    devices: ${oc.env:NUM_DEVICES, 1}
    callbacks:
      - class_path: eva.callbacks.ConfigurationLogger
      - class_path: lightning.pytorch.callbacks.TQDMProgressBar
        init_args:
          refresh_rate: ${oc.env:TQDM_REFRESH_RATE, 1}
      - class_path: lightning.pytorch.callbacks.LearningRateMonitor
        init_args:
          logging_interval: epoch
      - class_path: lightning.pytorch.callbacks.ModelCheckpoint
        init_args:
          filename: best
          save_last: ${oc.env:SAVE_LAST, false}
          save_top_k: 1
          monitor: &MONITOR_METRIC ${oc.env:MONITOR_METRIC, val/BinaryBalancedAccuracy}
          mode: &MONITOR_METRIC_MODE ${oc.env:MONITOR_METRIC_MODE, max}
      - class_path: lightning.pytorch.callbacks.EarlyStopping
        init_args:
          min_delta: 0
          patience: ${oc.env:PATIENCE, 3}
          monitor: *MONITOR_METRIC
          mode: *MONITOR_METRIC_MODE
      - class_path: eva.callbacks.ClassificationEmbeddingsWriter
        init_args:
          output_dir: &DATASET_EMBEDDINGS_ROOT ${oc.env:EMBEDDINGS_ROOT, ./data/embeddings}/${oc.env:MODEL_NAME, dino_vits16}/patch_camelyon
          dataloader_idx_map:
            0: train
            1: val
            2: test
          backbone:
            class_path: eva.core.models.wrappers.ModelFromFunction
            init_args:
              path: ${oc.env:BACKBONE_FN, openpath_eva_backbone.build_openpath}
              arguments:
                weights: ${oc.env:OPENPATH_WEIGHTS, "none"}
          overwrite: false
    logger:
      - class_path: lightning.pytorch.loggers.TensorBoardLogger
        init_args:
          save_dir: *OUTPUT_ROOT
          name: ""
model:
  class_path: eva.HeadModule
  init_args:
    head:
      class_path: torch.nn.Linear
      init_args:
        in_features: ${oc.env:IN_FEATURES, 384}
        out_features: 1
    criterion: torch.nn.BCEWithLogitsLoss
    optimizer:
      class_path: torch.optim.AdamW
      init_args:
        lr: ${oc.env:LR_VALUE, 0.0003}
    metrics:
      common:
        - class_path: eva.metrics.AverageLoss
        - class_path: eva.metrics.BinaryClassificationMetrics
data:
  class_path: eva.DataModule
  init_args:
    datasets:
      train:
        class_path: eva.datasets.EmbeddingsClassificationDataset
        init_args: &DATASET_ARGS
          root: *DATASET_EMBEDDINGS_ROOT
          manifest_file: manifest.csv
          split: train
          target_transforms:
            class_path: torchvision.transforms.v2.ToDtype
            init_args:
              dtype: torch.float32
      val:
        class_path: eva.datasets.EmbeddingsClassificationDataset
        init_args:
          <<: *DATASET_ARGS
          split: val
      test:
        class_path: eva.datasets.EmbeddingsClassificationDataset
        init_args:
          <<: *DATASET_ARGS
          split: test
      predict:
        - class_path: eva.vision.datasets.PatchCamelyon
          init_args: &PREDICT_DATASET_ARGS
            root: ${oc.env:DATA_ROOT, ./data/patch_camelyon}
            split: train
            download: ${oc.env:DOWNLOAD_DATA, false}
            # Set `download: true` to download the dataset from https://zenodo.org/records/1494286
            # The PatchCamelyon dataset is distributed under the following license: 
            # "Creative Commons Zero v1.0 Universal"
            # (see: https://choosealicense.com/licenses/cc0-1.0/)
            transforms:
              class_path: eva.vision.data.transforms.common.ResizeAndCrop
              init_args:
                size: ${oc.env:RESIZE_DIM, 224}
                mean: ${oc.env:NORMALIZE_MEAN, [0.485, 0.456, 0.406]} 
                std: ${oc.env:NORMALIZE_STD, [0.229, 0.224, 0.225]}
        - class_path: eva.vision.datasets.PatchCamelyon
          init_args:
            <<: *PREDICT_DATASET_ARGS
            split: val
        - class_path: eva.vision.datasets.PatchCamelyon
          init_args:
            <<: *PREDICT_DATASET_ARGS
            split: test
    dataloaders:
      train:
        batch_size: &BATCH_SIZE ${oc.env:BATCH_SIZE, 256}
        num_workers: &N_DATA_WORKERS ${oc.env:N_DATA_WORKERS, 4}
        shuffle: true
      val:
        batch_size: *BATCH_SIZE
        num_workers: *N_DATA_WORKERS
      test:
        batch_size: *BATCH_SIZE
        num_workers: *N_DATA_WORKERS
      predict:
        batch_size: &PREDICT_BATCH_SIZE ${oc.env:PREDICT_BATCH_SIZE, 64}
        num_workers: *N_DATA_WORKERS