| import os |
| import torch |
| import argparse |
| import numpy as np |
| import pandas as pd |
|
|
| from pathlib import Path |
| from datetime import datetime |
|
|
| |
| from ius.ius import IUS |
| from ius.ius_eval_parser import IUSEvalParser |
| from data.loading import IUSEvalDataset |
| from data.dataloader import to_dataloader |
| from utils.eval_utils import EPUCNNEval |
| from utils.train_utils import create_output_folders, save_to_json |
| from utils.omega_parser import IUSConfig |
|
|
|
|
| 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") |
| parser.add_argument("--cb_vector_tag", type=str, default=None, required=True, |
| help="cb vector data. If not specified estimates all cb_vectors") |
| parser.add_argument("--synthetic_images", type=str, default='png', |
| help="It can be either a single synthetic image file or a folder path containing multiple " |
| "synthetic images") |
| parser.add_argument("--synthetic_img_extension", type=str, default='png', |
| help="Extension of synthetic images") |
| args = parser.parse_args() |
| return args |
|
|
|
|
| def main(): |
| args = parse_options() |
| cb_vec_tag = args.cb_vector_tag |
| synthetic_img_path = args.synthetic_images |
| synthetic_img_extension = args.synthetic_img_extension |
| experiment_folder_name = args.experiment_folder_name |
|
|
| |
| print('Loading configuration...') |
| saved_epu_folder = (BASE_PATH / "../results/checkpoints").resolve() |
| saved_epu_folder = os.path.join(saved_epu_folder, experiment_folder_name) |
| cfg_path = os.path.join(saved_epu_folder, "epu_config.yaml") |
| cfg = IUSConfig.from_yaml(cfg_path) |
|
|
| |
| 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_{experiment_folder_name}.pt") |
| epu = EPUCNNEval(epu_cfg=cfg.model) |
| trained_epu = epu.load_ckpt(device=device, ckpt_path=trained_ckpt) |
|
|
| |
| print('IUS class...') |
| saved_cb_vec_folder = (BASE_PATH / "../results/cb_vectors").resolve() |
| saved_cb_vec_folder = os.path.join(saved_cb_vec_folder, experiment_folder_name) |
| cb_vec_path = os.path.join(saved_cb_vec_folder, f"cb_vector_{cb_vec_tag}.npy") |
| ius = IUS(cb_path=cb_vec_path, cb_tag=cb_vec_tag, device=device) |
|
|
| |
| synthetic_img_path = str((BASE_PATH / ".." / synthetic_img_path).resolve()) |
| parser = IUSEvalParser(path=synthetic_img_path, image_ext=synthetic_img_extension,) |
| synthetic_dset = IUSEvalDataset(dataconfig=cfg.data_params).get_dataset(parser=parser) |
|
|
| cfg.data_params.data_loading.shuffle = False |
| cfg.data_params.data_loading.batch_size = 1 |
| synthetic_dataloader = to_dataloader(dataset=synthetic_dset, loading_cfg=cfg.data_params.data_loading) |
|
|
| synthetic_c_vecs = trained_epu.calculate_feature_contribution_profiles( |
| data_loader=synthetic_dataloader, |
| device=device, |
| ) |
|
|
| ius_score_list = ius.ius_measure(c_vectors=synthetic_c_vecs) |
| synthetic_filenames = parser.image_filenames |
|
|
| |
| timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") |
| output_folder = str((BASE_PATH / "../results/ius_eval").resolve()) |
| output_folder = os.path.join(output_folder, experiment_folder_name) |
| create_output_folders(output_folder) |
|
|
| ius_score_pd = pd.DataFrame( |
| { |
| "filename": synthetic_filenames, |
| "ius_measure_score": ius_score_list |
| } |
| ) |
| file_saved_ius_scores = os.path.join(output_folder, f"ius_scores_{timestamp}.csv") |
| ius_score_pd.to_csv(file_saved_ius_scores, index=False) |
|
|
| save_info_dict = { |
| "epu_ckpt": trained_ckpt, |
| "config": cfg_path, |
| "experiment_id": cfg.experiment_saved_folder_name, |
| "cb_vector_path": cb_vec_path, |
| "synthetic_images_path": synthetic_img_path, |
| "synthetic_img_extension": synthetic_img_extension, |
| "synthetic_samples_num": len(synthetic_filenames), |
| "timestamp": timestamp, |
| "ius_scores": file_saved_ius_scores, |
| } |
| json_file_path = os.path.join(output_folder, f"ius_scores_info_{timestamp}.json") |
| save_to_json(save_info_dict, json_file_path) |
|
|
|
|
| if __name__ == "__main__": |
| |
| |
|
|
| main() |
|
|