import open3d as o3d from . import yacs from .yacs import CfgNode as CN import argparse import os import numpy as np import pprint cfg = CN() # experiment name cfg.exp_name = 'hello' # network cfg.point_feature = 9 cfg.distributed = False # data cfg.human = 313 cfg.training_view = [0, 6, 12, 18] cfg.intv = 1 cfg.begin_ith_frame = 0 # the first smpl cfg.num_train_frame = 1 # number of smpls cfg.num_render_frame = -1 # number of frames to render cfg.ith_frame = 0 # the i-th smpl cfg.frame_interval = 1 cfg.nv = 6890 # number of vertices cfg.smpl = 'smpl_4views_5e-4' cfg.vertices = 'vertices' cfg.params = 'params_4views_5e-4' cfg.mask_bkgd = True cfg.sample_smpl = False cfg.sample_grid = False cfg.sample_fg_ratio = 0.7 cfg.H = 1024 cfg.W = 1024 cfg.add_pointcloud = False cfg.big_box = False cfg.rot_ratio = 0. cfg.rot_range = np.pi / 32 # mesh cfg.mesh_th = 50 # threshold of alpha # task cfg.task = 'nerf4d' # gpus cfg.gpus = list(range(8)) # if load the pretrained network cfg.resume = True # epoch cfg.ep_iter = -1 cfg.save_ep = 100 cfg.save_latest_ep = 5 cfg.eval_ep = 100 # ----------------------------------------------------------------------------- # train # ----------------------------------------------------------------------------- cfg.train = CN() cfg.train.dataset = 'CocoTrain' cfg.train.epoch = 10000 cfg.train.num_workers = 8 cfg.train.collator = '' cfg.train.batch_sampler = 'default' cfg.train.sampler_meta = CN({'min_hw': [256, 256], 'max_hw': [480, 640], 'strategy': 'range'}) cfg.train.shuffle = True # use adam as default cfg.train.optim = 'adam' cfg.train.lr = 1e-4 cfg.train.weight_decay = 0 cfg.train.scheduler = CN({'type': 'multi_step', 'milestones': [80, 120, 200, 240], 'gamma': 0.5}) cfg.train.batch_size = 4 cfg.train.acti_func = 'relu' cfg.train.use_vgg = False cfg.train.vgg_pretrained = '' cfg.train.vgg_layer_name = [0,0,0,0,0] cfg.train.use_ssim = False cfg.train.use_d = False # test cfg.test = CN() cfg.test.dataset = 'CocoVal' cfg.test.batch_size = 1 cfg.test.epoch = -1 cfg.test.sampler = 'default' cfg.test.batch_sampler = 'default' cfg.test.sampler_meta = CN({'min_hw': [480, 640], 'max_hw': [480, 640], 'strategy': 'origin'}) cfg.test.frame_sampler_interval = 30 # trained model cfg.trained_model_dir = 'data/trained_model' # recorder cfg.record_dir = 'data/record' cfg.log_interval = 20 cfg.record_interval = 20 # result cfg.result_dir = 'data/result' # evaluation cfg.skip_eval = False cfg.test_novel_pose = False cfg.novel_pose_ni = 100 cfg.vis_novel_pose = False cfg.vis_novel_view = False cfg.vis_rotate_smpl = False cfg.vis_mesh = False cfg.eval_whole_img = False cfg.fix_random = False cfg.vis = 'mesh' # data cfg.body_sample_ratio = 0.5 cfg.face_sample_ratio = 0. def parse_cfg(cfg, args): if len(cfg.task) == 0: raise ValueError('task must be specified') # assign the gpus os.environ['CUDA_VISIBLE_DEVICES'] = ', '.join([str(gpu) for gpu in cfg.gpus]) cfg.trained_model_dir = os.path.join(cfg.trained_model_dir, cfg.task, cfg.exp_name) cfg.record_dir = os.path.join(cfg.record_dir, cfg.task, cfg.exp_name) cfg.result_dir = os.path.join(cfg.result_dir, cfg.task, cfg.exp_name) cfg.local_rank = args.local_rank cfg.distributed = cfg.distributed or args.launcher not in ['none'] def make_cfg(args): with open(args.cfg_file, 'r') as f: current_cfg = yacs.load_cfg(f) if 'parent_cfg' in current_cfg.keys(): with open(current_cfg.parent_cfg, 'r') as f: parent_cfg = yacs.load_cfg(f) cfg.merge_from_other_cfg(parent_cfg) cfg.merge_from_other_cfg(current_cfg) cfg.merge_from_list(args.opts) if cfg.vis_novel_pose: cfg.merge_from_other_cfg(cfg.novel_pose_cfg) if cfg.vis_novel_view: cfg.merge_from_other_cfg(cfg.novel_view_cfg) if cfg.vis_rotate_smpl: cfg.merge_from_other_cfg(cfg.rotate_smpl_cfg) if cfg.vis_mesh: cfg.merge_from_other_cfg(cfg.mesh_cfg) cfg.merge_from_list(args.opts) parse_cfg(cfg, args) # pprint.pprint(cfg) return cfg parser = argparse.ArgumentParser() parser.add_argument("--cfg_file", default="configs/default.yaml", type=str) parser.add_argument('--test', action='store_true', dest='test', default=False) parser.add_argument("--type", type=str, default="") parser.add_argument('--det', type=str, default='') parser.add_argument('--local_rank', type=int, default=0) parser.add_argument('--launcher', type=str, default='none', choices=['none', 'pytorch']) parser.add_argument("opts", default=None, nargs=argparse.REMAINDER) args = parser.parse_args() if len(args.type) > 0: cfg.task = "run" cfg = make_cfg(args)