File size: 5,295 Bytes
62a0e4e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
---
trainer:
  class_path: eva.Trainer
  init_args:
    n_runs: &N_RUNS ${oc.env:N_RUNS, 50}
    default_root_dir: &OUTPUT_ROOT ${oc.env:OUTPUT_ROOT, logs/${oc.env:MODEL_NAME, vitg14_reg}/offline/patch_camelyon}
    max_steps: &MAX_STEPS ${oc.env:MAX_STEPS, 12500}
    num_sanity_val_steps: 0
    check_val_every_n_epoch: 10
    checkpoint_type: ${oc.env:CHECKPOINT_TYPE, best}
    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.0001
          patience: ${oc.env:PATIENCE, 125}
          monitor: *MONITOR_METRIC
          mode: *MONITOR_METRIC_MODE
      - class_path: eva.callbacks.ClassificationEmbeddingsInMemoryWriter
        init_args:
          output_dir: &DATASET_EMBEDDINGS_ROOT ${oc.env:EMBEDDINGS_ROOT, ./data/embeddings}/${oc.env:MODEL_NAME, vitg14_reg}/patch_camelyon
          dataloader_idx_map:
            0: train
            1: val
            2: test
          backbone:
            class_path: eva.core.models.wrappers.ModelFromFunction
            init_args:
              path: torch.hub.load
              arguments:
                repo_or_dir: facebookresearch/dinov2
                model: dinov2_vitg14_reg 
                pretrained: true
              checkpoint_path: ${oc.env:CHECKPOINT_PATH, ../checkpoints/teacher_epoch250000.pth}

          overwrite: true
    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, 1536}
        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.InMemoryEmbeddingsClassificationDataset
        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.InMemoryEmbeddingsClassificationDataset
        init_args:
          <<: *DATASET_ARGS
          split: val
      test:
        class_path: eva.datasets.InMemoryEmbeddingsClassificationDataset
        init_args:
          <<: *DATASET_ARGS
          split: test
      predict:
        - class_path: eva.vision.datasets.PatchCamelyon
          init_args: &PREDICT_DATASET_ARGS
            root: ${oc.env:DATA_ROOT, /block/eva-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: false
      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
    samplers:
      train:
        class_path: eva.core.data.samplers.classification.BalancedSampler
        init_args:
          num_samples: 10
      predict:
        class_path: eva.core.data.samplers.classification.BalancedSampler
        init_args:
          num_samples: 10