Author SHA1 Message Date
luni 19938273c3 save 2023-02-13 10:03:19 +00:00
luni 11a8c7e63e imporve plot 2023-01-30 11:18:59 +00:00
luni 798bf1367d option to use global binning 2023-01-29 12:51:17 +00:00
luni b8fdf26750 more runs 2023-01-28 23:48:54 +00:00
luni 6bfd18f3c7 regenerate curv based on new binning 2023-01-28 23:37:08 +00:00
luni feadeb3b5a update 2023-01-28 22:04:41 +00:00
luni 28cdd79a6b generate test curv 2023-01-28 20:25:31 +00:00
luni b121ee25e1 generate curv with 100 2023-01-28 19:35:10 +00:00
luni a63a47d84e generating more curvatures 2023-01-28 19:12:34 +00:00
luni 632d8db815 generate raw curv values for test set 2023-01-28 16:18:29 +00:00
luni a5659196a2 fix generation location 2023-01-28 12:54:39 +00:00
luni 1beda23ce2 save config files update 2023-01-28 12:24:17 +00:00
luni c7e75acc2d generate curv with different radius 2023-01-28 10:59:41 +00:00
luni ef81e702fa generating skirt 10 curvatures 2023-01-27 23:22:09 +00:00
luni 4bc57b6067 geenrate curv based on frames file 2023-01-27 19:55:58 +00:00
luni 22f77aba6a visualize curv with different radius 2023-01-27 19:20:16 +00:00
luni 80381df65a optimizing curvature generation 2023-01-27 17:17:36 +00:00
luni 8c0436cea8 restore original pyramid model 2023-01-26 11:10:51 +00:00
16 changed files with 434 additions and 155 deletions
+5
View File
@@ -1,3 +1,8 @@
nohup python cvae.py --name="lhunor_abl_all_10p_curv_10_r2" > nohup/review/abl_all_10p_curv_10_r2.out 2>&1 &
nohup python auto_encoder_curv.py --name="lhunor_ae_curv_1_orig_curv_10_10p_r2" > nohup/review/curv_1_orig_curv_10_10p_r2.out 2>&1 &
nohup python auto_encoder_curv.py --name="lhunor_ae_curv_1_orig_curv_25_10p_r2" > nohup/review/curv_1_orig_curv_25_10p_r2.out 2>&1 &
nohup python auto_encoder_curv.py --name="lhunor_ae_curv_1_orig_curv_100_10p_r2" > nohup/review/curv_1_orig_curv_100_10p_r2.out 2>&1 &
one final convolutional layer for smoothing, on the final coordinates one final convolutional layer for smoothing, on the final coordinates
skirts!!!! skirts!!!!
+1 -1
View File
@@ -1,7 +1,7 @@
config = dict() config = dict()
config['gpu'] = '0' config['gpu'] = '0'
config['name'] = 'pyr_abl_32' config['name'] = 'pyr_abl_32_r1'
config['notes'] = '' config['notes'] = ''
# DON'T FORGET TO RESET SSIM LOSS USAGE # DON'T FORGET TO RESET SSIM LOSS USAGE
+8 -4
View File
@@ -1,8 +1,8 @@
config = dict() config = dict()
config['gpu'] = '3' config['gpu'] = '3'
config['name'] = 'pyr_abl_32_skirt_2' config['name'] = 'pyr_abl_32_skirt_r1'
config['notes'] = 'continued from pyr_abl_32_skirt-180k' config['notes'] = ''
# DON'T FORGET TO RESET SSIM LOSS USAGE # DON'T FORGET TO RESET SSIM LOSS USAGE
# DON'T FORGET TO CHECK MODEL LOADING # DON'T FORGET TO CHECK MODEL LOADING
@@ -24,7 +24,10 @@ config['pyramid']['resolutions'] = [32]
config['pyramid']['pretrained_pyramid'] = '' config['pyramid']['pretrained_pyramid'] = ''
config['pyramid']['final_upscale_enhancer'] = 'checkpoints/32_512_skirt' config['pyramid']['final_upscale_enhancer'] = 'checkpoints/32_512_skirt'
config['train_dir'] = '/home/workspace/local-data/train_skirt' config['pretrained_model'] = ''
config['pretrained_model_iteration'] = ''
config['train_dir'] = '/home/workspace/data/dataset/local-cache/train_skirt'
config['valid_dir'] = '/home/workspace/local-data/valid_skirt' config['valid_dir'] = '/home/workspace/local-data/valid_skirt'
config['test_dir'] = '/home/workspace/data/dataset/test_skirt_ready_2' config['test_dir'] = '/home/workspace/data/dataset/test_skirt_ready_2'
config['batch_size'] = 4 config['batch_size'] = 4
@@ -35,7 +38,7 @@ config['pyramid']['static_model'] = 'checkpoints/static_1_skirt'
config['pyramid']['body_model'] = 'checkpoints/body_1_skirt_2_2' config['pyramid']['body_model'] = 'checkpoints/body_1_skirt_2_2'
config['pyramid']['curvature_model'] = 'checkpoints/curv_1_skirt' config['pyramid']['curvature_model'] = 'checkpoints/curv_1_skirt'
config['dataset_in_memory'] = False config['dataset_in_memory'] = True
config['resolution'] = None config['resolution'] = None
config['latent_dim'] = 128 config['latent_dim'] = 128
@@ -65,6 +68,7 @@ config['signature_static'] = { 'uv_static': (512, 256, 3),
config['pyramid']['is_label'] = False config['pyramid']['is_label'] = False
config['pyramid']['latent_dim'] = config['latent_dim'] config['pyramid']['latent_dim'] = config['latent_dim']
config['pyramid']['add_noise'] = True config['pyramid']['add_noise'] = True
config['pyramid']['noise_amount'] = 0.001
config['pyramid']['loss_weights'] = [1,1,1,1,1] config['pyramid']['loss_weights'] = [1,1,1,1,1]
+31 -14
View File
@@ -384,9 +384,9 @@ def test(verts, faces, values):
if __name__ == '__main__': if __name__ == '__main__':
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
parser.add_argument("-f", "--folder", help = "end of range", default='/home/workspace/local-data/valid') parser.add_argument("-f", "--folder", help = "end of range", default='/home/workspace/data/dataset/test_skirt_ready_2')
parser.add_argument("-s", "--start", help = "start of range", default=0) parser.add_argument("-s", "--start", help = "start of range", default=0)
parser.add_argument("-e", "--end", help = "end of range", default=1500) parser.add_argument("-e", "--end", help = "end of range", default=30000)
parser.add_argument("-n", "--name", help = "end of range", default='lhunor') parser.add_argument("-n", "--name", help = "end of range", default='lhunor')
parser.add_argument("-sk", "--skirt", help = "end of range", default=1) parser.add_argument("-sk", "--skirt", help = "end of range", default=1)
args = parser.parse_args() args = parser.parse_args()
@@ -408,7 +408,7 @@ if __name__ == '__main__':
m2uv = np.load('custom_utils/m2uv' + ("_skirt" if args.skirt == 1 else "") + '.npy', allow_pickle=True).item() m2uv = np.load('custom_utils/m2uv' + ("_skirt" if args.skirt == 1 else "") + '.npy', allow_pickle=True).item()
m2uv = m2uv_array(m2uv) m2uv = m2uv_array(m2uv)
uv_mask = np.load('custom_utils/mask_256x512' + ("_skirt" if args.skirt == 1 else "") + '.npy') uv_mask = np.load('custom_utils/mask_256x512' + ("_skirt" if args.skirt == 1 else "") + '.npy')
curvature_label_type = '6_25' curvature_label_type = '6_25 '
uv_res = 256 uv_res = 256
uv_mask = (cv2.resize(uv_mask * 255.0, (uv_res, uv_res * 2)) / 255).astype(bool)[:, :, np.newaxis] uv_mask = (cv2.resize(uv_mask * 255.0, (uv_res, uv_res * 2)) / 255).astype(bool)[:, :, np.newaxis]
@@ -436,6 +436,23 @@ if __name__ == '__main__':
# ids = os.listdir(os.path.join(local_folder, 'mesh_static'))[int(args.start):int(args.end)] # ids = os.listdir(os.path.join(local_folder, 'mesh_static'))[int(args.start):int(args.end)]
# ids = [id.split('.')[0] for id in ids] # ids = [id.split('.')[0] for id in ids]
is_skirt = True if args.skirt == 1 else False
skirt_modifier = '_skirt' if is_skirt else ''
folder = args.folder
frames_file = 'frames' + skirt_modifier + '_10p.txt'
neighbourhood = 10
# frames = []
# with open(os.path.join(folder, frames_file), 'r') as f:
# lines = f.readlines()
# lines = [line.strip() for line in lines]
# frames = lines#[int(args.start):int(args.end)]
# ids = [frame.split('_')[0] for frame in frames]
print(f'params: -f {args.folder} -s {args.start} -e {args.end} -n {args.name} -skirt {args.skirt} -neigh {neighbourhood}')
ids = os.listdir(os.path.join(local_folder, 'pose_shape')) ids = os.listdir(os.path.join(local_folder, 'pose_shape'))
ids = [id.split('_')[0] for id in ids] ids = [id.split('_')[0] for id in ids]
ids = sorted(list(set(ids)))[int(args.start):int(args.end)] ids = sorted(list(set(ids)))[int(args.start):int(args.end)]
@@ -452,16 +469,16 @@ if __name__ == '__main__':
# plt.show() # plt.show()
# pass # pass
frames = glob.glob(os.path.join(local_folder, 'pose_shape', id + '_*')) frames_len = glob.glob(os.path.join(local_folder, 'pose_shape', id + '_*'))
frames = len(frames) frames_len = len(frames_len)
assert frames <= 300 assert frames_len <= 300
# offsets = sio.loadmat(os.path.join(folder, id, garment + '_offsets_static.mat'))['label'][:,:3] # offsets = sio.loadmat(os.path.join(folder, id, garment + '_offsets_static.mat'))['label'][:,:3]
verts_static = np.load(os.path.join(local_folder, 'mesh_static', id + '.npz'))['mesh_static'] verts_static = np.load(os.path.join(local_folder, 'mesh_static', id + '.npz'))['mesh_static']
mask = np.load(os.path.join(local_folder, 'mesh_mask', id + '.npy')).astype(bool) mask = np.load(os.path.join(local_folder, 'mesh_mask', id + '.npy')).astype(bool)
# body = readPC2(os.path.join(folder, id, 'Body_posed.pc16'), True)['V'] # body = readPC2(os.path.join(folder, id, 'Body_posed.pc16'), True)['V']
# gt = readPC2(os.path.join(folder, id, garment + '_registered.pc16'), True)['V'] # gt = readPC2(os.path.join(folder, id, garment + '_registered.pc16'), True)['V']
# curvature = np.load(os.path.join(folder, id, 'curvature_label_' + curvature_label_type + '.npy')) curvature = np.stack([np.load(os.path.join(local_folder, f'mesh_curvature_{neighbourhood}_2', f'{id}_{i}.npz'))['mesh_curvature'] for i in range(frames_len)])
# mesh_unposed = [np.load(os.path.join(folder, id, 'mesh_unposed', id + '_' + str(i) + '.npz')) for i in range(gt.shape[0])] # mesh_unposed = [np.load(os.path.join(folder, id, 'mesh_unposed', id + '_' + str(i) + '.npz')) for i in range(gt.shape[0])]
# mesh_unposed = np.stack([mesh_unposed[i]['mesh_unposed'] for i in range(gt.shape[0])]) # mesh_unposed = np.stack([mesh_unposed[i]['mesh_unposed'] for i in range(gt.shape[0])])
# mesh_unposed_no_shape = [np.load(os.path.join(folder, id, 'mesh_unposed_no_shape', id + '_' + str(i) + '.npz')) for i in range(gt.shape[0])] # mesh_unposed_no_shape = [np.load(os.path.join(folder, id, 'mesh_unposed_no_shape', id + '_' + str(i) + '.npz')) for i in range(gt.shape[0])]
@@ -470,8 +487,8 @@ if __name__ == '__main__':
# body_no_orient = np.stack([body_no_orient[i]['mesh_posed_body_no_orient'] for i in range(gt.shape[0])]) # body_no_orient = np.stack([body_no_orient[i]['mesh_posed_body_no_orient'] for i in range(gt.shape[0])])
# mesh_unposed_no_shape_one_hot = [np.load(os.path.join(local_folder, 'mesh_unposed_no_shape_one_hot', id + '_' + str(i) + '.npz')) for i in range(frames)] # mesh_unposed_no_shape_one_hot = [np.load(os.path.join(local_folder, 'mesh_unposed_no_shape_one_hot', id + '_' + str(i) + '.npz')) for i in range(frames)]
# mesh_unposed_no_shape_one_hot = [mesh_unposed_no_shape_one_hot[i]['mesh_unposed_no_shape'] for i in range(frames)] # mesh_unposed_no_shape_one_hot = [mesh_unposed_no_shape_one_hot[i]['mesh_unposed_no_shape'] for i in range(frames)]
mesh_posed_no_orient = [np.load(os.path.join(local_folder, 'mesh_posed_no_orient', id + '_' + str(i) + '.npz')) for i in range(frames)] # mesh_posed_no_orient = [np.load(os.path.join(local_folder, 'mesh_posed_no_orient', id + '_' + str(i) + '.npz')) for i in range(frames)]
mesh_posed_no_orient = [mesh_posed_no_orient[i]['mesh_posed_no_orient'] for i in range(frames)] # mesh_posed_no_orient = [mesh_posed_no_orient[i]['mesh_posed_no_orient'] for i in range(frames)]
# verts_dynamic = gt # verts_dynamic = gt
@@ -491,11 +508,11 @@ if __name__ == '__main__':
# uv_body = convert_to_uv_batch(uv_res, m2uv, uv_map, body[:, :, :], neighbours=3, mask=None, method='rbf', garment_uv_mask=None, garment_uv_mask_border=garment_uv_mask_border).astype(np.float32) # uv_body = convert_to_uv_batch(uv_res, m2uv, uv_map, body[:, :, :], neighbours=3, mask=None, method='rbf', garment_uv_mask=None, garment_uv_mask_border=garment_uv_mask_border).astype(np.float32)
# uv_posed_body_no_orient = convert_to_uv_batch(uv_res, m2uv, uv_map, body_no_orient[:, :, :], neighbours=3, mask=None, method='rbf', garment_uv_mask=None, garment_uv_mask_border=garment_uv_mask_border).astype(np.float32) # uv_posed_body_no_orient = convert_to_uv_batch(uv_res, m2uv, uv_map, body_no_orient[:, :, :], neighbours=3, mask=None, method='rbf', garment_uv_mask=None, garment_uv_mask_border=garment_uv_mask_border).astype(np.float32)
# uv_gt = convert_to_uv_batch(uv_res, m2uv, uv_map, gt[:, :, :], neighbours=3, mask=mask, method='rbf', garment_uv_mask=garment_uv_mask, garment_uv_mask_border=garment_uv_mask_border).astype(np.float32) # uv_gt = convert_to_uv_batch(uv_res, m2uv, uv_map, gt[:, :, :], neighbours=3, mask=mask, method='rbf', garment_uv_mask=garment_uv_mask, garment_uv_mask_border=garment_uv_mask_border).astype(np.float32)
# uv_curvature = convert_to_uv_batch_label(uv_res, m2uv, uv_map, curvature[:, :], neighbours=3, mask=mask, method='nearest', garment_uv_mask=garment_uv_mask, garment_uv_mask_border=garment_uv_mask_border).astype(np.float32) uv_curvature = convert_to_uv_batch_label(uv_res, m2uv, uv_map, curvature[:, :], neighbours=3, mask=mask, method='nearest', garment_uv_mask=garment_uv_mask, garment_uv_mask_border=garment_uv_mask_border).astype(np.float32)
# uv_unposed = convert_to_uv_batch(uv_res, m2uv, uv_map, mesh_unposed[:, :, :], neighbours=3, mask=mask, method='rbf', garment_uv_mask=garment_uv_mask, garment_uv_mask_border=garment_uv_mask_border).astype(np.float32) # uv_unposed = convert_to_uv_batch(uv_res, m2uv, uv_map, mesh_unposed[:, :, :], neighbours=3, mask=mask, method='rbf', garment_uv_mask=garment_uv_mask, garment_uv_mask_border=garment_uv_mask_border).astype(np.float32)
# uv_unposed_no_shape = convert_to_uv_batch(uv_res, m2uv, uv_map, mesh_unposed_no_shape[:, :, :], neighbours=3, mask=mask, method='rbf', garment_uv_mask=garment_uv_mask, garment_uv_mask_border=garment_uv_mask_border).astype(np.float32) # uv_unposed_no_shape = convert_to_uv_batch(uv_res, m2uv, uv_map, mesh_unposed_no_shape[:, :, :], neighbours=3, mask=mask, method='rbf', garment_uv_mask=garment_uv_mask, garment_uv_mask_border=garment_uv_mask_border).astype(np.float32)
# uv_unposed_no_shape_one_hot = convert_to_uv_batch(uv_res, m2uv, uv_map, mesh_unposed_no_shape_one_hot, neighbours=3, mask=mask, method='rbf', garment_uv_mask=garment_uv_mask, garment_uv_mask_border=garment_uv_mask_border, id=id) # uv_unposed_no_shape_one_hot = convert_to_uv_batch(uv_res, m2uv, uv_map, mesh_unposed_no_shape_one_hot, neighbours=3, mask=mask, method='rbf', garment_uv_mask=garment_uv_mask, garment_uv_mask_border=garment_uv_mask_border, id=id)
uv_posed_no_orient = convert_to_uv_batch(uv_res, m2uv, uv_map, mesh_posed_no_orient, neighbours=3, mask=mask, method='rbf', garment_uv_mask=garment_uv_mask, garment_uv_mask_border=garment_uv_mask_border, id=id) # uv_posed_no_orient = convert_to_uv_batch(uv_res, m2uv, uv_map, mesh_posed_no_orient, neighbours=3, mask=mask, method='rbf', garment_uv_mask=garment_uv_mask, garment_uv_mask_border=garment_uv_mask_border, id=id)
# uv_shaped_body = convert_to_uv(uv_res, m2uv, uv_map, shaped_body, neighbours=3, mask=None, method='rbf', garment_uv_mask=None).astype(np.float32) # uv_shaped_body = convert_to_uv(uv_res, m2uv, uv_map, shaped_body, neighbours=3, mask=None, method='rbf', garment_uv_mask=None).astype(np.float32)
print(time.perf_counter() - start) print(time.perf_counter() - start)
@@ -516,9 +533,9 @@ if __name__ == '__main__':
# for i in range(uv_gt.shape[0]): # for i in range(uv_gt.shape[0]):
# np.savez_compressed(os.path.join(folder, id, 'gt_uv', garment + '_' + str(i) + '.npz'), uv_gt=uv_gt[i, :, :, :]) # np.savez_compressed(os.path.join(folder, id, 'gt_uv', garment + '_' + str(i) + '.npz'), uv_gt=uv_gt[i, :, :, :])
# os.makedirs(os.path.join(folder, id, 'curvature_uv'), exist_ok=True) os.makedirs(os.path.join(folder, f'uv_curvature_{neighbourhood}_2'), exist_ok=True)
# for i in range(uv_curvature.shape[0]): for i in range(uv_curvature.shape[0]):
# np.savez_compressed(os.path.join(folder, id, 'curvature_uv', garment + '_' + str(i) + '.npz'), curvature_uv=uv_curvature[i, :, :]) np.savez_compressed(os.path.join(folder, f'uv_curvature_{neighbourhood}_2', id + '_' + str(i) + '.npz'), curvature_uv=uv_curvature[i, :, :])
# os.makedirs(os.path.join(folder, id, 'uv_unposed'), exist_ok=True) # os.makedirs(os.path.join(folder, id, 'uv_unposed'), exist_ok=True)
# for i in range(uv_unposed.shape[0]): # for i in range(uv_unposed.shape[0]):
+235
View File
@@ -0,0 +1,235 @@
import os
import sys
import tqdm
import argparse
import random
import string
import time
import numpy as np
import trimesh as tm
import cmapy as cm
import scipy as sp
import scipy.io as sio
import plotly.graph_objects as go
from pyntcloud import PyntCloud
from scipy.sparse import csr_matrix, coo_matrix
from scipy.sparse.csgraph import floyd_warshall, dijkstra
from plotly.subplots import make_subplots
from custom_utils.custom_utils import _maskFaces
from custom_utils.supersmpl_io import readPC2, readPC2Frame, writePC2, readOBJ
from custom_utils.custom_utils import _maskFaces
def export_to_ply(mesh, file):
ply = tm.exchange.ply.export_ply(mesh, encoding='binary', vertex_normal=True, include_attributes=True)
output_file = open(file, "wb+")
output_file.write(ply)
output_file.close()
def get_closest_n_points(verts, idx, n):
dist = sp.spatial.distance.cdist(verts[idx, :], verts)
dist[dist == 0] = 1e9
idx_sort = np.argsort(dist, axis=-1)
closest = idx_sort[:, :n]
return closest
def calculate_dist(folder, neighbourhood):
out = dict()
frames = sorted(os.listdir(os.path.join(folder, 'mesh_posed')))[int(args.start):int(args.end)]
for frame in tqdm.tqdm(frames):
id = frame.split('_')[0]
if id in out.keys():
continue
mask = np.load(os.path.join(folder, 'mesh_mask', f'{id}.npy')).astype(bool)
k_neighbors = np.argsort(dist[mask, :][:, mask], axis=-1)[:, :neighbourhood] #cloud.get_neighbors(k=neighbourhood)
out[id] = k_neighbors
return out
def histedges_equalN(x, nbin):
npt = len(x)
return np.interp(np.linspace(0, npt, nbin + 1),
np.arange(npt),
np.sort(x))
def get_bins(values, nr_of_bins):
flattened = []
for c in values:
flattened.extend(c.flatten())
flattened = np.array(flattened)
bins = histedges_equalN(flattened, nr_of_bins)
return bins
def generate_curvatures(folder, frame, bins, neighbourhoods=[25], nr_of_labels=[6]):
id = frame.split('_')[0]
frame_nr = int(frame.split('_')[1].split('.')[0])
mask = np.load(os.path.join(folder, 'mesh_mask', f'{id}.npy')).astype(bool)
_, faces = _maskFaces(np.zeros((14475,3)), F, mask)
v = np.load(os.path.join(folder, 'mesh_posed', f'{id}_{frame_nr}.npz'))['mesh_posed'][mask,:]
m = tm.Trimesh(v, faces, process=False, validate=False)
outliers = np.array([len(v) for v in m.vertex_neighbors]) == 0
outliers = np.nonzero(outliers)[0]
outliers_n_neighbours = get_closest_n_points(v, outliers, 2)
outliers_faces = np.concatenate((outliers[:, np.newaxis], outliers_n_neighbours), axis=-1)
faces = np.concatenate((faces, outliers_faces), axis=0)
verts = v
m = tm.Trimesh(verts, faces, process=False, validate=False)
export_to_ply(m, temp_file)
cloud = PyntCloud.from_file(temp_file)
curvatures = []
for neighbourhood, nr_labels in zip(neighbourhoods, nr_of_labels):
k_neighbors = np.argsort(dist[mask, :][:, mask], axis=-1)[:, :neighbourhood] #cloud.get_neighbors(k=neighbourhood)
#k_neighbors = k_neighbors_cache[id] # np.argsort(dist[mask, :][:, mask], axis=-1)[:, :neighbourhood] #cloud.get_neighbors(k=neighbourhood)
ev = cloud.add_scalar_field("eigen_values", k_neighbors=k_neighbors)
cloud.add_scalar_field("curvature", ev=ev)
curvature = np.array(cloud.points["curvature(" + str(neighbourhood+1) + ")"])
bins_local = bins[neighbourhood] if bins is not None else get_bins(curvature, nr_labels)
labels = np.linspace(0, bins_local.shape[0] - 2, bins_local.shape[0] - 1)
frame_labels = np.zeros((curvature.shape[0]), dtype=np.float32)
for j in range(bins_local.shape[0] - 2):
frame_labels[(curvature >= bins_local[j]) * (curvature < bins_local[j+1])] = labels[j]
frame_labels[curvature >= bins_local[-2]] = labels[-1]
curvatures.append(frame_labels)
return curvatures
def visualize_curvature_labels(folder, frame, bins, neighbourhoods, nr_of_labels):
id = frame.split('_')[0]
frame_nr = frame.split('_')[1].split('.')[0]
mask = np.load(os.path.join(folder, 'mesh_mask', f'{id}.npy')).astype(bool)
_, faces = _maskFaces(np.zeros((14475,3)), F, mask)
verts = np.load(os.path.join(folder, 'mesh_posed', f'{id}_{frame_nr}.npz'))['mesh_posed'][mask,:]
curvature_labels_all = generate_curvatures(folder, frame, bins, neighbourhoods, nr_of_labels)
colors_binned_all = []
for curvature_labels in curvature_labels_all:
colors = np.array([cm.color('jet', 1 - i) for i in np.linspace(0, 1, int(curvature_labels.max()+1))])
colors_binned = np.zeros((curvature_labels.shape[0], 3))
for i in range(int(curvature_labels.max())+1):
# print(np.count_nonzero(curvature_labels == i))
colors_binned[curvature_labels == i, :] = colors[i]
colors_binned_all.append(colors_binned)
fig = make_subplots(rows=1, cols=len(colors_binned_all)+1, start_cell="top-left", specs = [ [{ 'type': 'scene' } for _ in range(len(colors_binned_all)+1)] ])
colors = np.ones((verts.shape[0],3))*np.array([255,200,200])[None,:]
fig.add_trace(go.Mesh3d(
# 8 vertices of a cube
x=verts[:,0],
y=verts[:,1],
z=verts[:,2],
# i, j and k give the vertices of triangles
i = faces[:,0],
j = faces[:,1],
k = faces[:,2],
vertexcolor=colors,
lighting={ 'ambient':0.9, 'diffuse':0.5, 'roughness':0.5 }
),
row=1, col=1)
for i, colors_binned in enumerate(colors_binned_all):
fig.add_trace(go.Mesh3d(
# 8 vertices of a cube
x=verts[:,0],
y=verts[:,1],
z=verts[:,2],
# i, j and k give the vertices of triangles
i = faces[:,0],
j = faces[:,1],
k = faces[:,2],
vertexcolor=colors_binned,
# lighting={ 'ambient':0.8, 'diffuse':0.5, 'roughness':0.5 }
),
row=1, col=i+2)
fig.update_layout(scene_aspectmode='manual', scene_aspectratio=dict(x=1, y=1, z=1),
scene2_aspectmode='manual', scene2_aspectratio=dict(x=1, y=1, z=1),
scene3_aspectmode='manual', scene3_aspectratio=dict(x=1, y=1, z=1),
scene4_aspectmode='manual', scene4_aspectratio=dict(x=1, y=1, z=1),
# scene5_aspectmode='manual', scene5_aspectratio=dict(x=1, y=1, z=1),
)
helper = dict(xaxis = dict(range=[-1,1], showbackground=False, showticklabels=False, showaxeslabels=False, showspikes=False, visible=False),
yaxis = dict(range=[-1,1], showbackground=False, showticklabels=False, showaxeslabels=False, showspikes=False, visible=False),
zaxis = dict(range=[-1,1], showbackground=False, showticklabels=False, showaxeslabels=False, showspikes=False, visible=False),)
fig.update_layout(scene = helper,
scene2 = helper,
scene3 = helper,
scene4 = helper,
# scene5 = helper,
)
# meshes = [go.Mesh3d(
# x=x[:,0],
# y=x[:,1],
# z=x[:,2],
# i = faces[:,0],
# j = faces[:,1],
# k = faces[:,2],
# vertexcolor=colors_binned
# )]
# fig = go.Figure(data=meshes)
# fig.update_layout(scene_aspectmode='manual', scene_aspectratio=dict(x=1, y=1, z=1))
# fig.update_layout(
# scene = dict(
# xaxis = dict(nticks=4, range=[-1,1],),
# yaxis = dict(nticks=4, range=[-1,1],),
# zaxis = dict(nticks=4, range=[-1,1],),)
# )
fig.show()
print()
if __name__ == '__main__':
is_skirt = True
skirt_modifier = '_skirt' if is_skirt else ''
F = np.load("custom_utils/smpl_faces" + skirt_modifier + ".npy").astype(np.int32)
# k_neighbours(k=25)
folder = '/home/workspace/local-data/valid_skirt'
bins = dict()
bins[10] = np.load(f'custom_data/train_bins_skirt_10.npy')
bins[25] = np.load(f'custom_data/train_bins_skirt.npy')
bins[100] = np.load(f'custom_data/train_bins_skirt_100.npy')
bins = None
nr_of_labels = 6
neighbourhood = 50
temp_file = '/home/workspace/local-data/temp/' + ''.join(random.choice(string.ascii_lowercase) for i in range(10)) + '.ply'
if not is_skirt:
dist = np.load('custom_data/dijkstra.npy')
else:
dist = np.load('custom_data/dijkstra_skirt.npy')
visualize_curvature_labels(folder, '02572_1', bins, neighbourhoods=[25, 25, 25], nr_of_labels=[3,6,12])
+8 -6
View File
@@ -4,15 +4,17 @@ import os
if __name__ == '__main__': if __name__ == '__main__':
folder = '/home/workspace/local-data/cape/train/male' # folder = '/home/workspace/data/dataset/test_skirt_ready_2'
out_folder = '/home/workspace/local-data/cape_processed/train/male' # folder = '/home/workspace/data/dataset/local-cache/train_skirt'
ids = os.listdir(folder) folder = '/home/workspace/local-data/valid_skirt'
ids = os.listdir(folder + '/mesh_posed')
count = 0 count = 0
step = 1 step = 10000
while count < len(ids): while count < 20*step:
# while count < 10000:
# os.system('nohup python MeshUtils/curvature_labels.py -f ' + folder + ' -s ' + str(count) + ' -e ' + str(count + step) + ' -n ' + 'curv_train_' + str(count) + '_' + str(count+step) + ' > curv_train_' + str(count) + '_' + str(count+step) + '.out' + ' 2>&1 &') # os.system('nohup python MeshUtils/curvature_labels.py -f ' + folder + ' -s ' + str(count) + ' -e ' + str(count + step) + ' -n ' + 'curv_train_' + str(count) + '_' + str(count+step) + ' > curv_train_' + str(count) + '_' + str(count+step) + '.out' + ' 2>&1 &')
os.system('nohup python curvature_labels_cape.py -if ' + folder + ' -of ' + out_folder + ' -s ' + str(count) + ' -e ' + str(count + step) + ' -n ' + 'curv_gen_2_cape_train_male_' + str(count) + '_' + str(count+step) + ' > nohup/curv_gen_2_cape_train_male_' + str(count) + '_' + str(count+step) + '.out' + ' 2>&1 &') os.system('nohup python curvature_labels.py -f ' + folder + ' -s ' + str(0) + ' -e ' + str(0 + step) + ' -n ' + 'speed_test_' + str(count) + '_' + str(count+step) + ' > nohup/speed/speed_test_' + str(count) + '_' + str(count+step) + '.out' + ' 2>&1 &')
# os.system('python Data/convert_to_uv.py -f ' + folder + ' -s ' + str(count) + ' -e ' + str(count + step) + '') # os.system('python Data/convert_to_uv.py -f ' + folder + ' -s ' + str(count) + ' -e ' + str(count + step) + '')
count += step count += step
+94 -107
View File
@@ -4,6 +4,7 @@ import tqdm
import argparse import argparse
import random import random
import string import string
import time
import numpy as np import numpy as np
import trimesh as tm import trimesh as tm
import cmapy as cm import cmapy as cm
@@ -40,6 +41,8 @@ def export_to_ply(mesh, file):
output_file.close() output_file.close()
def get_closest_n_points(verts, idx, n): def get_closest_n_points(verts, idx, n):
dist = sp.spatial.distance.cdist(verts[idx, :], verts) dist = sp.spatial.distance.cdist(verts[idx, :], verts)
dist[dist == 0] = 1e9 dist[dist == 0] = 1e9
@@ -80,67 +83,65 @@ def k_neighbours(k):
pass pass
def generate_curvatures(folder, neighbourhood): def calculate_dist(folder, neighbourhood, frames):
out = dict()
# frames = frames[int(args.start):int(args.end)]
ids = os.listdir(folder)[int(args.start):int(args.end)] for frame in tqdm.tqdm(frames):
id = frame.split('_')[0]
curvatures_all = [] if id in out.keys():
for id in tqdm.tqdm(ids):
garment_dir = os.path.join(folder, id)
if not os.path.isdir(garment_dir):
continue continue
# if os.path.exists(garment_dir + '/curvature_25_raw.npy'): mask = np.load(os.path.join(folder, 'mesh_mask', f'{id}.npy')).astype(bool)
# continue k_neighbors = np.argsort(dist[mask, :][:, mask], axis=-1)[:, :neighbourhood] #cloud.get_neighbors(k=neighbourhood)
out[id] = k_neighbors
curvatures_garment = [] return out
garments = [f.replace('.pc16','') for f in os.listdir(garment_dir) if f.find('_') == -1 and f != 'info.mat' and not f.endswith('.obj')] def generate_curvatures(folder, neighbourhood, frames):
# assert len (garments) == 1
if len (garments) != 1: # ids = os.listdir(folder)[int(args.start):int(args.end)]
continue # frames = frames[int(args.start):int(args.end)]
garment = garments[0] os.makedirs(os.path.join(folder, f'mesh_curvature_raw_{neighbourhood}'), exist_ok=True)
k_neighbors_cache = calculate_dist(folder, neighbourhood, frames)
# for frame in tqdm.tqdm(frames):
# id = frame.split('_')[0]
# frame_nr = frame.split('_')[1].split('.')[0]
bodies = readPC2(os.path.join(folder, id, 'Body_posed.pc16'), True)['V'] # # bodies = readPC2(os.path.join(folder, id, 'Body_posed.pc16'), True)['V']
offsetss = readPC2(os.path.join(folder, id, garment + '_registered.pc16'), True)['V'] # # offsetss = readPC2(os.path.join(folder, id, garment + '_registered.pc16'), True)['V']
mask = np.squeeze(sio.loadmat(os.path.join(garment_dir, garment + '_mask.mat'))['mask'].astype(bool)) # mask = np.load(os.path.join(folder, 'mesh_mask', f'{id}.npy')).astype(bool)
# _, faces = _maskFaces(np.zeros((14475,3)), F, mask) #np.load(os.path.join(folder, 'faces', f'{id}.npy'))
# v = np.load(os.path.join(folder, 'mesh_posed', f'{id}_{frame_nr}.npz'))['mesh_posed'][mask,:]
_, faces = _maskFaces(bodies[0, :, :], F, mask) # m = tm.Trimesh(v, faces, process=False, validate=False)
v = bodies[0, mask, :] + offsetss[0, mask, :]
m = tm.Trimesh(v, faces, process=False, validate=False)
outliers = np.array([len(v) for v in m.vertex_neighbors]) == 0 # outliers = np.array([len(v) for v in m.vertex_neighbors]) == 0
outliers = np.nonzero(outliers)[0] # outliers = np.nonzero(outliers)[0]
outliers_n_neighbours = get_closest_n_points(v, outliers, 2) # outliers_n_neighbours = get_closest_n_points(v, outliers, 2)
outliers_faces = np.concatenate((outliers[:, np.newaxis], outliers_n_neighbours), axis=-1) # outliers_faces = np.concatenate((outliers[:, np.newaxis], outliers_n_neighbours), axis=-1)
faces = np.concatenate((faces, outliers_faces), axis=0) # faces = np.concatenate((faces, outliers_faces), axis=0)
step = 0 # verts = v
for body, offsets in zip(bodies, offsetss):
verts = body + offsets
verts = verts[mask, :]
m = tm.Trimesh(verts, faces, process=False, validate=False) # m = tm.Trimesh(verts, faces, process=False, validate=False)
export_to_ply(m, temp_file) # export_to_ply(m, temp_file)
cloud = PyntCloud.from_file(temp_file) # cloud = PyntCloud.from_file(temp_file)
# cloud.plot(mesh=True)
k_neighbors = np.argsort(dist[mask, :][:, mask], axis=-1)[:, :neighbourhood] #cloud.get_neighbors(k=neighbourhood) # k_neighbors = k_neighbors_cache[id] # np.argsort(dist[mask, :][:, mask], axis=-1)[:, :neighbourhood] #cloud.get_neighbors(k=neighbourhood)
ev = cloud.add_scalar_field("eigen_values", k_neighbors=k_neighbors) # ev = cloud.add_scalar_field("eigen_values", k_neighbors=k_neighbors)
cloud.add_scalar_field("curvature", ev=ev) # cloud.add_scalar_field("curvature", ev=ev)
curvature = np.array(cloud.points["curvature(" + str(neighbourhood+1) + ")"]) # curvature = np.array(cloud.points["curvature(" + str(neighbourhood+1) + ")"])
curvatures_garment.append(curvature) # out = np.zeros((14475), dtype=np.float32)
# out[mask] = curvature
# np.savez_compressed(os.path.join(folder, f'mesh_curvature_raw_{neighbourhood}', f'{id}_{frame_nr}.npz'), mesh_curvature_raw=out)
print(step) return None
step += 1
# curvatures_all.append(np.array(curvatures_garment))
np.save(garment_dir + '/curvature_25_raw.npy', np.array(curvatures_garment))
return curvatures_all
def get_bins(values, nr_of_bins): def get_bins(values, nr_of_bins):
@@ -152,41 +153,23 @@ def get_bins(values, nr_of_bins):
return bins return bins
def generate_curvature_labels(folder, bins, curvatures): def generate_curvature_labels(folder, bins, curvatures, frames, neighbourhood):
ids = os.listdir(folder)#[:10] os.makedirs(os.path.join(folder, f'mesh_curvature_{neighbourhood}_2'), exist_ok=True)
labels = np.linspace(0, bins.shape[0] - 2, bins.shape[0] - 1) labels = np.linspace(0, bins.shape[0] - 2, bins.shape[0] - 1)
i = 0 for i, frame in enumerate(tqdm.tqdm(frames)):
for id in tqdm.tqdm(ids): # id = frame.split('_')[0]
garment_dir = os.path.join(folder, id) # mask = np.load(os.path.join(folder, 'mesh_mask', f'{id}.npy'))
# print(i)
if not os.path.isdir(garment_dir):
continue
garments = [f.replace('.pc16','') for f in os.listdir(garment_dir) if f.find('_') == -1 and f != 'info.mat' and not f.endswith('.obj')]
# assert len (garments) == 1
if len (garments) != 1:
continue
garment = garments[0]
mask = np.squeeze(sio.loadmat(os.path.join(garment_dir, garment + '_mask.mat'))['mask'].astype(bool))
curvature = curvatures[i] curvature = curvatures[i]
i += 1
curvature_label = np.zeros((curvature.shape[0], curvature.shape[1])) frame_labels = np.zeros((curvature.shape[0]), dtype=np.float32)
frame = 0 for j in range(bins.shape[0] - 2):
for frame in range(curvature.shape[0]): frame_labels[(curvature >= bins[j]) * (curvature < bins[j+1])] = labels[j]
frame_labels = np.zeros((curvature.shape[1]), dtype=np.float32) frame_labels[curvature >= bins[-2]] = labels[-1]
for j in range(bins.shape[0] - 2):
frame_labels[(curvature[frame, :] >= bins[j]) * (curvature[frame, :] < bins[j+1])] = labels[j]
frame_labels[curvature[frame, :] >= bins[-2]] = labels[-1]
curvature_label[frame, :] = frame_labels
frame += 1
unmasked_label = np.zeros((curvature.shape[0], 14475), dtype=np.float32) np.savez_compressed(os.path.join(folder, f'mesh_curvature_{neighbourhood}_2', f'{frame}.npz'), mesh_curvature=frame_labels)
unmasked_label[:, mask] = curvature_label
np.save(os.path.join(garment_dir, "curvature_label_" + str(nr_of_labels) + "_" + str(neighbourhood) + ".npy"), unmasked_label)
# writePC2(os.path.join(garment_dir, "curvature_label_" + str(nr_of_labels) + "_" + str(neighbourhood) + ".pc16"), unmasked_label, True) # writePC2(os.path.join(garment_dir, "curvature_label_" + str(nr_of_labels) + "_" + str(neighbourhood) + ".pc16"), unmasked_label, True)
@@ -257,24 +240,10 @@ def visualize_curvature_labels(folder):
print() print()
def read_raw_curvatures(folder): def read_raw_curvatures(folder, frames, neighbourhood):
ids = os.listdir(folder)[int(args.start):int(args.end)]
curvatures_all = [] curvatures_all = []
for frame in tqdm.tqdm(frames):
for id in tqdm.tqdm(ids): curv = np.load(os.path.join(folder, f'mesh_curvature_raw_{neighbourhood}', f'{frame}.npz'))['mesh_curvature_raw']
garment_dir = os.path.join(folder, id)
if not os.path.isdir(garment_dir):
continue
garments = [f.replace('.pc16','') for f in os.listdir(garment_dir) if f.find('_') == -1 and f != 'info.mat' and not f.endswith('.obj')]
# assert len (garments) == 1
if len (garments) != 1:
continue
curv = np.load(garment_dir + '/curvature_25_raw.npy')
curvatures_all.append(curv) curvatures_all.append(curv)
return curvatures_all return curvatures_all
@@ -282,28 +251,46 @@ def read_raw_curvatures(folder):
if __name__ == '__main__': if __name__ == '__main__':
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
parser.add_argument("-f", "--folder", help = "process the given folder", default=r'/home/workspace/data/dataset/test') parser.add_argument("-f", "--folder", help = "process the given folder", default=r'/home/workspace/data/dataset/local-cache/train_skirt')
parser.add_argument("-s", "--start", help = "start of range", default=0) parser.add_argument("-s", "--start", help = "start of range", default=0)
parser.add_argument("-e", "--end", help = "end of range", default=1500) parser.add_argument("-e", "--end", help = "end of range", default=30000)
parser.add_argument("-n", "--name", help = "end of range", default="lhunor") parser.add_argument("-n", "--name", help = "end of range", default="lhunor")
args = parser.parse_args() args = parser.parse_args()
F = np.load("FeatureLines/superSMPL/smpl_faces.npy") is_skirt = True
skirt_modifier = '_skirt' if is_skirt else ''
F = np.load("custom_utils/smpl_faces" + skirt_modifier + ".npy").astype(np.int32)
# k_neighbours(k=25) # k_neighbours(k=25)
folder = args.folder folder = args.folder
nr_of_labels = 6 frames_file = 'frames' + skirt_modifier + '_10p.txt'
neighbourhood = 25
temp_file = 'temp/' + ''.join(random.choice(string.ascii_lowercase) for i in range(10)) + '.ply'
dist = np.load('MeshUtils/dijsktra.npy')
# dist = np.load('MeshUtils/dijkstra_skirt.npy')
generate_curvatures(folder, neighbourhood) nr_of_labels = 6
# curvatures = read_raw_curvatures(folder) neighbourhood = 100
temp_file = '/home/workspace/local-data/temp/' + ''.join(random.choice(string.ascii_lowercase) for i in range(10)) + '.ply'
if not is_skirt:
dist = np.load('custom_data/dijkstra.npy')
else:
dist = np.load('custom_data/dijkstra_skirt.npy')
print('SKIRT' if is_skirt else 'NOT SKIRT')
print(f'params: -f {args.folder} -s {args.start} -e {args.end} -n {args.name} -skirt {is_skirt} -neigh {neighbourhood}')
frames = sorted(os.listdir(os.path.join(folder, 'mesh_posed')))[int(args.start):int(args.end)]
frames = [frame.split('.')[0] for frame in frames]
# frames = []
# with open(os.path.join(folder, frames_file), 'r') as f:
# lines = f.readlines()
# lines = [line.strip() for line in lines]
# frames = lines[int(args.start):int(args.end)]
generate_curvatures(folder, neighbourhood, frames)
# curvatures = read_raw_curvatures(folder, frames, neighbourhood)
# bins = get_bins(curvatures, nr_of_labels) # bins = get_bins(curvatures, nr_of_labels)
# np.save('train_bins_skirt.npy', bins) # np.save(f'custom_data/train_bins_skirt_{neighbourhood}.npy', bins)
# bins = np.load('train_bins.npy') # bins = np.load(f'custom_data/train_bins_skirt_{neighbourhood}.npy')
# generate_curvature_labels(folder, bins, curvatures) # generate_curvature_labels(folder, bins, curvatures, frames, neighbourhood)
# visualize_curvature_labels(folder) # visualize_curvature_labels(folder)
pass pass
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+4 -2
View File
@@ -45,7 +45,7 @@ from models.cvae_model import CVAENew as CVAE
def init_wandb(): def init_wandb():
run = wandb.init(project='ablation', name=config['name'], notes=config['notes'], dir='/wandb') run = wandb.init(project='ablation', name=config['name'], notes=config['notes'], dir='/wandb', tags=config['tags'])
artifact = wandb.Artifact('code', type='code') artifact = wandb.Artifact('code', type='code')
artifact.add_file('cvae.py') artifact.add_file('cvae.py')
artifact.add_file('models/cvae_model.py') artifact.add_file('models/cvae_model.py')
@@ -58,7 +58,9 @@ def init_wandb():
artifact.add_file('convnext/models/convnext_tf.py') artifact.add_file('convnext/models/convnext_tf.py')
config_file_names = [key for key in sys.modules.keys() if key.startswith('configs.')] config_file_names = [key for key in sys.modules.keys() if key.startswith('configs.')]
for config_file_name in config_file_names: for config_file_name in config_file_names:
artifact.add_file('/'.join(config_file_name.split('.')) + '.py') file_name = '/'.join(config_file_name.split('.')) + '.py'
if os.path.exists(file_name):
artifact.add_file(file_name)
run.log_artifact(artifact) run.log_artifact(artifact)
uv2mesh = UV2Mesh(res=256, is_skirt=config['is_skirt'], is_adaptive=False, is_smpl_orig=config['is_cape']) uv2mesh = UV2Mesh(res=256, is_skirt=config['is_skirt'], is_adaptive=False, is_smpl_orig=config['is_cape'])
+18 -16
View File
@@ -1,6 +1,6 @@
import os import os
import sys import sys
from configs.post.config_abl_pyr_64_128_5 import config from configs.config_abl_pyr_32_skirt import config
os.environ["CUDA_VISIBLE_DEVICES"] = config['gpu'] os.environ["CUDA_VISIBLE_DEVICES"] = config['gpu']
import tensorflow as tf import tensorflow as tf
@@ -41,7 +41,7 @@ from losses import collision_loss as collision_penalty
from custom_utils.custom_utils import batch_to_dict, load_model from custom_utils.custom_utils import batch_to_dict, load_model
from dataset import DatasetFactory, StaticDataset from dataset import DatasetFactory, StaticDataset
from custom_utils.smpl import SMPL from custom_utils.smpl import SMPL
from models.pyramid_model_optimized import PyramidNew as Pyramid from models.pyramid_model_optimized import Pyramid
from postprocessing import fix_collision from postprocessing import fix_collision
@@ -59,9 +59,11 @@ def init_wandb():
artifact.add_file('models/cond_encoder.py') artifact.add_file('models/cond_encoder.py')
artifact.add_file('dataset.py') artifact.add_file('dataset.py')
artifact.add_file('convnext/models/convnext_tf.py') artifact.add_file('convnext/models/convnext_tf.py')
config_file_names = [key for key in sys.modules.keys() if key.startswith('configs.post.')] config_file_names = [key for key in sys.modules.keys() if key.startswith('configs')]
for config_file_name in config_file_names: for config_file_name in config_file_names:
artifact.add_file('/'.join(config_file_name.split('.')) + '.py') file_name = '/'.join(config_file_name.split('.')) + '.py'
if os.path.exists(file_name):
artifact.add_file(file_name)
run.log_artifact(artifact) run.log_artifact(artifact)
uv2mesh = UV2Mesh(res=256, is_skirt=config['is_skirt'], is_smpl_orig=config['is_cape']) uv2mesh = UV2Mesh(res=256, is_skirt=config['is_skirt'], is_smpl_orig=config['is_cape'])
@@ -208,7 +210,7 @@ def plot_3d(mesh_gt, mesh_pred_unposed_levels, faces, mesh_posed, collision, col
return fig return fig
@tf.function # @tf.function
def train_step(batch): def train_step(batch):
levels_input, conds = group_inputs_for_levels(batch, config) levels_input, conds = group_inputs_for_levels(batch, config)
@@ -261,8 +263,8 @@ def train_step(batch):
else: else:
reconstr_loss_total = reconstr_loss_total + config['pyramid']['loss_weights'][i] * (l2_loss) reconstr_loss_total = reconstr_loss_total + config['pyramid']['loss_weights'][i] * (l2_loss)
if config['use_norm_loss'] and step > 2000: # if config['use_norm_loss'] and step > 2000:
reconstr_loss_total = reconstr_loss_total + n_loss * config['reg_loss_coeff'] # reconstr_loss_total = reconstr_loss_total + n_loss * config['reg_loss_coeff']
kl_total += kl kl_total += kl
@@ -334,8 +336,8 @@ def valid_step(batch):
else: else:
reconstr_loss_total = reconstr_loss_total + config['pyramid']['loss_weights'][i] * (l2_loss) reconstr_loss_total = reconstr_loss_total + config['pyramid']['loss_weights'][i] * (l2_loss)
if config['use_norm_loss'] and step > 2000: # if config['use_norm_loss'] and step > 2000:
reconstr_loss_total = reconstr_loss_total + n_loss * config['reg_loss_coeff'] # reconstr_loss_total = reconstr_loss_total + n_loss * config['reg_loss_coeff']
kl_total += kl kl_total += kl
@@ -731,7 +733,7 @@ def speed_step(levels_input, conds):
if __name__ == '__main__': if __name__ == '__main__':
init_wandb() # init_wandb()
parser = argparse.ArgumentParser(description='') parser = argparse.ArgumentParser(description='')
parser.add_argument('--name', type=str, default='lhunor') parser.add_argument('--name', type=str, default='lhunor')
args = vars(parser.parse_args()) args = vars(parser.parse_args())
@@ -790,7 +792,7 @@ if __name__ == '__main__':
# generate_results() # generate_results()
ckpt = tf.train.Checkpoint(model=model) ckpt = tf.train.Checkpoint(model=model)
manager = tf.train.CheckpointManager(ckpt, 'checkpoints/post/' + config['name'], max_to_keep=20) manager = tf.train.CheckpointManager(ckpt, 'checkpoints/' + config['name'], max_to_keep=20)
# load_model(model, 'checkpoints/pyr_abl_32_skirt', iteration='180000') # load_model(model, 'checkpoints/pyr_abl_32_skirt', iteration='180000')
@@ -807,18 +809,18 @@ if __name__ == '__main__':
model.static_enc.trainable = False model.static_enc.trainable = False
model.body_enc.trainable = False model.body_enc.trainable = False
model.curv_enc.trainable = False model.curv_enc.trainable = False
model.cond_encoder.trainable = False
# load_model(model.levels[0].upscale_enhancer, config['pyramid']['levels'][0]['upscale_enhancer']) # load_model(model.levels[0].upscale_enhancer, config['pyramid']['levels'][0]['upscale_enhancer'])
# model.levels[0].upscale_enhancer.trainable = False # model.levels[0].upscale_enhancer.trainable = False
for i in range(len(model.levels)): for i in range(len(model.levels)-1):
load_model(model.levels[i].upscale_enhancer, config['pyramid']['levels'][i]['upscale_enhancer']) load_model(model.levels[i].upscale_enhancer, config['pyramid']['levels'][i]['upscale_enhancer'])
model.levels[i].upscale_enhancer.trainable = False model.levels[i].upscale_enhancer.trainable = False
# if config['pyramid']['resolutions'][-1] != 512: if config['pyramid']['resolutions'][-1] != 512:
# load_model(model.upscale_enhancer, config['pyramid']['final_upscale_enhancer']) load_model(model.upscale_enhancer, config['pyramid']['final_upscale_enhancer'])
# model.upscale_enhancer.trainable = False model.upscale_enhancer.trainable = False
for i in range(len(model.levels)-1): for i in range(len(model.levels)-1):
model.levels[i].trainable = False model.levels[i].trainable = False
+23
View File
@@ -0,0 +1,23 @@
import os
import shutil
import tqdm
if __name__ == '__main__':
folder = '/home/workspace/data/dataset/local-cache/train_skirt'
is_skirt = True
skirt_modifier = '_skirt' if is_skirt else ''
frames_file = 'frames' + skirt_modifier + '_10p.txt'
neighbourhood = 10
frames = []
with open(os.path.join(folder, frames_file), 'r') as f:
lines = f.readlines()
lines = [line.strip() for line in lines]
frames = lines
os.makedirs(os.path.join(folder, f'uv_curvature_{neighbourhood}'), exist_ok=True)
for frame in tqdm.tqdm(frames):
id = frame.split('_')[0]
src = os.path.join(folder, f'{id}', 'curvature_uv_10', f'{frame}.npz')
dst = os.path.join(folder, f'uv_curvature_{neighbourhood}', f'{frame}.npz')
shutil.move(src, dst)
+1 -1
View File
@@ -43,7 +43,7 @@ class CVAE(tf.keras.Model):
self.cond_encoder = tf.keras.Sequential([tf.keras.layers.Dense(512, activation='relu'), self.cond_encoder = tf.keras.Sequential([tf.keras.layers.Dense(512, activation='relu'),
tf.keras.layers.Dense(256, activation='relu'), tf.keras.layers.Dense(256, activation='relu'),
tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Lambda(lambda x: x / 1000), # tf.keras.layers.Lambda(lambda x: x / 1000),
tf.keras.layers.Dense(config['latent_dim'], activation='tanh')]) tf.keras.layers.Dense(config['latent_dim'], activation='tanh')])
self.encoder = VariationalEncoder(config['cvae']['latent_dim'], config['cvae']['encoder_depths'], config['cvae']['encoder_dims'], kernel_size=config['cvae']['kernel_size']) self.encoder = VariationalEncoder(config['cvae']['latent_dim'], config['cvae']['encoder_depths'], config['cvae']['encoder_dims'], kernel_size=config['cvae']['kernel_size'])
+6 -4
View File
@@ -4,24 +4,26 @@ import os
if __name__ == '__main__': if __name__ == '__main__':
# folder = '/home/workspace/data/dataset/local-cache/train_skirt'
folder = '/home/workspace/data/dataset/test_skirt_ready_2' folder = '/home/workspace/data/dataset/test_skirt_ready_2'
# folder = '/home/workspace/local-data/valid_skirt'
# folder = '/home/workspace/local-data/cape_processed/train/male' # folder = '/home/workspace/local-data/cape_processed/train/male'
# folder = '/home/workspace/local-data/valid_skirt' # folder = '/home/workspace/local-data/valid_skirt'
# folder = '/home/workspace/local-data/valid' # folder = '/home/workspace/local-data/valid'
# ids = os.listdir(folder) # ids = os.listdir(folder)
ids = os.listdir(folder + '/mesh_posed_no_orient')#[280000:] # ids = os.listdir(folder + '/mesh_posed_no_orient')#[280000:]
skirt = 0 skirt = 0
count = 0 count = 0
step = 2000 step = 20
# !!!!!!! change skirt parameter in script # !!!!!!! change skirt parameter in script
while count < len(ids): while count < 150:
# os.system('nohup python convert_to_uv_cape.py -f ' + folder + ' -s ' + str(count) + ' -e ' + str(count + step) + ' -n ' + 'to_uv_2_cape_train_male_' + str(count) + '_' + str(count+step) + ' > nohup/to_uv_2_cape_train_male_' + str(count) + '_' + str(count+step) + '.out' + ' 2>&1 &') # os.system('nohup python convert_to_uv_cape.py -f ' + folder + ' -s ' + str(count) + ' -e ' + str(count + step) + ' -n ' + 'to_uv_2_cape_train_male_' + str(count) + '_' + str(count+step) + ' > nohup/to_uv_2_cape_train_male_' + str(count) + '_' + str(count+step) + '.out' + ' 2>&1 &')
# os.system('nohup python convert_to_uv.py -f ' + folder + ' -s ' + str(count) + ' -e ' + str(count + step) + ' -n ' + 'to_uv_train_unposed_onehot_' + str(count) + '_' + str(count+step) + ' > nohup/to_uv_train_unposed_onehot_' + str(count) + '_' + str(count+step) + '.out' + ' 2>&1 &') # os.system('nohup python convert_to_uv.py -f ' + folder + ' -s ' + str(count) + ' -e ' + str(count + step) + ' -n ' + 'to_uv_train_unposed_onehot_' + str(count) + '_' + str(count+step) + ' > nohup/to_uv_train_unposed_onehot_' + str(count) + '_' + str(count+step) + '.out' + ' 2>&1 &')
# os.system('nohup python convert_to_uv_local.py -f ' + folder + ' -s ' + str(count) + ' -e ' + str(count + step) + ' -n ' + 'to_uv_train_local_unposed_onehot_' + str(count) + '_' + str(count+step) + ' > nohup/to_uv_train_local_unposed_onehot_' + str(count) + '_' + str(count+step) + '.out' + ' 2>&1 &') # os.system('nohup python convert_to_uv_local.py -f ' + folder + ' -s ' + str(count) + ' -e ' + str(count + step) + ' -n ' + 'to_uv_train_local_unposed_onehot_' + str(count) + '_' + str(count+step) + ' > nohup/to_uv_train_local_unposed_onehot_' + str(count) + '_' + str(count+step) + '.out' + ' 2>&1 &')
os.system('nohup python convert_to_uv_local_single.py -f ' + folder + ' -s ' + str(count) + ' -e ' + str(count + step) + ' -n ' + 'to_uv_posed_no_orient_test_skirt_ready_' + str(count) + '_' + str(count+step) + ' > nohup/to_uv_posed_no_orient_test_skirt_ready_' + str(count) + '_' + str(count+step) + '.out' + ' 2>&1 &') os.system('nohup python convert_to_uv_local_single.py -f ' + folder + ' -s ' + str(count) + ' -e ' + str(count + step) + ' -n ' + 'to_uv_curv_2_10_test_skirt_' + str(count) + '_' + str(count+step) + ' > nohup/to_uv_curv_2_10_test_skirt_' + str(count) + '_' + str(count+step) + '.out' + ' 2>&1 &')
# os.system('nohup python convert_to_uv_local_single.py -f ' + folder + ' -s ' + str(count) + ' -e ' + str(count + step) + ' -n ' + 'to_uv_train_skirt_local_unposed_onehot_3_' + str(count) + '_' + str(count+step) + ' > nohup/to_uv_train_skirt_local_unposed_onehot_3_' + str(count) + '_' + str(count+step) + '.out' + ' 2>&1 &') # os.system('nohup python convert_to_uv_local_single.py -f ' + folder + ' -s ' + str(count) + ' -e ' + str(count + step) + ' -n ' + 'to_uv_train_skirt_local_unposed_onehot_3_' + str(count) + '_' + str(count+step) + ' > nohup/to_uv_train_skirt_local_unposed_onehot_3_' + str(count) + '_' + str(count+step) + '.out' + ' 2>&1 &')
# os.system('nohup python convert_to_uv_local_single.py -f ' + folder + ' -s ' + str(count) + ' -e ' + str(count + step) + ' -n ' + 'to_uv_valid_skirt_local_unposed_onehot_3_' + str(count) + '_' + str(count+step) + ' > nohup/to_uv_valid_skirt_local_unposed_onehot_' + str(count) + '_' + str(count+step) + '.out' + ' 2>&1 &') # os.system('nohup python convert_to_uv_local_single.py -f ' + folder + ' -s ' + str(count) + ' -e ' + str(count + step) + ' -n ' + 'to_uv_valid_skirt_local_unposed_onehot_3_' + str(count) + '_' + str(count+step) + ' > nohup/to_uv_valid_skirt_local_unposed_onehot_' + str(count) + '_' + str(count+step) + '.out' + ' 2>&1 &')
# os.system('nohup python downscale.py -f ' + folder + ' -s ' + str(count) + ' -e ' + str(count + step) + ' -n ' + 'downscale_valid_posed_no_orient_' + str(count) + '_' + str(count+step) + ' > nohup/downscale_valid_posed_no_orient_' + str(count) + '_' + str(count+step) + '.out' + ' 2>&1 &') # os.system('nohup python downscale.py -f ' + folder + ' -s ' + str(count) + ' -e ' + str(count + step) + ' -n ' + 'downscale_valid_posed_no_orient_' + str(count) + '_' + str(count+step) + ' > nohup/downscale_valid_posed_no_orient_' + str(count) + '_' + str(count+step) + '.out' + ' 2>&1 &')