Esempio n. 1
0
def main(configs=configs):

	# Load and initialise the networks
	G_in = T.tensor4('random')
	C_in = T.tensor4('image')
	G_network = synthesiser(G_in, configs=configs)
	C_network = classifier(C_in)
	initnetwork(G_network, 'generator.npz')
	generate = theano.function([G_in], lasagne.layers.get_output(G_network,deterministic=True))
	classify = theano.function([C_in], T.argmax(lasagne.layers.get_output(C_network, deterministic=True), axis=1))
	create_image(generate, 6, 7, name='test_seed2.png', seed=2, configs=configs)

	np.random.seed(seed=42)
	rimg = generate(np.random.rand(6*7, configs['GIN'], 1, 1).astype('float32'))
	X = classify(rimg).reshape(6, 7)
	print(X)
def batch_hard_with_knn_exp(device='3',
                            ckpt_prefix='Run01',
                            lr=1e-3,
                            embedding_epochs=10,
                            classify_epochs=100,
                            n_classes=10,
                            n_samples=12,
                            margin=0.3,
                            log_interval=50,
                            log_level="INFO",
                            k=3,
                            squared=False):
    """
    knn as classifier.
    :param device:
    :param lr:
    :param n_epochs:
    :param n_classes:
    :param n_samples:
    :param k: kNN parameter
    :return:
    """
    SEED = 0
    torch.manual_seed(SEED)
    torch.cuda.manual_seed(SEED)
    np.random.seed(SEED)

    kwargs = locals()
    log_file = '{}/ckpt/batch_hard_with_knn_exp/{}.log'.format(
        ROOT_DIR, ckpt_prefix)
    if not os.path.exists(os.path.dirname(log_file)):
        os.makedirs(os.path.dirname(log_file))
    logging.basicConfig(filename=log_file,
                        level=getattr(logging, log_level.upper(), None))
    logging.info(str(kwargs))

    os.environ['CUDA_VISIBLE_DEVICES'] = str(device)

    # get the mean and std of dataset train/a
    standarizer = TaskbStandarizer(data_manager=Dcase18TaskbData())
    mu, sigma = standarizer.load_mu_sigma(mode='train', device='a')

    # get the normalized train dataset
    train_dataset = DevSet(mode='train',
                           device='a',
                           transform=Compose(
                               [Normalize(mean=mu, std=sigma),
                                ToTensor()]))
    test_dataset = DevSet(mode='test',
                          device='a',
                          transform=Compose(
                              [Normalize(mean=mu, std=sigma),
                               ToTensor()]))

    train_batch_sampler = BalanceBatchSampler(dataset=train_dataset,
                                              n_classes=n_classes,
                                              n_samples=n_samples)
    train_batch_loader = DataLoader(dataset=train_dataset,
                                    batch_sampler=train_batch_sampler,
                                    num_workers=1)

    test_batch_sampler = BalanceBatchSampler(dataset=test_dataset,
                                             n_classes=n_classes,
                                             n_samples=n_samples)
    test_batch_loader = DataLoader(dataset=test_dataset,
                                   batch_sampler=test_batch_sampler,
                                   num_workers=1)

    model = networks.embedding_net_shallow()
    model = model.cuda()
    loss_fn = HardTripletLoss(margin=margin, hardest=True, squared=squared)
    optimizer = optim.Adam(model.parameters(), lr=lr)
    scheduler = lr_scheduler.StepLR(optimizer=optimizer,
                                    step_size=30,
                                    gamma=0.5)

    # fit(train_loader=train_batch_loader, val_loader=test_batch_loader, model=model, loss_fn=loss_fn,
    #     optimizer=optimizer, scheduler=scheduler, n_epochs=embedding_epochs, log_interval=log_interval,
    #     metrics=[AverageNoneZeroTripletsMetric()])
    train_hist = History(name='train/a')
    val_hist = History(name='test/a')
    ckpter = CheckPoint(
        model=model,
        optimizer=optimizer,
        path='{}/ckpt/batch_hard_with_knn_exp'.format(ROOT_DIR),
        prefix=ckpt_prefix,
        interval=1,
        save_num=1)

    for epoch in range(1, embedding_epochs + 1):
        scheduler.step()
        train_loss, metrics = train_epoch(
            train_loader=train_batch_loader,
            model=model,
            loss_fn=loss_fn,
            optimizer=optimizer,
            log_interval=log_interval,
            metrics=[AverageNoneZeroTripletsMetric()])
        train_logs = dict()
        train_logs['loss'] = train_loss
        for metric in metrics:
            train_logs[metric.name()] = metric.value()
        train_hist.add(logs=train_logs, epoch=epoch)

        test_acc = kNN(model=model,
                       train_loader=train_batch_loader,
                       test_loader=test_batch_loader,
                       k=k)
        test_logs = {'acc': test_acc}
        val_hist.add(logs=test_logs, epoch=epoch)

        train_hist.clear()
        train_hist.plot()
        val_hist.plot()
        logging.info('Epoch{:04d}, {:15}, {}'.format(epoch, train_hist.name,
                                                     str(train_hist.recent)))
        logging.info('Epoch{:04d}, {:15}, {}'.format(epoch, val_hist.name,
                                                     str(val_hist.recent)))
        ckpter.check_on(epoch=epoch, monitor='acc', loss_acc=val_hist.recent)

    # train classifier using learned embeddings.
    classify_model = networks.classifier()
    classify_model = classify_model.cuda()
    classify_loss_fn = nn.CrossEntropyLoss()
    classify_optimizer = optim.Adam(classify_model.parameters(), lr=lr)
    classify_scheduler = lr_scheduler.StepLR(optimizer=classify_optimizer,
                                             step_size=30,
                                             gamma=0.5)
    classify_train_hist = History(name='classify_train/a')
    classify_val_hist = History(name='classify_val/a')
    classify_ckpter = CheckPoint(
        model=classify_model,
        optimizer=classify_optimizer,
        path='{}/ckpt/batch_hard_with_knn_exp'.format(ROOT_DIR),
        prefix=ckpt_prefix,
        interval=1,
        save_num=1)
    # reload best embedding model
    best_model_filename = Reporter(ckpt_root=os.path.join(ROOT_DIR, 'ckpt'),
                                   exp='batch_hard_with_knn_exp').select_best(
                                       run=ckpt_prefix).selected_ckpt
    model.load_state_dict(torch.load(best_model_filename)['model_state_dict'])

    train_embedding, train_labels = extract_embeddings(train_batch_loader,
                                                       model, 128)
    test_embedding, test_labels = extract_embeddings(test_batch_loader, model,
                                                     128)

    classify_train_dataset = DatasetWrapper(data=train_embedding,
                                            labels=train_labels,
                                            transform=ToTensor())
    classify_test_dataset = DatasetWrapper(data=test_embedding,
                                           labels=test_labels,
                                           transform=ToTensor())
    classify_train_loader = DataLoader(dataset=classify_train_dataset,
                                       batch_size=128,
                                       shuffle=True,
                                       num_workers=1)
    classify_test_loader = DataLoader(dataset=classify_test_dataset,
                                      batch_size=128,
                                      shuffle=False,
                                      num_workers=1)

    fit(train_loader=classify_train_loader,
        val_loader=classify_test_loader,
        model=classify_model,
        loss_fn=classify_loss_fn,
        optimizer=classify_optimizer,
        scheduler=classify_scheduler,
        n_epochs=classify_epochs,
        log_interval=log_interval,
        metrics=[AccumulatedAccuracyMetric()],
        train_hist=classify_train_hist,
        val_hist=classify_val_hist,
        ckpter=classify_ckpter,
        logging=logging)
Esempio n. 3
0
##########################
# get hand written data  #
print("generating stylization set.")
style_base = "stylization_set/another/"
style_set = get_style_set(style_base)
##########################

print("initializing model.")
NUM_EPOCH = 200  ################
learning_rate = 0.0003

s_enc = styleEncoder().cuda()
dec = Decoder().cuda()
dis = discriminator().cuda()
enc = fontEncoder().cuda()
cla = classifier().cuda()

s_MSE = nn.MSELoss().cuda()
adv_loss = nn.BCELoss().cuda()
cla_loss = nn.CrossEntropyLoss().cuda()
gen_loss = nn.L1Loss().cuda()

D_optimizer = torch.optim.Adam(dis.parameters(), lr=learning_rate)
G_optimizer = torch.optim.Adam(list(s_enc.parameters()) +
                               list(dec.parameters()) +
                               list(enc.parameters()) + list(cla.parameters()),
                               lr=learning_rate)

for epoch in range(NUM_EPOCH):

    print("current epoch: ", epoch)
Esempio n. 4
0
def hard_triplet_baseline_exp(device='3',
                              ckpt_prefix='Run01',
                              lr=1e-3,
                              n_epochs=300,
                              n_classes=10,
                              n_samples=12,
                              margin=0.3,
                              log_interval=50,
                              log_level="INFO"):
    """

    :param device:
    :param lr:
    :param n_epochs:
    :param n_classes:
    :param n_samples:
    :return:
    """
    kwargs = locals()
    log_file = '{}/ckpt/hard_triplet_baseline_exp/{}.log'.format(
        ROOT_DIR, ckpt_prefix)
    if not os.path.exists(os.path.dirname(log_file)):
        os.makedirs(os.path.dirname(log_file))
    logging.basicConfig(filename=log_file,
                        level=getattr(logging, log_level.upper(), None))
    logging.info(str(kwargs))

    os.environ['CUDA_VISIBLE_DEVICES'] = str(device)

    # get the mean and std of dataset train/a
    standarizer = TaskbStandarizer(data_manager=Dcase18TaskbData())
    mu, sigma = standarizer.load_mu_sigma(mode='train', device='a')

    # get the normalized train dataset
    train_dataset = DevSet(mode='train',
                           device='a',
                           transform=Compose(
                               [Normalize(mean=mu, std=sigma),
                                ToTensor()]))
    test_dataset = DevSet(mode='test',
                          device='a',
                          transform=Compose(
                              [Normalize(mean=mu, std=sigma),
                               ToTensor()]))

    train_batch_sampler = BalanceBatchSampler(dataset=train_dataset,
                                              n_classes=n_classes,
                                              n_samples=n_samples)
    train_batch_loader = DataLoader(dataset=train_dataset,
                                    batch_sampler=train_batch_sampler,
                                    num_workers=1)

    test_batch_sampler = BalanceBatchSampler(dataset=test_dataset,
                                             n_classes=n_classes,
                                             n_samples=n_samples)
    test_batch_loader = DataLoader(dataset=test_dataset,
                                   batch_sampler=test_batch_sampler,
                                   num_workers=1)

    model = networks.embedding_net_shallow()
    model = model.cuda()
    loss_fn = RandomHardTripletLoss(
        margin=margin,
        triplet_selector=RandomNegativeTripletSelector(margin=margin))
    optimizer = optim.Adam(model.parameters(), lr=lr)
    scheduler = lr_scheduler.StepLR(optimizer=optimizer,
                                    step_size=30,
                                    gamma=0.5)

    fit(train_loader=train_batch_loader,
        val_loader=test_batch_loader,
        model=model,
        loss_fn=loss_fn,
        optimizer=optimizer,
        scheduler=scheduler,
        n_epochs=n_epochs,
        log_interval=log_interval,
        metrics=[AverageNoneZeroTripletsMetric()])

    verification(model=model)
    train_embedding_tl, train_labels_tl = extract_embeddings(
        train_batch_loader, model, 64)
    # utils.plot_embeddings(embeddings=train_embedding_tl, targets=train_labels_tl, title='train set')
    test_embedding_tl, test_labels_tl = extract_embeddings(
        test_batch_loader, model, 64)
    # utils.plot_embeddings(embeddings=test_embedding_tl, targets=test_labels_tl, title='test set')

    model2 = networks.classifier()
    model2 = model2.cuda()
    loss_fn2 = nn.CrossEntropyLoss()
    optimizer2 = optim.Adam(model2.parameters(), lr=lr)
    scheduler2 = lr_scheduler.StepLR(optimizer=optimizer2,
                                     step_size=30,
                                     gamma=0.5)
    train_dataset2 = DatasetWrapper(data=train_embedding_tl,
                                    labels=train_labels_tl,
                                    transform=ToTensor())
    test_dataset2 = DatasetWrapper(data=test_embedding_tl,
                                   labels=test_labels_tl,
                                   transform=ToTensor())
    train_loader2 = DataLoader(dataset=train_dataset2,
                               batch_size=128,
                               shuffle=True,
                               num_workers=1)
    test_loader2 = DataLoader(dataset=test_dataset2,
                              batch_size=128,
                              shuffle=False,
                              num_workers=1)

    train_hist = History(name='train/a')
    val_hist = History(name='val/a')
    ckpter = CheckPoint(
        model=model,
        optimizer=optimizer,
        path='{}/ckpt/hard_triplet_baseline_exp'.format(ROOT_DIR),
        prefix=ckpt_prefix,
        interval=1,
        save_num=1)
    fit(train_loader=train_loader2,
        val_loader=test_loader2,
        model=model2,
        loss_fn=loss_fn2,
        optimizer=optimizer2,
        scheduler=scheduler2,
        n_epochs=n_epochs,
        log_interval=log_interval,
        metrics=[AccumulatedAccuracyMetric()],
        train_hist=train_hist,
        val_hist=val_hist,
        ckpter=ckpter,
        logging=logging)
def batch_all_total_with_knn_exp(device='0',
                                 ckpt_prefix='Run01',
                                 lr=1e-3,
                                 embedding_epochs=10,
                                 classify_epochs=100,
                                 n_classes=10,
                                 n_samples=12,
                                 batch_size=128,
                                 margin=0.3,
                                 log_interval=50,
                                 log_level="INFO",
                                 k=3,
                                 squared=False,
                                 embed_dims=64,
                                 embed_net='vgg'):
    """
    Using the entire data set, including device A, B, C.
    Using the batch all method to select the triplets, kNN as the verification
    Finally, using a linear classifier to classify the extraction into embeddings.
    :param device:
    :param lr:
    :param n_epochs:
    :param n_classes:
    :param n_samples:
    :param k: kNN parameter
    :return:
    """
    SEED = 0
    torch.manual_seed(SEED)
    torch.cuda.manual_seed(SEED)
    np.random.seed(SEED)

    kwargs = locals()
    log_file = '{}/ckpt/batch_all_total_with_knn_exp/{}.log'.format(
        ROOT_DIR, ckpt_prefix)
    if not os.path.exists(os.path.dirname(log_file)):
        os.makedirs(os.path.dirname(log_file))
    logging.basicConfig(filename=log_file,
                        level=getattr(logging, log_level.upper(), None))
    logging.info(str(kwargs))

    os.environ['CUDA_VISIBLE_DEVICES'] = str(device)

    # get the mean and std of dataset train/a
    standarizer = TaskbStandarizer(data_manager=Dcase18TaskbData())
    mu, sigma = standarizer.load_mu_sigma(mode='train', device='abc')

    # get the normalized train dataset
    train_dataset = DevSet(mode='train',
                           device='abc',
                           transform=Compose(
                               [Normalize(mean=mu, std=sigma),
                                ToTensor()]))

    # get the normalized test dataset
    test_dataset = {}
    device_list = ['a', 'b', 'c', 'bc']
    for device in device_list:
        test_dataset[device] = DevSet(
            mode='test',
            device=device,
            transform=Compose([Normalize(mean=mu, std=sigma),
                               ToTensor()]))

    train_batch_sampler = BalanceBatchSampler(dataset=train_dataset,
                                              n_classes=n_classes,
                                              n_samples=n_samples)
    train_batch_loader = DataLoader(dataset=train_dataset,
                                    batch_sampler=train_batch_sampler,
                                    num_workers=1)

    test_loader = {}
    for device in device_list:
        test_loader[device] = DataLoader(dataset=test_dataset[device],
                                         batch_size=batch_size,
                                         shuffle=False,
                                         num_workers=1)

    # network architecture
    if embed_net == 'vgg':
        model = networks.vggish_bn()
    elif embed_net == 'shallow':
        model = networks.embedding_net_shallow()
    else:
        print("{} network doesn't exist.".format(embed_net))
        return

    # to gpu
    model = model.cuda()
    loss_fn = BatchAllTripletLoss(margin=margin,
                                  squared=squared,
                                  soft_margin=False)
    optimizer = optim.Adam(model.parameters(), lr=lr)
    scheduler = lr_scheduler.StepLR(optimizer=optimizer,
                                    step_size=30,
                                    gamma=0.5)

    train_hist = History(name='train/a')
    val_hist = {}
    for device in device_list:
        val_hist[device] = History(name=('test/' + str(device)))

    # learning embedding checkpointer.
    ckpter = CheckPoint(
        model=model,
        optimizer=optimizer,
        path='{}/ckpt/batch_all_total_with_knn_exp'.format(ROOT_DIR),
        prefix=ckpt_prefix,
        interval=1,
        save_num=1)

    # training embedding network
    for epoch in range(1, embedding_epochs + 1):
        scheduler.step()
        train_loss, metrics = train_epoch(
            train_loader=train_batch_loader,
            model=model,
            loss_fn=loss_fn,
            optimizer=optimizer,
            log_interval=log_interval,
            metrics=[AverageNoneZeroTripletsMetric()])
        train_logs = {'loss': train_loss}
        for metric in metrics:
            train_logs[metric.name()] = metric.value()
        train_hist.add(logs=train_logs, epoch=epoch)

        for device in device_list:
            test_acc = kNN(model=model,
                           train_loader=train_batch_loader,
                           test_loader=test_loader[device],
                           k=k)
            test_logs = {'acc': test_acc}
            val_hist[device].add(logs=test_logs, epoch=epoch)

        train_hist.clear()
        train_hist.plot()
        logging.info('Epoch{:04d}, {:15}, {}'.format(epoch, train_hist.name,
                                                     str(train_hist.recent)))

        for device in device_list:
            val_hist[device].plot()
            logging.info('Epoch{:04d}, {:15}, {}'.format(
                epoch, val_hist[device].name, str(val_hist[device].recent)))

        ckpter.check_on(epoch=epoch,
                        monitor='acc',
                        loss_acc=val_hist['bc'].recent)

    # train classifier using learned embeddings.
    classify_model = networks.classifier()
    classify_model = classify_model.cuda()
    classify_loss_fn = nn.CrossEntropyLoss()
    classify_optimizer = optim.Adam(classify_model.parameters(), lr=lr)
    classify_scheduler = lr_scheduler.StepLR(optimizer=classify_optimizer,
                                             step_size=30,
                                             gamma=0.5)
    classify_train_hist = History(name='classify_train/a')
    classify_val_hist = {}
    for device in device_list:
        classify_val_hist[device] = History(name=('classify_val/' +
                                                  str(device)))
    classify_ckpter = CheckPoint(
        model=classify_model,
        optimizer=classify_optimizer,
        path='{}/ckpt/batch_all_total_with_knn_exp'.format(ROOT_DIR),
        prefix=ckpt_prefix,
        interval=1,
        save_num=1)
    # reload best embedding model
    best_model_filename = Reporter(
        ckpt_root=os.path.join(ROOT_DIR, 'ckpt'),
        exp='batch_all_total_with_knn_exp').select_best(
            run=ckpt_prefix).selected_ckpt
    model.load_state_dict(torch.load(best_model_filename)['model_state_dict'])

    # learned best embeddings
    train_embedding, train_labels = extract_embeddings(train_batch_loader,
                                                       model, embed_dims)
    test_embedding, test_labels = {}, {}
    for device in device_list:
        test_embedding[device], test_labels[device] = extract_embeddings(
            test_loader[device], model, embed_dims)

    # wrap embeddings(numpy) to Dataset
    classify_train_dataset = DatasetWrapper(data=train_embedding,
                                            labels=train_labels,
                                            transform=ToTensor())
    classify_test_dataset = {}
    for device in device_list:
        classify_test_dataset[device] = DatasetWrapper(
            data=test_embedding[device],
            labels=test_labels[device],
            transform=ToTensor())
    classify_train_loader = DataLoader(dataset=classify_train_dataset,
                                       batch_size=batch_size,
                                       shuffle=True,
                                       num_workers=1)
    classify_test_loader = {}
    for device in device_list:
        classify_test_loader[device] = DataLoader(
            dataset=classify_test_dataset[device],
            batch_size=batch_size,
            shuffle=False,
            num_workers=1)

    fit(train_loader=classify_train_loader,
        val_loader=classify_test_loader,
        model=classify_model,
        loss_fn=classify_loss_fn,
        optimizer=classify_optimizer,
        scheduler=classify_scheduler,
        n_epochs=classify_epochs,
        log_interval=log_interval,
        metrics=[AccumulatedAccuracyMetric()],
        train_hist=classify_train_hist,
        val_hist=classify_val_hist,
        ckpter=classify_ckpter,
        logging=logging)