コード例 #1
0
def main():
    parser = argparse.ArgumentParser(
        description='chainer line drawing colorization')
    parser.add_argument('--batchsize',
                        '-b',
                        type=int,
                        default=16,
                        help='Number of images in each mini-batch')
    parser.add_argument('--epoch',
                        '-e',
                        type=int,
                        default=500,
                        help='Number of sweeps over the dataset to train')
    parser.add_argument('--gpu',
                        '-g',
                        type=int,
                        default=-1,
                        help='GPU ID (negative value indicates CPU)')
    parser.add_argument('--dataset',
                        '-i',
                        default='./images/',
                        help='Directory of image files.')
    parser.add_argument('--out',
                        '-o',
                        default='./result',
                        help='Directory to output the result')
    parser.add_argument('--resume',
                        '-r',
                        default='',
                        help='Resume the training from snapshot')
    parser.add_argument('--seed', type=int, default=0, help='Random seed')
    parser.add_argument('--snapshot_interval',
                        type=int,
                        default=1000,
                        help='Interval of snapshot')
    parser.add_argument('--display_interval',
                        type=int,
                        default=10,
                        help='Interval of displaying log to console')
    parser.add_argument('--test_visual_interval',
                        type=int,
                        default=500,
                        help='Interval of drawing test images')
    parser.add_argument('--test_out',
                        default='./test_result/',
                        help='DIrectory to output test samples')
    parser.add_argument('--test_image_path',
                        default='./test_samples/test_sample3/',
                        help='Directory of image files for testing')
    args = parser.parse_args()

    print('GPU: {}'.format(args.gpu))
    print('# Minibatch-size: {}'.format(args.batchsize))
    print('# epoch: {}'.format(args.epoch))
    print('')

    root = args.dataset

    gen = generator.GEN()
    #serializers.load_npz("/mnt/sakura201/gao/lineart/result_cnn/gen_iter_16000", gen)
    #print('generator loaded')

    dis = discriminator.DIS()

    # paired dataset
    paired_dataset = Rough2LineDatasetNote("dat/paired_dataset.dat",
                                           root + "rough/",
                                           root + "line/",
                                           root + "note",
                                           train=True,
                                           size=256)
    paired_iter = chainer.iterators.MultiprocessIterator(
        paired_dataset, args.batchsize)

    if args.gpu >= 0:
        chainer.cuda.get_device(args.gpu).use()  # Make a specified GPU current
        gen.to_gpu()  # Copy the model to the GPU
        dis.to_gpu()  # Copy the model to the GPU

    # Setup optimizer parameters.
    opt = optimizers.Adam(alpha=0.0001)
    opt.setup(gen)
    opt.add_hook(chainer.optimizer.WeightDecay(1e-5), 'hook_gen')

    opt_d = chainer.optimizers.Adam(alpha=0.0001)
    opt_d.setup(dis)
    opt_d.add_hook(chainer.optimizer.WeightDecay(1e-5), 'hook_dec')

    # Set up a trainer
    updater = ganUpdater(
        models=(gen, dis),
        iterator={
            'main': paired_iter,
            #'test': test_iter
        },
        optimizer={
            'gen': opt,
            'dis': opt_d
        },
        device=args.gpu)

    trainer = training.Trainer(updater, (args.epoch, 'epoch'), out=args.out)

    snapshot_interval = (args.snapshot_interval, 'iteration')
    snapshot_interval2 = (args.snapshot_interval * 2, 'iteration')
    trainer.extend(extensions.dump_graph('gen/loss'))
    trainer.extend(extensions.snapshot(), trigger=snapshot_interval2)
    trainer.extend(extensions.snapshot_object(gen,
                                              'gen_iter_{.updater.iteration}'),
                   trigger=snapshot_interval)
    trainer.extend(extensions.snapshot_object(
        dis, 'gen_dis_iter_{.updater.iteration}'),
                   trigger=snapshot_interval)
    trainer.extend(extensions.snapshot_object(opt, 'optimizer_'),
                   trigger=snapshot_interval)
    trainer.extend(extensions.LogReport(trigger=(10, 'iteration'), ))
    trainer.extend(
        extensions.PrintReport([
            'epoch', 'gen/loss', 'gen/loss_L', 'gen/loss_adv', 'dis/loss',
            'dis/fake_p', 'dis/real_p'
        ]))
    trainer.extend(extensions.ProgressBar(update_interval=10))
    trainer.extend(test_samples_simplification(updater, gen, args.test_out,
                                               args.test_image_path),
                   trigger=(args.test_visual_interval, 'iteration'))

    trainer.run()

    if args.resume:
        # Resume from a snapshot
        chainer.serializers.load_npz(args.resume, trainer)

    # Save the trained model
    chainer.serializers.save_npz(os.path.join(out, 'model_final'), gen)
    chainer.serializers.save_npz(os.path.join(out, 'optimizer_final'), opt)
コード例 #2
0
def simplify(file_path, simplifier, output_path, s_size):
    origin, transposed = read_img(file_path, s_size)
    x_in = np.zeros((1, 1, origin.shape[1], origin.shape[2]), dtype='f')
    x_in[0, :] = origin[0]
    x_in = cuda.to_gpu(x_in)
    cnn_in = Variable(x_in)

    cnn_out = simplifier(cnn_in, test=True)
    save_as_img(cnn_out.data[0], output_path, origin, transposed)


if __name__ == '__main__':
    if not os.path.exists(args.output):
        os.makedirs(args.output)

    simplifier = generator.GEN()
    serializers.load_npz(args.model, simplifier)
    print('simplifier loaded')

    if args.gpu >= 0:
        cuda.get_device(args.gpu).use()
        simplifier.to_gpu()

    file_test = glob.glob(args.test_path + '/*.jpg')
    for f in file_test:
        filename = os.path.basename(f)
        print(filename)
        filename = os.path.splitext(filename)[0]
        simplify(f, simplifier, args.output + "/" + filename + ".jpg",
                 args.size)
コード例 #3
0
    x_in = cuda.to_gpu(x_in)
    cnn_in = Variable(x_in)
    cnn_out = simplifier1(cnn_in, test=True)

    if args.mode == 1:
        cnn_in = (cnn_out.data * 255).clip(0, 255).astype(np.float32)
        cnn_out = simplifier2(cnn_in, test=True)

    save_as_img(cnn_out.data[0], output_path, origin, transposed)


if __name__ == '__main__':
    if not os.path.exists(args.output):
        os.makedirs(args.output)

    simplifier1 = generator.GEN()
    serializers.load_npz(args.model1, simplifier1)
    simplifier2 = generator.GEN()
    serializers.load_npz(args.model2, simplifier2)
    print('simplifier loaded')

    if args.gpu >= 0:
        cuda.get_device(args.gpu).use()
        simplifier1.to_gpu()
        simplifier2.to_gpu()

    file_test = glob.glob(args.test_path + '/*.jpg')
    for f in file_test:
        filename = os.path.basename(f)
        print(filename)
        filename = os.path.splitext(filename)[0]