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
13 changed files with 241 additions and 251 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
@@ -19,7 +19,7 @@ config['only_curvatures'] = True
ablation_count = [config['use_skinning'], config['remove_global_orientation'], config['use_curvature'], config['use_extra_losses'], config['use_offsets']].count(False) ablation_count = [config['use_skinning'], config['remove_global_orientation'], config['use_curvature'], config['use_extra_losses'], config['use_offsets']].count(False)
assert ablation_count == 1 or ablation_count == 0 assert ablation_count == 1 or ablation_count == 0
config['gpu'] = '3' config['gpu'] = '5'
config['name'] = 'abl_overfit_jumpsuit_2' config['name'] = 'abl_overfit_jumpsuit_2'
config['notes'] = 'remove other conditions from input as well' config['notes'] = 'remove other conditions from input as well'
+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]):
+48 -96
View File
@@ -1,8 +1,5 @@
import os import os
import sys import sys
os.environ["CUDA_VISIBLE_DEVICES"] = '4'
import tqdm import tqdm
import argparse import argparse
import random import random
@@ -19,33 +16,9 @@ from scipy.sparse import csr_matrix, coo_matrix
from scipy.sparse.csgraph import floyd_warshall, dijkstra from scipy.sparse.csgraph import floyd_warshall, dijkstra
from plotly.subplots import make_subplots from plotly.subplots import make_subplots
from custom_utils.custom_utils import _maskFaces from custom_utils.custom_utils import _maskFaces
from postprocessing import fix_collision
from custom_utils.supersmpl_io import readPC2, readPC2Frame, writePC2, readOBJ from custom_utils.supersmpl_io import readPC2, readPC2Frame, writePC2, readOBJ
from custom_utils.custom_utils import _maskFaces from custom_utils.custom_utils import _maskFaces
from auto_encoder_curv import dice_dense
def postprocess(mesh, faces, mask=None, body=None, do_smoothing=True):
if body is not None:
mesh_fixed = fix_collision(mesh, body[np.newaxis,:,:], mask[np.newaxis,:])[0].numpy()[mask, :]
else:
mesh_fixed = mesh
if do_smoothing:
m = tm.Trimesh(mesh_fixed, 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(mesh_fixed, outliers, 2)
outliers_faces = np.concatenate((outliers[:, np.newaxis], outliers_n_neighbours), axis=-1)
faces_fixed = np.concatenate((faces, outliers_faces), axis=0)
m = tm.Trimesh(mesh_fixed, faces_fixed, process=False, validate=False)
tm.smoothing.filter_humphrey(m, iterations=1, alpha=0.6, beta=0.4)
mesh = m.vertices
else:
mesh = mesh_fixed
return mesh
def export_to_ply(mesh, file): def export_to_ply(mesh, file):
ply = tm.exchange.ply.export_ply(mesh, encoding='binary', vertex_normal=True, include_attributes=True) ply = tm.exchange.ply.export_ply(mesh, encoding='binary', vertex_normal=True, include_attributes=True)
@@ -94,13 +67,13 @@ def get_bins(values, nr_of_bins):
return bins return bins
def generate_curvatures(v, faces, mask, neighbourhood=25, nr_of_labels=6): def generate_curvatures(folder, frame, bins, neighbourhoods=[25], nr_of_labels=[6]):
# id = frame.split('_')[0] id = frame.split('_')[0]
# frame_nr = int(frame.split('_')[1].split('.')[0]) frame_nr = int(frame.split('_')[1].split('.')[0])
# mask = np.load(os.path.join(folder, 'mesh_mask', f'{id}.npy')).astype(bool) mask = np.load(os.path.join(folder, 'mesh_mask', f'{id}.npy')).astype(bool)
# _, faces = _maskFaces(np.zeros((14475,3)), F, mask) _, 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,:] 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) m = tm.Trimesh(v, faces, process=False, validate=False)
@@ -117,41 +90,39 @@ def generate_curvatures(v, faces, mask, neighbourhood=25, nr_of_labels=6):
cloud = PyntCloud.from_file(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 = 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) #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) + ")"])
bins = np.load(f'custom_data/train_bins.npy') # get_bins(curvature, nr_of_labels) bins_local = bins[neighbourhood] if bins is not None else get_bins(curvature, nr_labels)
labels = np.linspace(0, bins.shape[0] - 2, bins.shape[0] - 1) labels = np.linspace(0, bins_local.shape[0] - 2, bins_local.shape[0] - 1)
frame_labels = np.zeros((curvature.shape[0]), dtype=np.float32) frame_labels = np.zeros((curvature.shape[0]), dtype=np.float32)
for j in range(bins.shape[0] - 2): for j in range(bins_local.shape[0] - 2):
frame_labels[(curvature >= bins[j]) * (curvature < bins[j+1])] = labels[j] frame_labels[(curvature >= bins_local[j]) * (curvature < bins_local[j+1])] = labels[j]
frame_labels[curvature >= bins[-2]] = labels[-1] frame_labels[curvature >= bins_local[-2]] = labels[-1]
return frame_labels curvatures.append(frame_labels)
import tensorflow as tf return curvatures
def visualize_curvature_labels(folder, results_folder, frame):
def visualize_curvature_labels(folder, frame, bins, neighbourhoods, nr_of_labels):
id = frame.split('_')[0] id = frame.split('_')[0]
frame_nr = frame.split('_')[1].split('.')[0] frame_nr = frame.split('_')[1].split('.')[0]
mask = np.load(os.path.join(folder, 'mesh_mask', f'{id}.npy')).astype(bool) mask = np.load(os.path.join(folder, 'mesh_mask', f'{id}.npy')).astype(bool)
_, faces = _maskFaces(np.zeros((14475,3)), F, mask) _, 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,:] verts = np.load(os.path.join(folder, 'mesh_posed', f'{id}_{frame_nr}.npz'))['mesh_posed'][mask,:]
pred = np.load(os.path.join(results_folder, frame + '.npy'))
pred = postprocess(pred, faces)
curvature_labels_gt = generate_curvatures(verts, faces, mask, 25) curvature_labels_all = generate_curvatures(folder, frame, bins, neighbourhoods, nr_of_labels)
curvature_labels_pred = generate_curvatures(pred, faces, mask, 25)
# dice = dice_dense(curvature_labels_pred[None,:], curvature_labels_gt[None,:])
dice = dice_dense(tf.one_hot(curvature_labels_pred, 7)[None,:], tf.one_hot(curvature_labels_gt, 7)[None,:]).numpy()
colors_binned_all = [] colors_binned_all = []
for curvature_labels in [curvature_labels_gt, curvature_labels_pred]: 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 = 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)) colors_binned = np.zeros((curvature_labels.shape[0], 3))
for i in range(int(curvature_labels.max())+1): for i in range(int(curvature_labels.max())+1):
@@ -159,20 +130,10 @@ def visualize_curvature_labels(folder, results_folder, frame):
colors_binned[curvature_labels == i, :] = colors[i] colors_binned[curvature_labels == i, :] = colors[i]
colors_binned_all.append(colors_binned) colors_binned_all.append(colors_binned)
fig = make_subplots(rows=1, cols=3, start_cell="top-left", specs = [ [{ 'type': 'scene' } for _ in range(3)] ])
fig.add_trace(go.Mesh3d( 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)] ])
# 8 vertices of a cube
x=-pred[:,0], colors = np.ones((verts.shape[0],3))*np.array([255,200,200])[None,:]
y=pred[:,2],
z=pred[:,1],
# i, j and k give the vertices of triangles
i = faces[:,0],
j = faces[:,1],
k = faces[:,2],
vertexcolor=np.ones((verts.shape[0],3))*np.array([255,200,200])[None,:]
),
row=1, col=2)
fig.add_trace(go.Mesh3d( fig.add_trace(go.Mesh3d(
# 8 vertices of a cube # 8 vertices of a cube
@@ -183,28 +144,32 @@ def visualize_curvature_labels(folder, results_folder, frame):
i = faces[:,0], i = faces[:,0],
j = faces[:,1], j = faces[:,1],
k = faces[:,2], k = faces[:,2],
vertexcolor=colors_binned_all[0] vertexcolor=colors,
lighting={ 'ambient':0.9, 'diffuse':0.5, 'roughness':0.5 }
), ),
row=1, col=1) row=1, col=1)
for i, colors_binned in enumerate(colors_binned_all):
fig.add_trace(go.Mesh3d( fig.add_trace(go.Mesh3d(
# 8 vertices of a cube # 8 vertices of a cube
x=-pred[:,0], x=verts[:,0],
y=pred[:,2], y=verts[:,1],
z=pred[:,1], z=verts[:,2],
# i, j and k give the vertices of triangles # i, j and k give the vertices of triangles
i = faces[:,0], i = faces[:,0],
j = faces[:,1], j = faces[:,1],
k = faces[:,2], k = faces[:,2],
vertexcolor=colors_binned_all[1], vertexcolor=colors_binned,
text=f'dice: {dice}' # lighting={ 'ambient':0.8, 'diffuse':0.5, 'roughness':0.5 }
), ),
row=1, col=3) row=1, col=i+2)
fig.update_layout(scene_aspectmode='manual', scene_aspectratio=dict(x=1, y=1, z=1), 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), scene2_aspectmode='manual', scene2_aspectratio=dict(x=1, y=1, z=1),
scene3_aspectmode='manual', scene3_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), scene4_aspectmode='manual', scene4_aspectratio=dict(x=1, y=1, z=1),
# scene5_aspectmode='manual', scene5_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), helper = dict(xaxis = dict(range=[-1,1], showbackground=False, showticklabels=False, showaxeslabels=False, showspikes=False, visible=False),
@@ -214,7 +179,7 @@ def visualize_curvature_labels(folder, results_folder, frame):
fig.update_layout(scene = helper, fig.update_layout(scene = helper,
scene2 = helper, scene2 = helper,
scene3 = helper, scene3 = helper,
# scene4 = helper, scene4 = helper,
# scene5 = helper, # scene5 = helper,
) )
@@ -238,46 +203,33 @@ def visualize_curvature_labels(folder, results_folder, frame):
# zaxis = dict(nticks=4, range=[-1,1],),) # zaxis = dict(nticks=4, range=[-1,1],),)
# ) # )
return fig, dice fig.show()
import wandb print()
def init_wandb():
run = wandb.init(project='plots', name='review_4', dir='/home/workspace/local-data/temp/')
artifact = wandb.Artifact('code', type='code')
artifact.add_file('curvature_analysis.py')
run.log_artifact(artifact)
if __name__ == '__main__': if __name__ == '__main__':
# init_wandb()
is_skirt = False is_skirt = True
skirt_modifier = '_skirt' if is_skirt else '' skirt_modifier = '_skirt' if is_skirt else ''
F = np.load("custom_utils/smpl_faces" + skirt_modifier + ".npy").astype(np.int32) F = np.load("custom_utils/smpl_faces" + skirt_modifier + ".npy").astype(np.int32)
# k_neighbours(k=25) # k_neighbours(k=25)
folder = '/home/workspace/local-data/train' folder = '/home/workspace/local-data/valid_skirt'
results_folder = '/home/workspace/data/results/post/abl_overfit_jumpsuit_2-' 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')
frames_file = 'frames_jumpsuit_30k.txt' bins = None
frames = []
with open(os.path.join(folder, frames_file), 'r') as f:
lines = f.readlines()
lines = [line.strip() for line in lines]
frames = lines
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' temp_file = '/home/workspace/local-data/temp/' + ''.join(random.choice(string.ascii_lowercase) for i in range(10)) + '.ply'
if not is_skirt: if not is_skirt:
dist = np.load('custom_data/dijkstra.npy') dist = np.load('custom_data/dijkstra.npy')
else: else:
dist = np.load('custom_data/dijkstra_skirt.npy') dist = np.load('custom_data/dijkstra_skirt.npy')
i = 0 visualize_curvature_labels(folder, '02572_1', bins, neighbourhoods=[25, 25, 25], nr_of_labels=[3,6,12])
while True:
frame = np.random.choice(frames)
# frame = '03265_193'
frame = '03102_49'
fig, dice = visualize_curvature_labels(folder, results_folder, frame)
wandb.log({f'{frame}-dice:{dice}': fig}, step=i)
i += 1
print(frame)
+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
+99 -112
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
curvatures_garment = []
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]
bodies = readPC2(os.path.join(folder, id, 'Body_posed.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))
_, faces = _maskFaces(bodies[0, :, :], F, mask)
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.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)
step = 0
for body, offsets in zip(bodies, offsetss):
verts = body + offsets
verts = verts[mask, :]
m = tm.Trimesh(verts, faces, process=False, validate=False)
export_to_ply(m, 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 = np.argsort(dist[mask, :][:, mask], axis=-1)[:, :neighbourhood] #cloud.get_neighbors(k=neighbourhood)
ev = cloud.add_scalar_field("eigen_values", k_neighbors=k_neighbors) out[id] = k_neighbors
cloud.add_scalar_field("curvature", ev=ev)
curvature = np.array(cloud.points["curvature(" + str(neighbourhood+1) + ")"])
curvatures_garment.append(curvature)
print(step) return out
step += 1
# curvatures_all.append(np.array(curvatures_garment)) def generate_curvatures(folder, neighbourhood, frames):
np.save(garment_dir + '/curvature_25_raw.npy', np.array(curvatures_garment))
return curvatures_all # ids = os.listdir(folder)[int(args.start):int(args.end)]
# frames = frames[int(args.start):int(args.end)]
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']
# # offsetss = readPC2(os.path.join(folder, id, garment + '_registered.pc16'), True)['V']
# 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,:]
# 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)
# 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) + ")"])
# 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)
return None
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 frame in range(curvature.shape[0]):
frame_labels = np.zeros((curvature.shape[1]), dtype=np.float32)
for j in range(bins.shape[0] - 2): for j in range(bins.shape[0] - 2):
frame_labels[(curvature[frame, :] >= bins[j]) * (curvature[frame, :] < bins[j+1])] = labels[j] frame_labels[(curvature >= bins[j]) * (curvature < bins[j+1])] = labels[j]
frame_labels[curvature[frame, :] >= bins[-2]] = labels[-1] frame_labels[curvature >= 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.
+6 -4
View File
@@ -1,6 +1,6 @@
import os import os
import sys import sys
from configs.config_abl_overfit_jumpsuit_2 import config from configs.config_abl_all_post 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,11 +41,11 @@ from losses import collision_loss as collision_penalty
from custom_utils.custom_utils import batch_to_dict, load_model, plot_3d, UV2Mesh, get_summary_html, maskFacesBatch, _maskFaces, plot_3d_collision from custom_utils.custom_utils import batch_to_dict, load_model, plot_3d, UV2Mesh, get_summary_html, maskFacesBatch, _maskFaces, plot_3d_collision
from dataset import DatasetFactory, StaticDataset from dataset import DatasetFactory, StaticDataset
from custom_utils.smpl import SMPL from custom_utils.smpl import SMPL
from models.cvae_model import CVAE 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'])
+3 -3
View File
@@ -1,6 +1,6 @@
import os import os
import sys import sys
from configs.config_abl_overfit_jumpsuit_2 import config from configs.config_abl_all_post import config
os.environ["CUDA_VISIBLE_DEVICES"] = config['gpu'] os.environ["CUDA_VISIBLE_DEVICES"] = config['gpu']
import tensorflow as tf import tensorflow as tf
@@ -42,7 +42,7 @@ from losses import collision_loss as collision_penalty
from custom_utils.custom_utils import batch_to_dict, load_model, plot_3d, UV2Mesh, get_summary_html, maskFacesBatch, _maskFaces, plot_3d_collision from custom_utils.custom_utils import batch_to_dict, load_model, plot_3d, UV2Mesh, get_summary_html, maskFacesBatch, _maskFaces, plot_3d_collision
from dataset import DatasetFactory, StaticDataset from dataset import DatasetFactory, StaticDataset
from custom_utils.smpl import SMPL from custom_utils.smpl import SMPL
from models.cvae_model import CVAE from models.cvae_model import CVAENew as CVAE
from custom_utils.supersmpl_io import writeOBJ from custom_utils.supersmpl_io import writeOBJ
# from unif_metric import chamfer_and_score # from unif_metric import chamfer_and_score
@@ -104,7 +104,7 @@ if __name__ == '__main__':
iteration = '' iteration = ''
load_model(model, 'checkpoints/' + checkpoint_name, iteration=iteration) load_model(model, 'checkpoints/post/' + checkpoint_name, iteration=iteration)
# load_model(model, 'checkpoints/' + 'abl_all_120k') # load_model(model, 'checkpoints/' + 'abl_all_120k')
output_folder = '/home/workspace/data/results/post/' + checkpoint_name + '-' + iteration output_folder = '/home/workspace/data/results/post/' + checkpoint_name + '-' + iteration
+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)
+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 &')