| import os |
| import torch |
| import argparse |
| import numpy as np |
|
|
| from pathlib import Path |
|
|
| |
| from data.loading import EPUDatasetFromConfig |
| from data.dataloader import to_dataloader |
| from utils.omega_parser import IUSConfig |
| from utils.train_utils import create_output_folders |
| from utils.eval_utils import EPUCNNEval |
|
|
|
|
|
|
| BASE_PATH = Path(__file__).resolve().parent |
|
|
|
|
| def parse_options(): |
| parser = argparse.ArgumentParser() |
| parser.add_argument("--experiment_folder_name", type=str, required=True, |
| help="Folder name containing epu configuration & saved ckpt " |
| "eg ius_dataset_name_base_one_0000_timestamp") |
| parser.add_argument("--cb_data", type=str, default=None, |
| help="cb vector data. If not specified estimates all cb_vectors") |
| args = parser.parse_args() |
| return args |
|
|
|
|
| def main(): |
| args = parse_options() |
|
|
| |
| print('Loading configuration...') |
|
|
| saved_epu_folder = (BASE_PATH / "../results/checkpoints").resolve() |
| saved_epu_folder = os.path.join(saved_epu_folder, args.experiment_folder_name) |
| cfg_path = os.path.join(saved_epu_folder, "epu_config.yaml") |
| cfg = IUSConfig.from_yaml(cfg_path) |
|
|
| model_cfg, data_params = cfg.model, cfg.data_params |
|
|
| |
| print('Loading trained model...') |
| device = torch.device("cuda" if torch.cuda.is_available() else "cpu") |
| trained_ckpt = os.path.join(saved_epu_folder, f"ckpt_{cfg.experiment_saved_folder_name}.pt") |
| epu = EPUCNNEval(epu_cfg=cfg.model) |
| trained_epu = epu.load_ckpt(device=device, ckpt_path=trained_ckpt) |
|
|
| |
| output_folder = str((BASE_PATH / "../results/cb_vectors").resolve()) |
| output_folder = os.path.join(output_folder, args.experiment_folder_name) |
| create_output_folders(output_folder) |
|
|
| |
| print('Load data...') |
|
|
| if args.cb_data is not None: |
| group_by = [args.cb_data] |
| else: |
| group_by = data_params.data_preprocessing.label_mapping.keys() |
|
|
| for group_by_item in group_by: |
| data_params.dataset_path = str((BASE_PATH / data_params.dataset_path).resolve()) |
| dset = EPUDatasetFromConfig(dataconfig=data_params, group_by=group_by_item) |
| |
| eval_dataset = dset.get_dataset(dataset_mode="validation") |
| dataloader_eval = to_dataloader(dataset=eval_dataset, loading_cfg=data_params.data_loading) |
|
|
| cb_vector = trained_epu.create_baseline_feature_contribution_profile( |
| data_loader=dataloader_eval, |
| device=device |
| ) |
| cb_vector = cb_vector.detach().cpu().numpy() |
| cb_path = os.path.join(output_folder, f"cb_vector_{group_by_item}.npy") |
| np.save(cb_path, cb_vector) |
| print(f'cb vector saved at {cb_path}') |
|
|
| print('cb vector computation finished.') |
|
|
|
|
| if __name__ == "__main__": |
| |
| main() |
|
|