def load_model(self,
                   vgg_path,
                   plain_decoder_path,
                   tune_vgg_path=None,
                   encrypter_path=None,
                   decrypter_path=None):
        '''
        load pretrained vgg and plain decoder
        other default is None for cpt training
        '''
        if encrypter_path is not None:
            self.encrypter.load_state_dict(torch.load(encrypter_path))

        self.plain_decoder.load_state_dict(torch.load(plain_decoder_path))
        vgg = model.VGG().eval()
        vgg.load_state_dict(torch.load(vgg_path))
        vgg = nn.Sequential(*list(vgg.children())[:31])
        self.fixed_feat_extractor = model.Feature_extractor(vgg, False)

        self.vgg_tune = model.VGG()
        if tune_vgg_path:
            self.vgg_tune = nn.Sequential(*list(self.vgg_tune.children())[:31])
            self.vgg_tune.load_state_dict(torch.load(tune_vgg_path))
        else:
            self.vgg_tune.load_state_dict(torch.load(vgg_path))
            self.vgg_tune = nn.Sequential(*list(self.vgg_tune.children())[:31])
        self.tune_feat_extractor = model.Feature_extractor(self.vgg_tune, True)

        if decrypter_path is not None:
            decrypter.load_state_dict(torch.load(decrypter_path))
示例#2
0
    def load_model(self,
                   vgg_path=None,
                   decoder_path=None,
                   message_encoder_path=None,
                   message_decoder_path=None):
        self.vgg = model.VGG()
        if vgg_path:
            self.vgg.load_state_dict(torch.load(vgg_path))
            self.vgg = nn.Sequential(*list(self.vgg.children())[:31])

        self.decoder = model.Decoder()
        if decoder_path:
            self.decoder.load_state_dict(torch.load(decoder_path))

        self.message_encoder = model.Message_Encoder()
        if message_encoder_path:
            self.message_encoder.load_state_dict(
                torch.load(message_encoder_path))

        self.message_decoder = model.Message_Decoder(
            input_width=self.image_size,
            content_feat_shape=(self.vgg_relu_4_1_dim,
                                int(self.image_size / self.down_scale),
                                int(self.image_size / self.down_scale)))
        if message_decoder_path:
            self.message_decoder.load_state_dict(
                torch.load(message_decoder_path))
示例#3
0
def main():
    config = Config()

    modeler = model.VGG(config)

    # read data to train("data/train")
    train_reader = read_data.VGGReader(config)

    modeler.inference()
    loss = modeler.loss
    train_op = modeler.train_op(loss)

    init = tf.global_variables_initializer()
    saver = tf.train.Saver(max_to_keep=100)

    sess_config = tf.ConfigProto()
    sess_config.gpu_options.allow_growth = True

    with tf.Session(config=sess_config) as sess:
        sess.run(init)
        #saver.restore(sess, config.param_dir + config.load_filename)
        #print "restore params" + config.steps

        merged = tf.summary.merge_all()
        logdir = os.path.join(config.log_dir,
                              datetime.now().strftime('%Y-%m-%d_%H-%M-%S'))
        train_writer = tf.summary.FileWriter(logdir, sess.graph)

        #start training
        print 'start training'
        for step in range(config.max_step):
            #start_time = time.time()

            with tf.device('/cpu:0'):
                images_train, labels_train, filesname_train = train_reader.get_random_batch(
                    True)

            feed_dict = {
                modeler.image_holder: images_train,
                modeler.label_holder: labels_train,
                modeler.is_train: True
            }

            with tf.device('/gpu:0'):
                _, loss_value = sess.run([train_op, loss], feed_dict=feed_dict)

            with tf.device('/cpu:0'):
                if (step + 1) % config.checkpointer_iter == 0:
                    modeler.save_npy(
                        sess, config.param_dir + config.save_filename +
                        str(modeler.global_step.eval()) + '.npy')

                if (step + 1) % config.summary_iter == 0:
                    summary = sess.run(merged, feed_dict=feed_dict)
                    train_writer.add_summary(summary,
                                             modeler.global_step.eval())

            if step % 10 == 0:
                print 'step %d, loss = %.3f' % (step, loss_value)
示例#4
0
    def load_model(self, vgg_path, decoder_path=None):
        self.vgg = model.VGG()
        self.vgg.load_state_dict(torch.load(vgg_path))
        self.vgg = nn.Sequential(*list(self.vgg.children())[:31])
        self.vgg_encoder = model.VGG_Encoder(self.vgg)

        self.decoder = model.Decoder()
        if decoder_path:
            self.decoder.load_state_dict(torch.load(decoder_path))
示例#5
0
    def build_model(self):
        #         if self.phase == 'continue_train':
        #             self.model = util.load_model(self.parent_dir, self.valid_fold)
        #         else:
        #             self.model = model.Attention()
        self.model = model.VGG()
        self.model = self.model.to(self.device)

        self.criterion = torch.nn.BCEWithLogitsLoss()
        self.optimizer = optim.Adam(self.model.parameters(),
                                    lr=self.lr,
                                    betas=(0.9, 0.999),
                                    weight_decay=1e-5)
示例#6
0
def train(opt, images):

    gennet_g = model.Generator()
    gennet_f = model.Generator()
    vgg = model.VGG()

    discrinet_c = model.Discriminator(3)
    discrinet_t = model.Discriminator(1)

    g_optimizer = optimizer.Adam(params=gennet_g.parameters(), lr=opt.lr)
    f_optimizer = optimizer.Adam(params=gennet_f.parameters(), lr=opt.lr)
    c_optimizer = optimizer.Adam(params=discrinet_c.parameters(), lr=opt.lr)
    t_optimizer = optimizer.Adam(params=discrinet_t.parameters(), lr=opt.lr)

    optimizers = dict()
    optimizers['g'] = g_optimizer
    optimizers['f'] = f_optimizer
    optimizers['c'] = c_optimizer
    optimizers['t'] = t_optimizer

    content_criterion = nn.L1Loss()
    texture_criterion = model.GANLoss()
    color_criterion = model.GANLoss()
    tv_criterion = model.TVLoss(1.0)

    num_samples = 0

    for i in xrange(opt.epoches):

        for j in xrange(num_samples / opt.batch_size):

            batch = generate_batches(images, opt.batch_size)
            loss = train_step(vgg=vgg,
                              gennet_g=gennet_g,
                              gennet_f=gennet_f,
                              discrinet_c=discrinet_c,
                              discrinet_t=discrinet_t,
                              content_criterion=content_criterion,
                              color_criterion=color_criterion,
                              texture_critetion=texture_criterion,
                              tv_criterion=tv_criterion,
                              x=batch['x'],
                              y=batch['y'],
                              optimizers=optimizers)

            print("\nEpoch: %s\n" % i)
            print("Total Loss: %s \n" % loss['total_loss'])
            print("Color Loss: %s \n" % loss['color_loss'])
            print("Content Loss: %s \n" % loss['content_loss'])
            print("TV Loss: %s \n" % loss['tv_loss'])
            print("Texture Loss: %s \n" % loss['texture_loss'])
示例#7
0
def main():
    config = Config()

    modeler = model.VGG(config)

    #read data to val("data/val")
    val_reader = read_data.VGGReader(config)

    modeler.inference()
    accuracy = modeler.accuracy()

    init = tf.global_variables_initializer()

    sess_config = tf.ConfigProto()
    sess_config.gpu_options.allow_growth = True

    with tf.Session(config=sess_config) as sess:
        sess.run(init)
        #saver.restore(sess, config.param_dir+config.load_filename)
        print 'restore params' + config.steps

        #testing
        confmat = np.zeros((20, 20))
        count = 0
        num_iter = config.test_size // config.batch_size
        for i in range(num_iter):
            with tf.device('/cpu:0'):
                images_val, labels_val, filenames_val = val_reader.batch()

            with tf.device("/gpu:0"):

                predict = sess.run(modeler.pred,
                                   feed_dict={
                                       modeler.image_holder: images_val,
                                       modeler.is_train: False
                                   })
                #print predict, labels_val
                if labels_val[0][predict[0]] > 0:
                    count += 1
                    confmat[predict[0]][predict[0]] += 1
                else:
                    for i in range(20):
                        if labels_val[0][i] > 0:
                            confmat[i][predict[0]] += 1

        confmat = confmat * 20 / 5823

        print 'AP: ', count * 1.0 / config.test_size
        print 'confusion matrix: '
        print confmat
示例#8
0
def vgg_graph(sess, phs):
  VGG = model.VGG()
  Y_score = VGG.build(phs['batch_images'], N_CLASS, phs['is_training_ph'])

  Y_hat = tf.nn.softmax(Y_score)
  Y_pred = tf.argmax(Y_hat, 1)
  Y_label = tf.to_float(tf.one_hot(phs['batch_labels'], N_CLASS))

  cross_entropy = tf.nn.softmax_cross_entropy_with_logits(logits = Y_score, labels = Y_label)
  loss_op = tf.reduce_mean(cross_entropy)
  correct_prediction = tf.equal(tf.argmax(Y_hat, 1), tf.argmax(Y_label, 1))
  acc_op = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

  update_op = tf.train.MomentumOptimizer(LR, MOMENTUM).minimize(loss_op, var_list=VGG.vars)

  return loss_op, acc_op, cross_entropy, Y_hat, update_op, Y_pred, VGG.vars
示例#9
0
def main():
    config = Config()
    modeler = model.VGG(config)
    modeler.inference()

    # read data to test("data/train")
    val_reader = read_data.VGGReader(config)

    init = tf.global_variables_initializer()

    sess_config = tf.ConfigProto()
    sess_config.gpu_options.allow_growth = True

    with tf.Session(config=sess_config) as sess:
        sess.run(init)
        print 'restore params' + config.test_num

        print "finding thresholds..."
        for step in range(config.max_step):
            if step % (config.test_size // 10) == 0:
                print 100 * step // config.test_size, "%"
            with tf.device("/cpu:0"):
                images_val, labels_val, filesname_val = val_reader.batch()

            with tf.device("/gpu:0"):
                _, probs = sess.run([modeler.pred, modeler.prob],
                                    feed_dict={
                                        modeler.image_holder: images_val,
                                        modeler.is_train: False
                                    })

            thresholds, scores = find_threshold1(probs, labels_val)
            i = np.argmax(scores)
            best_threshold, best_score = thresholds[i], scores[i]

            best_thresholds, best_scores = find_threshold2(probs,
                                                           labels_val,
                                                           num_iters=500,
                                                           seed=best_threshold)

        with open(
                "./thresholds/" + config.net_name + "-thresholds-" +
                config.test_num + ".txt", 'w') as fr:
            for i in range(len(best_thresholds)):
                fr.write(str(best_thresholds[i]) + " ")
示例#10
0
def run(
        pixelcnn_ckpt,
        vgg_ckpt=None,
        adversarial_range=0.2,
        train_dataset='mnist',
        test_dataset='emnist',
        img_size=28,
        vgg_params={
            'batch_size': 16,
            'base_f': 16,
            'n_layers': 9,
            'dropout': 0.8,
            'optimizer': 'adam',
            'learnrate': 1e-4
        },
        exp_name='domain-prior',
        exp_dir='~/experiments/domain-prior/',
        cuda=True,
        resume=False):

    # Set up experiment directory
    exp_name += '_%s-to-%s_vgg%i-%i_adv%.2f' % (
        train_dataset, test_dataset, vgg_params['n_layers'],
        vgg_params['base_f'], adversarial_range)
    exp_dir = os.path.join(os.path.expanduser(exp_dir), exp_name)
    if not os.path.isdir(exp_dir):
        os.makedirs(exp_dir)

    # Train a VGG classifier if not already done
    if vgg_ckpt is None:
        train_loader, val_loader, n_classes = data.loader(
            train_dataset, vgg_params['batch_size'])
        if not resume:
            with open(os.path.join(exp_dir, 'vgg_params.json'), 'w') as f:
                json.dump(vgg_params, f)
            vgg = model.VGG(img_size, 1, vgg_params['base_f'],
                            vgg_params['n_layers'], n_classes,
                            vgg_params['dropout'])
        else:
            vgg = torch.load(os.path.join(exp_dir, 'best_checkpoint'))

        train.fit(train_loader,
                  val_loader,
                  vgg,
                  exp_dir,
                  torch.nn.CrossEntropyLoss(),
                  vgg_params['optimizer'],
                  vgg_params['learnrate'],
                  cuda,
                  resume=resume)
    else:
        vgg = torch.load(vgg_ckpt)

    pixelcnn = torch.load(pixelcnn_ckpt)
    pixelcnn_params = os.path.join(os.path.dirname(pixelcnn_ckpt),
                                   'params.json')
    with open(pixelcnn_params, 'r') as f:
        pixelcnn_params = json.load(f)
    n_bins = pixelcnn_params['n_bins']

    if cuda:
        vgg = vgg.cuda()
        pixelcnn = pixelcnn.cuda()

    # Run the datasets through the networks and calculate 3 pixelcnn losses:
    # 1. Average: mean across the image
    # 2. High-pass filtered: weight by difference to upper- and left- neighbors
    # 3. Saliency: weight by pixel saliency (vgg backprop-to-input)
    _, loader, _ = data.loader(train_dataset, 1)
    print('Calculating losses for ' + train_dataset)
    dom_avg, dom_hp, dom_sw, dom_sal, dom_var = calc_losses(
        vgg, pixelcnn, loader, n_bins, cuda)
    print('Calculating losses for adversarial images')
    adv_avg, adv_hp, adv_sw, adv_sal, adv_var = adversarial(
        vgg, pixelcnn, loader, n_bins, adversarial_range, cuda)
    _, loader, _ = data.loader(test_dataset, 1)
    print('Calculating losses for ' + test_dataset)
    ext_avg, ext_hp, ext_sw, ext_sal, ext_var = calc_losses(
        vgg, pixelcnn, loader, n_bins, cuda)

    # Loss histograms
    n_bins = 100
    all_losses = np.concatenate((dom_avg, adv_avg, ext_avg, dom_hp, adv_hp,
                                 ext_hp, dom_sw, adv_sw, ext_sw))
    edges = np.linspace(0, np.percentile(all_losses, 95), n_bins + 1)
    # average loss
    vis.histogram(dom_avg, edges, train_dataset + ' average loss', exp_dir)
    vis.histogram(adv_avg, edges, 'adversarial average loss', exp_dir)
    vis.histogram(ext_avg, edges, test_dataset + ' average loss', exp_dir)
    # high-pass weighted loss
    vis.histogram(dom_hp, edges, train_dataset + ' highpass loss', exp_dir)
    vis.histogram(adv_hp, edges, 'adversarial highpass loss', exp_dir)
    vis.histogram(ext_hp, edges, test_dataset + ' highpass loss', exp_dir)
    # saliency weighted loss
    vis.histogram(dom_sw, edges, train_dataset + ' saliency loss', exp_dir)
    vis.histogram(adv_sw, edges, 'adversarial saliency loss', exp_dir)
    vis.histogram(ext_sw, edges, test_dataset + ' saliency loss', exp_dir)
    # loss variances
    loss_variances = np.concatenate((dom_var, adv_var, ext_var))
    edges = np.linspace(0, np.percentile(loss_variances, 95), n_bins + 1)
    vis.histogram(dom_var, edges, train_dataset + ' loss variance', exp_dir)
    vis.histogram(adv_var, edges, 'adversarial loss variance', exp_dir)
    vis.histogram(ext_var, edges, test_dataset + ' loss variance', exp_dir)

    # Calculate epistemic uncertainties for each dataset for each model
    _, loader, _ = data.loader(train_dataset, 1)
    dom_class_epi = epistemic(vgg, loader, cuda)
    adv_class_epi = epistemic_adversarial(vgg, adversarial_range, loader, cuda)
    _, loader, _ = data.loader(test_dataset, 1)
    ext_class_epi = epistemic(vgg, loader, cuda)

    # Classifier uncertainty histograms
    n_bins = 100
    all_class_epi = dom_class_epi + adv_class_epi + ext_class_epi
    edges = np.linspace(0, np.percentile(all_class_epi, 95), n_bins + 1)
    vis.histogram(dom_class_epi, edges,
                  train_dataset + ' classifier uncertainty', exp_dir)
    vis.histogram(adv_class_epi, edges, 'adversarial classifier uncertainty',
                  exp_dir)
    vis.histogram(ext_class_epi, edges,
                  test_dataset + ' classifier uncertainty', exp_dir)

    # ROC curves
    vis.roc(dom_avg, ext_avg, 'out-of-domain: average loss', exp_dir)
    vis.roc(dom_hp, ext_hp, 'out-of-domain: high-pass filtered loss', exp_dir)
    vis.roc(dom_sw, ext_sw, 'out-of-domain: saliency-weighted loss', exp_dir)
    vis.roc(dom_class_epi, ext_class_epi,
            'out-of-domain: epistemic uncertainty', exp_dir)
    vis.roc(dom_avg, adv_avg, 'adversarial: average loss', exp_dir)
    vis.roc(dom_hp, adv_hp, 'adversarial: high-pass filtered loss', exp_dir)
    vis.roc(dom_sw, adv_sw, 'adversarial: saliency-weighted loss', exp_dir)
    vis.roc(dom_class_epi, adv_class_epi, 'adversarial: epistemic uncertainty',
            exp_dir)
示例#11
0
    #load data
    train_data = datasets.TrainData_DIV2K
    train_data_loader = torch.utils.data.DataLoader(dataset=train_data,
                                                    batch_size=BATCH_SIZE,
                                                    shuffle=True)

    #load model
    models = {}
    models['generative'] = model.SRResNet().to(device)
    models['upscale'] = {}
    for scale in UPSCALE_FACTOR_LIST:
        models['upscale'][scale] = model.SubPixelLayer(
            models['generative'].output_channel, scale).to(device)
    models['extra'] = model.ExtraLayer().SRResNet().to(device)
    models['discriminator'] = model.VGG().to(device)
    if PRETRAINED == True:
        if CONTINUE == True:
            for scale in UPSCALE_FACTOR_LIST:
                utils.load_model(models, scale, SAVE_PATH, -1)
        else:
            for key in models.keys():
                print(models[key])
    else:
        if CONTINUE == True:
            for scale in UPSCALE_FACTOR_LIST:
                utils.load_model(models, scale, SAVE_PATH,
                                 EPOCH_START // len(UPSCALE_FACTOR_LIST))
        else:
            for scale in UPSCALE_FACTOR_LIST:
                utils.load_model(models, scale, SAVE_PATH, -1)
示例#12
0
    # data
    train_dataset = CustomDataset(resps['train'], images['train'])
    test_dataset = CustomDataset(resps['test'], images['test'])
    dataloader = DataLoader(train_dataset,
                            batch_size=params.trainBatch,
                            shuffle=True)
    test_loader = DataLoader(test_dataset,
                             batch_size=params.testBatch,
                             shuffle=False)

    # model
    net_g = model.Generator()
    net_g.to(device)
    net_d = model.Discriminator()
    net_d.to(device)
    model1 = model.VGG()
    model1.load_state_dict(torch.load('models/vgg16.pth'))
    model1.to(device)
    net_c = model.Comparator(model1, 22)
    net_c.to(device)
    for param in model1.parameters():
        param.requires_grad = False
    for param in net_c.parameters():
        param.requires_grad = False

    # optimizer
    if params.optimizer_type == 'Adam':
        optimizer_g = optim.Adam(net_g.parameters(),
                                 lr=params.lr,
                                 betas=(params.beta1, params.beta2))
        optimizer_d = optim.Adam(net_d.parameters(),
示例#13
0
def trainNet(
    datapath='.',
    nepochs=1,
    learning_rate=0.001,
    batch_size=64,
    cuda=False,
    savedir='./',
    lossPlotName='loss.png',
    num_workers=24,
):
    '''
    Our basic training file
    '''
    if "/" not in savedir[-1]:
        savedir += "/"
    if cuda:
        print(f"Running on GPU")
        device = torch.device('cuda')
        net = model.VGG().to(device)
    else:
        print(f"Running on CPU")
        device = torch.device('cpu')
        net = model.VGG()
    # Dataset
    #imagenet = datasets.ImageNet('/research/imgnet/ILSVRC2013_DET_train/',
    #        split='train')
    t = transforms.Compose([
        transforms.Resize(256),
        transforms.CenterCrop(224),
        transforms.ToTensor(),
    ])
    train_images = datasets.CIFAR10('.',
                                    train=True,
                                    download=True,
                                    transform=t)
    train_data = torch.utils.data.DataLoader(train_images,
                                             batch_size=batch_size,
                                             shuffle=True,
                                             num_workers=num_workers)

    #criterion = nn.MSELoss()
    criterion = nn.CrossEntropyLoss()
    optimizer = optim.Adam(net.parameters(), lr=learning_rate)
    epoch_loss_array = torch.zeros(nepochs)
    print(f"Train data {len(train_images)}")
    for epoch in range(nepochs):
        net.train()
        epoch_loss = 0
        for i, (img, label) in enumerate(train_data):
            optimizer.zero_grad()
            out = net(img.to(device))
            loss = criterion(out.to(device), label.to(device))
            epoch_loss += loss.item()
            loss.backward()
            optimizer.step()

        epoch_loss /= (i + 1)
        print(f"Epoch {epoch} loss {epoch_loss}")
        epoch_loss_array[epoch] = epoch_loss

    utils.plot_loss(epoch_loss_array, savedir + lossPlotName)
    net.load_state_dict(torch.load('final_model.pt'))

    # Testing
    with torch.no_grad():
        net.eval()
        test_loss = 0.
        test_images = datasets.CIFAR10('.',
                                       train=False,
                                       download=True,
                                       transform=t)
        test_data = torch.utils.data.DataLoader(test_images,
                                                batch_size=batch_size,
                                                shuffle=True,
                                                num_workers=num_workers)
        classes = [
            'plane', 'car', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse',
            'ship', 'truck'
        ]
        corrects = np.zeros(len(classes), dtype=np.int)
        totals = np.zeros(len(classes), dtype=np.int)
        trues = np.zeros(len(test_images))
        preds = np.zeros(len(test_images))
        for i, (img, label) in enumerate(test_data):
            optimizer.zero_grad()
            out = net(img.to(device))
            trues[i * batch_size:(i + 1) *
                  batch_size] = label.to('cpu').numpy()
            preds[i * batch_size:(i + 1) *
                  batch_size] = [np.argmax(o) for o in out.to('cpu').numpy()]
            for o, l in zip(out, label):
                o = o.to('cpu').numpy()
                l = l.to('cpu').numpy()
                totals[l] += 1
                if np.argmax(o) == l:
                    corrects[l] += 1
            loss = criterion(out.to(device), label.to(device))
            test_loss += loss.item()
            if i == 0:
                utils.plot_examples(img[:9].to('cpu'),
                                    out[:9].to('cpu').numpy(), classes,
                                    label[:9].to('cpu').numpy(),
                                    savedir + "examples.png")
        test_loss /= (i + 1)
    print(f"Test loss {test_loss}")
    utils.confusionMatrix(trues, preds, classes)
    torch.save(net.state_dict(), "final_model.pt")
    #print(f"Corrects {corrects}")
    #print(f"Totals {totals}")
    print("Accuracy")
    print(f"Name\tCorrects\tAccuracy")
    for i in range(len(classes)):
        print(f"{classes[i]}\t{corrects[i]}\t\t{corrects[i]/totals[i]}")
    print(30 * "-")
    print(f"Sum\t{np.sum(corrects)}\t\t{np.sum(corrects)/np.sum(totals)}")
示例#14
0
def train(opt, images):

    gennet_g = model.Generator()
    gennet_f = model.Generator()

    vgg = model.VGG()

    discrinet_c = model.Discriminator(3)
    discrinet_t = model.Discriminator(1)

    gray_layer = model.GrayLayer(opt.use_cuda)
    gaussian = model.GaussianBlur()

    if opt.use_cuda:
        gennet_g = gennet_g.cuda()
        gennet_f = gennet_f.cuda()
        discrinet_c = discrinet_c.cuda()
        discrinet_t = discrinet_t.cuda()
        gray_layer = gray_layer.cuda()
        gaussian = gaussian.cuda()
        vgg = vgg.cuda()

    g_optimizer = optimizer.Adam(params=gennet_g.parameters(), lr=opt.lr)
    f_optimizer = optimizer.Adam(params=gennet_f.parameters(), lr=opt.lr)
    c_optimizer = optimizer.Adam(params=discrinet_c.parameters(), lr=opt.lr)
    t_optimizer = optimizer.Adam(params=discrinet_t.parameters(), lr=opt.lr)

    optimizers = dict()
    optimizers['g'] = g_optimizer
    optimizers['f'] = f_optimizer
    optimizers['c'] = c_optimizer
    optimizers['t'] = t_optimizer

    dataset = DPEDDataset(opt.data_dir)
    dataloader = DataLoader(dataset, batch_size=opt.batch_size, shuffle=True)
    num_samples = len(dataset)
    dataiter = iter(dataloader)
    for i in xrange(opt.epoches):

        for j in xrange(num_samples / opt.batch_size):

            batch_images, batch_target = dataiter.next()
            batch_images = Variable(batch_images)
            batch_target = Variable(batch_target)

            if opt.use_cuda:

                batch_target = batch_target.cuda()
                batch_images = batch_images.cuda()

            loss = train_step(use_cuda=opt.use_cuda,
                              vgg=vgg,
                              generator_f=gennet_f,
                              generator_g=gennet_g,
                              discriminator_c=discrinet_c,
                              discriminator_t=discrinet_t,
                              gray_layer=gray_layer,
                              blur_layer=gaussian,
                              input_image=batch_images,
                              target_image=batch_target,
                              optimizers=optimizers)

            print("\nEpoch: %s Batch: %s" % (i, j))
            print("Discriminator:")
            print("Color Loss: %s " % loss['discrim_color_loss'])
            print("Texture Loss: %s " % loss['discrim_texture_loss'])
            print("Generator:")
            print("Total Loss: %s " % loss['total_loss'])
            print("Content Loss: %s " % loss['content_loss'])
            print("Color Loss: %s " % loss['fake_color_loss'])
            print("Texture Loss: %s " % loss['fake_texture_loss'])
            print("TV Loss: %s " % loss['tv_loss'])
示例#15
0
def main():
    config = Config()

    modeler = model.VGG(config)

    #read data to val("data/val")
    val_reader = read_data.VGGReader(config)

    modeler.inference()
    accuracy = modeler.accuracy()

    init = tf.global_variables_initializer()
    #saver = tf.train.Saver(max_to_keep=200)

    sess_config = tf.ConfigProto()
    sess_config.gpu_options.allow_growth = True

    label_indexs = list()
    test_labels = list()

    with tf.Session(config=sess_config) as sess:
        sess.run(init)
        #saver.restore(sess, Config.vgg_path)
        print 'restore params' + config.steps

        #testing
        count = 0
        num_iter = config.test_size // config.batch_size
        max_false_probs = [0.0] * config.type_size
        max_true_probs = [0.0] * config.type_size
        pre_prob = [
            0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.6, 0.13, 0.13, 0.13,
            0.13, 0.13, 0.13, 0.13, 0.13, 0.13
        ]
        for i in range(num_iter):
            label_index = list()
            with tf.device('/cpu:0'):
                images_val, labels_val, filenames_val = val_reader.batch()

            with tf.device("/gpu:0"):

                predict, prob = sess.run([modeler.pred, modeler.prob],
                                         feed_dict={
                                             modeler.image_holder: images_val,
                                             modeler.is_train: False
                                         })
                if i < 20:
                    print predict, labels_val
                    print prob
                if i % (num_iter // 10) == 0:
                    print 100 * i / num_iter, "%"
                for j in range(config.type_size):
                    if (labels_val[0][j] == 1.0
                            and prob[0][j] > max_true_probs[j]):
                        max_true_probs[j] = prob[0][j]

                    if (labels_val[0][j] == 0.0
                            and prob[0][j] > max_false_probs[j]):
                        max_false_probs[j] = prob[0][j]

                    if prob[0][j] > pre_prob[j]:
                        label_index.append(j)

                label_indexs.append(label_index)

                is_correct = True
                for k in range(len(label_index)):
                    if labels_val[0][label_index[k]] == 0.0:
                        is_correct = False
                        break

                count_in = 0
                count_in1 = 0
                for k in range(len(labels_val[0])):
                    if labels_val[0][k] > 0.0:
                        count_in1 += 1
                        for n in range(len(label_index)):
                            if label_index[n] == k:
                                count_in += 1
                                break
                if count_in != count_in1:
                    is_correct = False

                s = filenames_val[0]
                for n in range(17):
                    is_in = False
                    for m in range(len(label_index)):
                        if n == label_index[m]:
                            is_in = True
                    if is_in:
                        s += " 1.0"
                    else:
                        s += " 0.0"
                test_labels.append(s)

                if is_correct:
                    count += 1
        with open("./labels/test_labels_pro.csv", 'w') as fr:
            fcsv = csv.writer(fr)
            for i in range(len(test_labels)):
                fcsv.writerow([test_labels[i]])
        '''
示例#16
0
transform = transforms.Compose([
    transforms.Resize((224, 224)),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])

# load the image
dataset = datasets.ImageFolder(root='./images/', transform=transform)

# dataloader
dataloader = torch.utils.data.DataLoader(dataset=dataset,
                                         shuffle=False,
                                         batch_size=1)

# model
my_vgg = model.VGG()

# evaluation mode
my_vgg.eval()

# get the image
img, _ = next(iter(dataloader))

# likelihood distribution
distribution = my_vgg(img)
# should be 386 for the elephant
pred = distribution.argmax(dim=1)
print(pred)

# gradient of the output with respect to the model parameters
distribution[:, 386].backward()
示例#17
0
# load image to torchTensor
style_img = ImageProcess.read_image(style_img_path).to(device)
print("style image shape:", style_img.shape)

content_img = ImageProcess.read_image(content_img_path).to(device)
print("content image shape:", content_img.shape)

# paint images
ImageProcess.paint_image(style_img, "style_image")
ImageProcess.paint_image(content_img, "content_image")

# build feature model
vgg16 = tv_models.vgg16(pretrained=True)
# convert into self feature extraction model
vgg16 = model.VGG(
    vgg16.features[:23]).to(device).eval()  # notify all layers in eval mode
if debug:
    print(vgg16)

# get features
style_features = vgg16(style_img)
content_features = vgg16(content_img)
if debug:
    print("style feature:")
    print([i.shape for i in style_features])
    print("content feature:")
    print([i.shape for i in content_features])

# calculate Gram matrix according to the extracted feature
style_gram = [gram_matrix(i) for i in style_features]
if debug:
示例#18
0
    # parameters
    batchSize = 128
    lr = 1e-4
    model_path = 'models/vgg16.pth'
    data_dir = 'data/cifar10/'
    epochs = [80, 20]

    if not os.path.exists(data_dir):
        os.makedirs(data_dir)
    if not os.path.exists('models'):
        os.makedirs('models')

    device = torch.device('cuda')

    # model and loss
    net = model.VGG()
    loss_f = nn.CrossEntropyLoss()
    net.to(device)
    loss_f.to(device)

    # data
    transform_train = tfs.Compose([
        tfs.RandomCrop(32, padding=4),
        tfs.RandomHorizontalFlip(),
        tfs.ToTensor()
    ])
    data = dst.CIFAR10(data_dir,
                       download=True,
                       train=True,
                       transform=transform_train)
    data_test = dst.CIFAR10(data_dir,