Ejemplo n.º 1
0
def load_cape_network():
    reference_mesh_file = 'data/template_mesh.obj'
    reference_mesh = Mesh(filename=reference_mesh_file)

    ds_factors = [1, 2, 1, 2, 1, 2, 1, 1]

    print("Pre-computing mesh pooling matrices ..")
    M,A,D,U, _ = mesh_sampling.generate_transform_matrices(reference_mesh, ds_factors)
    p = list(map(lambda x: x.shape[0], A))
    A = list(map(lambda x: x.astype('float32'), A))
    D = list(map(lambda x: x.astype('float32'), D))
    U = list(map(lambda x: x.astype('float32'), U))
    L = [mesh_sampling.laplacian(a, normalized=True) for a in A]

    # load pre-computed graph laplacian and pooling matrices for discriminator
    L_ds2, D_ds2, U_ds2 = load_graph_mtx(project_dir)

    with open('configs/CAPE-affineconv_nz64_pose32_clotype32_male.yaml') as fl:
        params = yaml.load(fl, Loader=yaml.FullLoader)

    params['lr_scaler'] = 1e-1
    params['lambda_gan'] = 0.1
    params['regularization'] = 2e-3
    nf = params["nf"]
    if params["num_conv_layers"]==4:
        params['F'] = [nf, 2*nf, 2*nf, nf]
    elif params["num_conv_layers"]==6:
        params['F'] = [nf, nf, 2*nf, 2*nf, 4*nf, 4*nf]
    elif params["num_conv_layers"] == 8:
        params['F'] = [nf, nf, 2*nf, 2*nf, 4*nf, 4*nf, 8*nf, 8*nf]
    else:
        raise NotImplementedError
    
    params['p'] = p
    params['K'] = [2] * params["num_conv_layers"]
    params['restart'] = 1
    params['nn_input_channel'] = 3
    params['Kd'] = 3
    params['cond_dim'] = 14*9
    params['cond2_dim'] = 4
    params['n_layer_cond'] = 1
    params['optimizer'] = 'sgd'
    params['optim_condnet'] = 1

    non_model_params = ['demo_n_sample', 'mode', 'dataset', 'num_conv_layers', 'ds_factor',
                    'nf', 'config', 'pose_type', 'decay_every', 'gender',
                    'save_obj', 'vis_demo', 'smpl_model_folder']

    for key in non_model_params:
        params.pop(key,None)

    print("Building model graph...")
    model = models.CAPE(L=L, D=D, U=U, L_d=L_ds2, D_d=D_ds2, **params)
    model.build_graph(model.input_num_verts, model.nn_input_channel, phase='demo')
    print('Model loaded')

    return model
Ejemplo n.º 2
0
def load_graph_mtx(project_dir, load_for_demo=False):
    print('loading pre-saved transform matrices...')
    A_ds2 = list(
        np.load(os.path.join(project_dir, 'data',
                             'transform_matrices/ds2/A.npy'),
                encoding='latin1'))
    D_ds2 = list(
        np.load(os.path.join(project_dir, 'data',
                             'transform_matrices/ds2/D.npy'),
                encoding='latin1'))
    U_ds2 = list(
        np.load(os.path.join(project_dir, 'data',
                             'transform_matrices/ds2/U.npy'),
                encoding='latin1'))

    A_ds2 = list(map(lambda x: x.astype('float32'), A_ds2))
    D_ds2 = list(map(lambda x: x.astype('float32'), D_ds2))
    U_ds2 = list(map(lambda x: x.astype('float32'), U_ds2))

    L_ds2 = [laplacian(a, normalized=True) for a in A_ds2]

    if not load_for_demo:
        return L_ds2, D_ds2, U_ds2
    else:
        A = list(
            np.load(os.path.join(project_dir, 'data',
                                 'transform_matrices/for_demo/A.npy'),
                    encoding='latin1'))
        D = list(
            np.load(os.path.join(project_dir, 'data',
                                 'transform_matrices/for_demo/D.npy'),
                    encoding='latin1'))
        U = list(
            np.load(os.path.join(project_dir, 'data',
                                 'transform_matrices/for_demo/U.npy'),
                    encoding='latin1'))

        p = list(map(lambda x: x.shape[0], A))
        A = list(map(lambda x: x.astype('float32'), A))
        D = list(map(lambda x: x.astype('float32'), D))
        U = list(map(lambda x: x.astype('float32'), U))

        L = [laplacian(a, normalized=True) for a in A]
        return L, D, U, p, L_ds2, D_ds2, U_ds2
Ejemplo n.º 3
0
def load_graph_mtx(project_dir):
    print('loading pre-saved transform matrices for downsampling factor=2..')
    A_ds2 = list(
        np.load(os.path.join(project_dir, 'data',
                             'transform_matrices/ds2/A.npy'),
                encoding='latin1'))
    D_ds2 = list(
        np.load(os.path.join(project_dir, 'data',
                             'transform_matrices/ds2/D.npy'),
                encoding='latin1'))
    U_ds2 = list(
        np.load(os.path.join(project_dir, 'data',
                             'transform_matrices/ds2/U.npy'),
                encoding='latin1'))

    A_ds2 = list(map(lambda x: x.astype('float32'), A_ds2))
    D_ds2 = list(map(lambda x: x.astype('float32'), D_ds2))
    U_ds2 = list(map(lambda x: x.astype('float32'), U_ds2))

    L_ds2 = [laplacian(a, normalized=True) for a in A_ds2]

    return L_ds2, D_ds2, U_ds2
Ejemplo n.º 4
0
    ds_factors = [1, args.ds_factor, 1, 1]
elif args.num_conv_layers == 6:
    ds_factors = [1, args.ds_factor, 1, args.ds_factor, 1, 1]
elif args.num_conv_layers == 8:
    ds_factors = [
        1, args.ds_factor, 1, args.ds_factor, 1, args.ds_factor, 1, 1
    ]

print("Pre-computing mesh pooling matrices ..")
M, A, D, U, _ = mesh_sampling.generate_transform_matrices(
    reference_mesh, ds_factors)
p = list(map(lambda x: x.shape[0], A))
A = list(map(lambda x: x.astype('float32'), A))
D = list(map(lambda x: x.astype('float32'), D))
U = list(map(lambda x: x.astype('float32'), U))
L = [mesh_sampling.laplacian(a, normalized=True) for a in A]

# load pre-computed graph laplacian and pooling matrices for discriminator
L_ds2, D_ds2, U_ds2 = load_graph_mtx(project_dir)

# pass params and build model
params = copy.deepcopy(args_dict)
params['restart'] = bool(args.restart)
params['use_res_block'], params['use_res_block_dec'] = bool(
    args.use_res_block), bool(args.use_res_block_dec)
params['nn_input_channel'] = 3

nf = args.nf
if args.num_conv_layers == 4:
    params['F'] = [nf, 2 * nf, 2 * nf, nf]
elif args.num_conv_layers == 6: