コード例 #1
0
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)
コード例 #2
0
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)