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
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
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
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: