def main(args):
    """Main train and evaluation function.

    Parameters
    ----------
    args: argparse.Namespace
        Arguments
    """
    formatter = logging.Formatter('%(asctime)s %(levelname)s - %(funcName)s: %(message)s',
                                  "%H:%M:%S")
    logger = logging.getLogger(__name__)
    logger.setLevel(args.log_level.upper())
    stream = logging.StreamHandler()
    stream.setLevel(args.log_level.upper())
    stream.setFormatter(formatter)
    logger.addHandler(stream)

    set_seed(args.seed)
    device = get_device(is_gpu=not args.no_cuda)
    exp_dir = os.path.join(RES_DIR, args.name)
    feature_dir = os.path.join(exp_dir, 'training_features')
    logger.info("Root directory for saving and loading experiments: {}".format(exp_dir))

    if not args.is_eval_only:
        create_safe_directory(feature_dir, logger=logger)

        # Setting number of epochs to 1, as we need to extract features
        args.epochs = 1
        args.batch_size = 1

        # PREPARES DATA
        data_loader = get_dataloaders(args.dataset,
                                       batch_size=args.batch_size,
                                       logger=logger, test=False)
        logger.info("Train {} with {} samples".format(args.dataset, len(data_loader.dataset)))

        # PREPARES MODEL
        args.img_size = get_img_size(args.dataset)  # stores for metadata
        model = load_model(exp_dir, filename='model.pt')
        logger.info('Num parameters in model: {}'.format(get_n_param(model)))

        # Extract Features

        model = model.to(device)  # make sure trainer and viz on same device
        fe = FeatureExtractor(model,
                          save_dir=exp_dir,
                          is_progress_bar=not args.no_progress_bar)
        fe(data_loader,
                epochs=args.epochs,
                checkpoint_every=args.checkpoint_every, feature_dir=feature_dir)

        # SAVE MODEL AND EXPERIMENT INFORMATION
        # save_model(trainer.model, exp_dir, metadata=vars(args))
        print('Done.')
Пример #2
0
def main(args):
    """Main train and evaluation function.

    Parameters
    ----------
    args: argparse.Namespace
        Arguments
    """
    formatter = logging.Formatter(
        '%(asctime)s %(levelname)s - %(funcName)s: %(message)s', "%H:%M:%S")
    logger = logging.getLogger(__name__)
    logger.setLevel(args.log_level.upper())
    stream = logging.StreamHandler()
    stream.setLevel(args.log_level.upper())
    stream.setFormatter(formatter)
    logger.addHandler(stream)

    set_seed(args.seed)
    device = get_device(is_gpu=not args.no_cuda)
    exp_dir = os.path.join(RES_DIR, args.name)
    logger.info("Root directory for saving and loading experiments: {}".format(
        exp_dir))

    if not args.is_eval_only:

        create_safe_directory(exp_dir, logger=logger)

        if args.loss == "factor":
            logger.info(
                "FactorVae needs 2 batches per iteration. To replicate this behavior while being consistent, we double the batch size and the the number of epochs."
            )
            args.batch_size *= 2
            args.epochs *= 2

        # PREPARES DATA
        train_loader = get_dataloaders(args.dataset,
                                       batch_size=args.batch_size,
                                       logger=logger)
        logger.info("Train {} with {} samples".format(
            args.dataset, len(train_loader.dataset)))

        # PREPARES MODEL
        args.img_size = get_img_size(args.dataset)  # stores for metadata
        model = init_specific_model(args.model_type, args.img_size,
                                    args.latent_dim)
        logger.info('Num parameters in model: {}'.format(get_n_param(model)))

        # TRAINS
        optimizer = optim.Adam(model.parameters(), lr=args.lr)

        model = model.to(device)  # make sure trainer and viz on same device
        gif_visualizer = GifTraversalsTraining(model, args.dataset, exp_dir)
        loss_f = get_loss_f(args.loss,
                            n_data=len(train_loader.dataset),
                            device=device,
                            **vars(args))
        trainer = Trainer(model,
                          optimizer,
                          loss_f,
                          device=device,
                          logger=logger,
                          save_dir=exp_dir,
                          is_progress_bar=not args.no_progress_bar,
                          gif_visualizer=gif_visualizer)
        trainer(
            train_loader,
            epochs=args.epochs,
            checkpoint_every=args.checkpoint_every,
        )

        # SAVE MODEL AND EXPERIMENT INFORMATION
        save_model(trainer.model, exp_dir, metadata=vars(args))

    if args.is_metrics or not args.no_test:
        model = load_model(exp_dir, is_gpu=not args.no_cuda)
        metadata = load_metadata(exp_dir)
        # TO-DO: currently uses train datatset

        test_loader = get_dataloaders(metadata["dataset"],
                                      batch_size=args.eval_batchsize,
                                      shuffle=False,
                                      logger=logger)
        loss_f = get_loss_f(args.loss,
                            n_data=len(test_loader.dataset),
                            device=device,
                            **vars(args))

        use_wandb = False
        if use_wandb:
            loss = args.loss
            wandb.init(project="atmlbetavae", config={"VAE_loss": args.loss})
            if loss == "betaH":
                beta = loss_f.beta
                wandb.config["Beta"] = beta
        evaluator = Evaluator(model,
                              loss_f,
                              device=device,
                              logger=logger,
                              save_dir=exp_dir,
                              is_progress_bar=not args.no_progress_bar,
                              use_wandb=use_wandb)

        evaluator(test_loader,
                  is_metrics=args.is_metrics,
                  is_losses=not args.no_test)
Пример #3
0
    
    m1, s1 = _calculate_activation_statistics(dataloader_original, length, model, batch_size, dims)
    print("Calculated m1 and s1")
    m2, s2 = _calculate_activation_statistics(dataloader_reconstructed, length, model, batch_size, dims)
    print("Calculated m2 and s2")

    fid_value = _calculate_frechet_distance(m1, s1, m2, s2)
    return fid_value

if __name__ == "__main__":
    import torch
    import random
    from disvae.utils.modelIO import load_model
    import argparse
    import logging
    import sys

    MODEL_PATH = sys.argv[2] # get the model path (e.g. "results/betaH_mnist")
    MODEL_NAME = "model.pt"
    GPU_AVAILABLE = True

    vae_model = load_model(directory=MODEL_PATH, is_gpu=GPU_AVAILABLE, filename=MODEL_NAME)

    mode = sys.argv[1] # get the name of the dataset you want to measure FID for
    
    dataloader1 = get_dataloaders(mode, batch_size=128)[0]

    fid_value = get_fid_value(dataloader1, vae_model)

    print("FID for ", mode, ": ", fid_value)
Пример #4
0
import ctypes
ctypes.cdll.LoadLibrary(
    'caffe2_nvrtc.dll'
)  # this was necessary on my machine, may not be on yours

img_index = 5000

model_paths = [
    "marbles_b4_u0", "marbles_b4_u1e-2", "marbles_b4_u1e-1", "marbles_b40_u0",
    "marbles_b40_u1e-2", "marbles_b40_u1e-1", "marbles_b100_u0",
    "marbles_b100_u1e-2", "marbles_b100_u1e-1"
]

for model_path in model_paths:

    bvae_model = load_model("./results/" + model_path + "/",
                            filename="model-480.pt")
    imgs = np.load("./data/marbles/raw/10k_marbles.npy")
    utils = np.load("./data/marbles/raw/10k_marbles_utilities.npy")

    im = Image.fromarray(imgs[img_index])
    im.save("./original.jpeg")

    data = np.array([np.transpose(imgs[img_index])])
    device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
    tensor = torch.from_numpy(data).float().to(device)
    recon_batch, latent_dist, latent_sample = bvae_model(tensor)

    recon = recon_batch.cpu().detach().numpy()
    recon_img = np.transpose(recon[0]) * 255
    recon_img = recon_img.astype('uint8')
Пример #5
0
            trainer = Trainer(model, optimizer, loss_f=loss_f,
                            loss_name=args.loss,
                            device=device,
                            logger=logger,
                            save_dir=exp_dir,
                            is_progress_bar=not args.no_progress_bar,
                            gif_visualizer=gif_visualizer)
            trainer(train_loader,
                    epochs=args.epochs,
                    checkpoint_every=args.checkpoint_every)

            # SAVE MODEL AND EXPERIMENT INFORMATION
            save_model(trainer.model, exp_dir, metadata=vars(args))

        if args.is_metrics or not args.no_test:
            model = load_model(exp_dir, is_gpu=not args.no_cuda)
            metadata = load_metadata(exp_dir)
            # TO-DO: currently uses train datatset
            test_loader = get_dataloaders(metadata["dataset"],
                                        batch_size=args.eval_batchsize,
                                        shuffle=False,
                                        logger=logger)
            loss_f = get_loss_f(args.loss,
                                n_data=len(test_loader.dataset),
                                device=device,
                                **vars(args))
            evaluator = Evaluator(model, loss_f,
                                device=device,
                                logger=logger,
                                save_dir=exp_dir,
                                is_progress_bar=not args.no_progress_bar)