File size: 4,491 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
---
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, vitg14_reg}/offline/bach}
    max_steps: &MAX_STEPS ${oc.env:MAX_STEPS, 12500}
    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/MulticlassAccuracy}
          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, 1250}
          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}/bach
          dataloader_idx_map:
            0: train
            1: val
          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: &NUM_CLASSES 4
    criterion: torch.nn.CrossEntropyLoss
    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.MulticlassClassificationMetrics
          init_args:
            num_classes: *NUM_CLASSES
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
      val:
        class_path: eva.datasets.InMemoryEmbeddingsClassificationDataset
        init_args:
          <<: *DATASET_ARGS
          split: val
      predict:
        - class_path: eva.vision.datasets.BACH
          init_args: &PREDICT_DATASET_ARGS
            root: ${oc.env:DATA_ROOT, /block/eva-data/bach}
            split: train
            download: ${oc.env:DOWNLOAD_DATA, false}
            # Set `download: true` to download the dataset from https://zenodo.org/records/3632035
            # The BACH dataset is distributed under the following license
            # Attribution-NonCommercial-NoDerivs 4.0 International license
            # (see: https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode)
            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]} #Flagged for maybe needs fixing
                std: ${oc.env:NORMALIZE_STD, [0.229, 0.224, 0.225]}
        - class_path: eva.vision.datasets.BACH
          init_args:
            <<: *PREDICT_DATASET_ARGS
            split: val
    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
      predict:
        batch_size: &PREDICT_BATCH_SIZE ${oc.env:PREDICT_BATCH_SIZE, 64}
        num_workers: *N_DATA_WORKERS