MotionCLR / options /train_options.py
EvanTHU's picture
init demo
b887ad8 verified
raw
history blame
6.94 kB
import argparse
from .get_opt import get_opt
from os.path import join as pjoin
import os
class TrainOptions():
def __init__(self):
self.parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
self.initialized = False
def initialize(self):
# base set
self.parser.add_argument('--name', type=str, default="test", help='Name of this trial')
self.parser.add_argument('--dataset_name', type=str, default='t2m', help='Dataset Name')
self.parser.add_argument('--feat_bias', type=float, default=5, help='Scales for global motion features and foot contact')
self.parser.add_argument('--checkpoints_dir', type=str, default='./checkpoints', help='models are saved here')
self.parser.add_argument('--log_every', type=int, default=5, help='Frequency of printing training progress (by iteration)')
self.parser.add_argument('--save_interval', type=int, default=10_000, help='Frequency of evaluateing and saving models (by iteration)')
# network hyperparams
self.parser.add_argument('--num_layers', type=int, default=8, help='num_layers of transformer')
self.parser.add_argument('--latent_dim', type=int, default=512, help='latent_dim of transformer')
self.parser.add_argument('--text_latent_dim', type=int, default=256, help='latent_dim of text embeding')
self.parser.add_argument('--time_dim', type=int, default=512, help='latent_dim of timesteps')
self.parser.add_argument('--base_dim', type=int, default=512, help='Dimension of Unet base channel')
self.parser.add_argument('--dim_mults', type=int, default=[2,2,2,2], nargs='+', help='Unet channel multipliers.')
self.parser.add_argument('--no_eff', action='store_true', help='whether use efficient linear attention')
self.parser.add_argument('--no_adagn', action='store_true', help='whether use adagn block')
self.parser.add_argument('--diffusion_steps', type=int, default=1000, help='diffusion_steps of transformer')
self.parser.add_argument('--prediction_type', type=str, default='sample', help='diffusion_steps of transformer')
# train hyperparams
self.parser.add_argument('--seed', type=int, default=0, help='seed for train')
self.parser.add_argument('--num_train_steps', type=int, default=50_000, help='Number of training iterations')
self.parser.add_argument('--lr', type=float, default=2e-4, help='Learning rate')
self.parser.add_argument("--decay_rate", default=0.9, type=float, help="the decay rate of lr (0-1 default 0.9)")
self.parser.add_argument("--update_lr_steps", default=5_000, type=int, help="")
self.parser.add_argument("--cond_mask_prob", default=0.1, type=float,
help="The probability of masking the condition during training."
" For classifier-free guidance learning.")
self.parser.add_argument('--clip_grad_norm', type=float, default=1, help='Gradient clip')
self.parser.add_argument('--weight_decay', type=float, default=1e-2, help='Learning rate weight_decay')
self.parser.add_argument('--batch_size', type=int, default=64, help='Batch size per GPU')
self.parser.add_argument("--beta_schedule", default='linear', type=str, help="Types of beta in diffusion (e.g. linear, cosine)")
self.parser.add_argument('--dropout', type=float, default=0.1, help='dropout')
# continue training
self.parser.add_argument('--is_continue', action="store_true", help='Is this trail continued from previous trail?')
self.parser.add_argument('--continue_ckpt', type=str, default="latest.tar", help='previous trail to continue')
self.parser.add_argument("--opt_path", type=str, default='',help='option file path for loading model')
self.parser.add_argument('--debug', action="store_true", help='debug mode')
self.parser.add_argument('--self_attention', action="store_true", help='self_attention use or not')
self.parser.add_argument('--vis_attn', action='store_true', help='vis attention value or not')
self.parser.add_argument('--edit_mode', action='store_true', help='editing mode')
# EMA params
self.parser.add_argument(
"--model-ema", action="store_true", help="enable tracking Exponential Moving Average of model parameters"
)
self.parser.add_argument(
"--model-ema-steps",
type=int,
default=32,
help="the number of iterations that controls how often to update the EMA model (default: 32)",
)
self.parser.add_argument(
"--model-ema-decay",
type=float,
default=0.9999,
help="decay factor for Exponential Moving Average of model parameters (default: 0.99988)",
)
self.initialized = True
def parse(self,accelerator):
if not self.initialized:
self.initialize()
self.opt = self.parser.parse_args()
if self.opt.is_continue:
assert self.opt.opt_path.endswith('.txt')
get_opt(self.opt, self.opt.opt_path)
self.opt.is_train = True
self.opt.is_continue=True
elif accelerator.is_main_process:
args = vars(self.opt)
accelerator.print('------------ Options -------------')
for k, v in sorted(args.items()):
accelerator.print('%s: %s' % (str(k), str(v)))
accelerator.print('-------------- End ----------------')
# save to the disk
expr_dir = pjoin(self.opt.checkpoints_dir, self.opt.dataset_name, self.opt.name)
os.makedirs(expr_dir,exist_ok=True)
file_name = pjoin(expr_dir, 'opt.txt')
with open(file_name, 'wt') as opt_file:
opt_file.write('------------ Options -------------\n')
for k, v in sorted(args.items()):
if k =='opt_path':
continue
opt_file.write('%s: %s\n' % (str(k), str(v)))
opt_file.write('-------------- End ----------------\n')
if self.opt.dataset_name == 't2m' or self.opt.dataset_name == 'humanml':
self.opt.joints_num = 22
self.opt.dim_pose = 263
self.opt.max_motion_length = 196
self.opt.radius = 4
self.opt.fps = 20
elif self.opt.dataset_name == 'kit':
self.opt.joints_num = 21
self.opt.dim_pose = 251
self.opt.max_motion_length = 196
self.opt.radius = 240 * 8
self.opt.fps = 12.5
else:
raise KeyError('Dataset not recognized')
self.opt.device = accelerator.device
self.opt.is_train = True
return self.opt