def main(gpu, args): rank = args.nr * args.gpus + gpu dist.init_process_group(backend='nccl', init_method='env://', world_size=args.world_size, rank=rank) with open(args.config) as config_file: params = json.load(config_file) params['nodes'] = args.nodes params['gpus'] = args.gpus params['nr'] = args.nr params['world_size'] = args.world_size params['rank'] = rank random.seed(params['seed']) np.random.seed(params['seed']) torch.manual_seed(params['seed']) preproc = Preprocessor(sp_model=params['sp_model']) params['vocab_size'] = preproc.vocab_size logger = Logger(params['logfile']) logger.write('Loading data...') train_dataloader, eval_dataloader = prepare_dataset( dataset_dir=params['dataset_dir'], train_sets=params['train_sets'], eval_sets=params['eval_sets'], batch_size=params['batch_size'], preproc=preproc, world_size=args.world_size, rank=rank) logger.write('Model initialization...') model, num_params = make_model(params) logger.write(f'Total number of parameters: {num_params}') torch.cuda.set_device(gpu) model.cuda() optimizer = torch.optim.Adadelta(model.parameters(), lr=params['lr'], eps=1e-8, rho=0.95, weight_decay=params['weight_decay']) model, optimizer = amp.initialize(min_loss_scale=1.0, models=model, optimizers=optimizer, opt_level=params['opt_level']) model = DDP(model) train(data=[train_dataloader, eval_dataloader, preproc], model=model, optimizer=optimizer, logger=logger, params=params)
def main(args): sess = utils.create_session() mymodel = make_model(sess, args.model_to_run, args.model_path, args.labels_path) source_dirs = f'{args.source_dir}{args.mapping_labels_to_dirs[args.target_class]}' filenames = [] predictions = [] for source_dir in glob(f'{source_dirs}/*'): cd = ConceptDiscovery( mymodel, args.mapping_labels_to_dirs[args.target_class], sess, f'{source_dir}/') try: prediction, filename = cd.predict() predictions.append(prediction) filenames.append(filename[0]) except ValueError as e: predictions.append(np.nan) filenames.append(source_dir) pass sess.close() num_predictions = len(predictions) directory = [source_dirs.split('/')[-2]] * num_predictions true_labels = [args.target_class] * num_predictions predicted_labels = [] for prediction in predictions: try: predicted_labels.append(mymodel.id_to_label(prediction.tolist()[0].index(np.max(prediction)))) except AttributeError: predicted_labels.append(np.nan) prediction_probability = [np.max(prediction) for prediction in predictions] df = pd.DataFrame({ 'directory': directory, 'filename': filenames, 'true_label': true_labels, 'predicted_label': predicted_labels, 'prediction_probability': prediction_probability }) save_filename = f"./baseline_predictions/{'_'.join(args.target_class.split(' '))}_baseline_predictions.csv" save_filepath = Path(save_filename) save_filepath.touch(exist_ok=True) df.to_csv(save_filename, index=False)
def main(args, activations_dir, cavs_dir, random_concept='random_discovery'): sess = utils.create_session() mymodel = make_model(sess, args.model_to_run, args.model_path, args.labels_path) cd = ConceptDiscovery(mymodel, args.target_class, random_concept, args.bottlenecks, sess, args.source_dir, activations_dir, cavs_dir) bn_activations = cd.get_img_activations(args.img_num, args.concept_num) sess.close()
def main(args, img_path, true_label): sess = utils.create_session() mymodel = make_model(sess, args.model_to_run, args.model_path, args.labels_path) filenames = [] predictions = [] baseline_prediction_probs = [] baseline_predictions = pd.read_csv(f"./baseline_prediction_samples/{true_label}baseline_prediction_samples.csv") for img in glob(f'{img_path}/*'): cd = ConceptDiscovery( mymodel, args.target_class, sess, f"./net_occlusion_heatmaps_delta_prob/{img.split('/')[-1].split('_')[0]}/{img.split('/')[-1]}/mask_dim_100/{img.split('/')[-1]}_image_cropped_to_mask/") prediction, filename = cd.predict() # No instances where true label != predicted label in sample baseline_prediction_probs.append(baseline_predictions[baseline_predictions['filename'].str.contains(img.split('/')[-1])]['prediction_probability'].values[0]) try: prediction, filename = cd.predict() predictions.append(prediction) filenames.append(filename[0]) except ValueError as e: predictions.append(np.nan) filenames.append(args.source_dir) pass sess.close() true_labels = [true_label] * len(predictions) predicted_labels = [] for prediction in predictions: try: predicted_labels.append(mymodel.id_to_label(prediction.tolist()[0].index(np.max(prediction)))) except AttributeError: predicted_labels.append(np.nan) if args.target_class == 'crane bird': args.target_class = 'crane' elif args.target_class == 'african grey': args.target_class = 'African grey' elif args.target_class == 'tank suit': args.target_class = 'maillot' true_label_predictions = [] true_label_prediction_delta = [] for prediction, baseline_prediction_probs in zip(predictions,baseline_prediction_probs): try: true_label_prediction_prob = prediction.tolist()[0][mymodel.label_to_id(args.target_class)] true_label_predictions.append(true_label_prediction_prob) true_label_prediction_delta.append(true_label_prediction_prob-baseline_prediction_probs) except AttributeError: true_label_predictions.append(np.nan) prediction_probability = [np.max(prediction) for prediction in predictions] df = pd.DataFrame({ 'filename': filenames, 'true_label': true_labels, 'true_label_predictions': true_label_predictions, 'true_label_predictions_delta': true_label_prediction_delta, 'predicted_label': predicted_labels, 'prediction_probability': prediction_probability }) save_filename = f"./net_heatmap_predictions/mask_dim_100/{'_'.join(true_label.split(' '))}_heatmap_predictions.csv" save_filepath = Path(save_filename) save_filepath.touch(exist_ok=True) df.to_csv(save_filename, index=False)
def main(args): sess = utils.create_session() mymodel = make_model(sess, args.model_to_run, args.model_path, args.labels_path) filenames = [] predictions = [] for source_dir in glob(f'{args.source_dir}/*'): cd = ConceptDiscovery(mymodel, None, None, None, sess, f'{source_dir}/', None, None) try: prediction, filename = cd.predict() predictions.append(prediction) filenames.append(filename[0]) except ValueError as e: predictions.append(np.nan) filenames.append(source_dir) pass sess.close() num_predictions = len(predictions) directory = ['/'.join(args.source_dir.split('/')[:4])] * num_predictions mask_dim = [args.source_dir.split('/')[-2].split('_')[-1] ] * num_predictions true_labels = [args.target_class] * num_predictions # For occluded image prediction need to find prediction accuracy of true label predicted_labels = [] for prediction in predictions: try: predicted_labels.append( mymodel.id_to_label(prediction.tolist()[0].index( np.max(prediction)))) except AttributeError: predicted_labels.append(np.nan) if args.target_class == 'crane bird': args.target_class = 'crane' elif args.target_class == 'african grey': args.target_class = 'African grey' elif args.target_class == 'tank suit': args.target_class = 'maillot' true_label_predictions = [] for prediction in predictions: try: true_label_predictions.append( prediction.tolist()[0][mymodel.label_to_id(args.target_class)]) except AttributeError: true_label_predictions.append(np.nan) prediction_probability = [np.max(prediction) for prediction in predictions] df = pd.DataFrame({ 'directory': directory, 'mask_dim': mask_dim, 'filename': filenames, 'true_label': true_labels, 'true_label_predictions': true_label_predictions, 'predicted_label': predicted_labels, 'prediction_probability': prediction_probability }) # save_filename = f"./occluded_image_predictions/mask_dim_{mask_dim[0]}/{'_'.join(args.target_class.split(' '))}_image_{args.source_dir.split('/')[3]}_occluded_image_predictions.csv" save_filename = 'occluded_image_predictions/mask_dim_100/cab_image_n02930766_23814_occluded_image_predictions.csv' save_filepath = Path(save_filename) save_filepath.touch(exist_ok=True) df.to_csv(save_filename, index=False)