diff --git a/classify_utils/cal_acc_MCP.py b/classify_utils/cal_acc_MCP.py index eede0bc..5185b88 100644 --- a/classify_utils/cal_acc_MCP.py +++ b/classify_utils/cal_acc_MCP.py @@ -116,8 +116,11 @@ def cal_top1_topk(feats, cent_MCP, concept_vecs, concept_means, selected_node, a parser.add_argument('--l2', default = [], type = int, nargs = "+", help = "Select the node to drop") parser.add_argument('--l3', default = [], type = int, nargs = "+", help = "Select the node to drop") parser.add_argument('--l4', default = [], type = int, nargs = "+", help = "Select the node to drop") + parser.add_argument("--saved_dir", default = ".", type = str) args = parser.parse_args() + args.dst = f"{args.saved_dir}/pkl/{args.case_name}/{args.model.lower()}_{args.basic_model.lower()}" + print("Calculate accuracy !!") os.environ["CUDA_VISIBLE_DEVICES"] = args.device @@ -138,7 +141,7 @@ def cal_top1_topk(feats, cent_MCP, concept_vecs, concept_means, selected_node, a num_class = int(num_class * 0.8 + 0.5) model = load_model(args.model, args.basic_model.lower(), num_class) - load_weight(model, f"./pkl/{case_name}/{args.model.lower()}_{args.basic_model}/best_model.pkl") + load_weight(model, f"{args.dst}/best_model.pkl") model.eval() post_name = "" diff --git a/classify_utils/cal_class_MCP.py b/classify_utils/cal_class_MCP.py index 6ad652a..ee77de5 100644 --- a/classify_utils/cal_class_MCP.py +++ b/classify_utils/cal_class_MCP.py @@ -78,10 +78,13 @@ def cal_class_MCP(model, concept_vecs, concept_means, data_transforms, data_path parser.add_argument('--w_mode', default = "best", choices=['best', 'last'], type = str) parser.add_argument('--all_class', default = False, action = "store_true", help = "if true, generate the whole dataset's classes MCP distribution.") parser.add_argument('--few_shot', default = False, action = "store_true") + parser.add_argument("--saved_dir", default = ".", type = str) args = parser.parse_args() print("Calculate the class MCP distribution !!") os.environ["CUDA_VISIBLE_DEVICES"] = args.device + args.dst = f"{args.saved_dir}/pkl/{args.case_name}/{args.model.lower()}_{args.basic_model.lower()}" + case_name = args.case_name args, image_size = get_model_set(args) @@ -100,7 +103,7 @@ def cal_class_MCP(model, concept_vecs, concept_means, data_transforms, data_path num_class = int(num_class * 0.8 + 0.5) model = load_model(args.model, args.basic_model.lower(), num_class) - trained_param_path = f"./pkl/{args.case_name}/{args.model.lower()}_{args.basic_model}/{args.w_mode}_model.pkl" + trained_param_path = f"{args.dst}/{args.w_mode}_model.pkl" load_weight(model, trained_param_path) model.eval() diff --git a/extract_prototypes.py b/extract_prototypes.py index 386fb9b..6e9e2f7 100644 --- a/extract_prototypes.py +++ b/extract_prototypes.py @@ -119,10 +119,13 @@ def load_dataset(data_path: str, image_size: int, args, data_transform = None) - parser.add_argument('--basic_model', default = "resnet50", type = str) parser.add_argument('--model', default = "aix_model", type = str) parser.add_argument('--w_mode', default = "best", choices=['best', 'last'], type = str) + parser.add_argument("--saved_dir", default = ".", type = str) args = parser.parse_args() os.environ["CUDA_VISIBLE_DEVICES"] = args.device + args.dst = f"{args.saved_dir}/pkl/{args.case_name}/{args.model.lower()}_{args.basic_model.lower()}" + os.makedirs(f"./PCA_concept_specific_tmp/{args.case_name}/{args.basic_model}/", exist_ok = True) data_path, train_path, val_path, num_class = get_dataset(args.case_name) @@ -143,7 +146,7 @@ def load_dataset(data_path: str, image_size: int, args, data_transform = None) - print(args) train_loader = load_dataset(data_path, image_size, args) - trained_param_path = f"./pkl/{args.case_name}/{args.model.lower()}_{args.basic_model}/best_model.pkl" + trained_param_path = f"{args.dst}/best_model.pkl" load_weight(model, trained_param_path) post_name = "" diff --git a/train.py b/train.py index bf431f9..d09056b 100644 --- a/train.py +++ b/train.py @@ -404,7 +404,7 @@ def runs(args): "Lr_scheduler" : lr_state_dict, "Best ACC" : max_acc[phase].avg, "concept_cha" : args.concept_cha} - torch.save(save_data, './pkl/{}/{}_{}/last_model.pkl'.format(args.index, args.model.lower(), args.basic_model.lower())) + torch.save(save_data, f'{args.dst}/last_model.pkl') # ------------------------------------------------------------- info_log('Index : {}'.format(args.index), args.global_rank, args.log_type, args.log) info_log("dataset : {}".format(args.dataset_name), args.global_rank, args.log_type, args.log) diff --git a/vis_utils/find_topk_area.py b/vis_utils/find_topk_area.py index 371799b..fc315b5 100644 --- a/vis_utils/find_topk_area.py +++ b/vis_utils/find_topk_area.py @@ -102,10 +102,13 @@ def save_masked(ori_imgs, masks, args): parser.add_argument('--eigen_topk', default = 1, type = int) parser.add_argument('--heatmap', action = "store_true", default = False) parser.add_argument('--masked', action = "store_true", default = False) + parser.add_argument("--saved_dir", default = ".", type = str) args = parser.parse_args() os.environ["CUDA_VISIBLE_DEVICES"] = args.device print(args) + args.dst = f"{args.saved_dir}/pkl/{args.case_name}/{args.model.lower()}_{args.basic_model.lower()}" + nrow = args.topk layer_sizes = [] @@ -147,7 +150,7 @@ def save_masked(ori_imgs, masks, args): if args.model.lower() != "aix_model": post_name = "_resp" model = load_model(args.model, args.basic_model, num_class) - trained_param_path = f"./pkl/{args.case_name}/{args.model.lower()}_{args.basic_model}/best_model.pkl" + trained_param_path = f"{args.dst}/best_model.pkl" print(trained_param_path) load_weight(model, trained_param_path) diff --git a/vis_utils/find_topk_response.py b/vis_utils/find_topk_response.py index 8a51f53..40ed365 100644 --- a/vis_utils/find_topk_response.py +++ b/vis_utils/find_topk_response.py @@ -44,7 +44,10 @@ def __getitem__(self, idx): parser.add_argument('--concept_per_layer', default = [32, 32, 32, 32], type = int, nargs = "+") parser.add_argument('--eigen_topk', default = 1, type = int) parser.add_argument('--use_CLS_token', action = "store_true", default = False) + parser.add_argument("--saved_dir", default = ".", type = str) args = parser.parse_args() + + print(args) os.environ["CUDA_VISIBLE_DEVICES"] = args.device @@ -63,6 +66,8 @@ def __getitem__(self, idx): transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])]) TOP_RATE = 0.1 for step, case_name in enumerate(case_names): + args.dst = f"{args.saved_dir}/pkl/{case_name}/{args.model.lower()}_{args.basic_model.lower()}" + data_path, train_path, val_path, num_class = get_dataset(case_name) data_path = data_path + train_path @@ -76,7 +81,7 @@ def __getitem__(self, idx): concept_vecs, concept_means = load_concept(concept_covs, concept_means, args.eigen_topk) model = load_model(args.model, args.basic_model, num_class).cuda() - trained_param_path = f"./pkl/{case_name}/{args.model.lower()}_{args.basic_model}/best_model.pkl" + trained_param_path = f"{args.dst}/best_model.pkl" load_weight(model, trained_param_path) max_resp_path = [np.array([]),