函数内定义
当某个函数的参数可以定义在界面函数中时,如需修改某个参数值时,可以使用parse_args方法并传入模拟的命令行参数列表,从而实现对于main主函数的参数定义。
parser = argparse.ArgumentParser()
# model arguments
parser.add_argument('--img_size', type=int, default=256,
help='Image resolution')
parser.add_argument('--num_domains', type=int, default=2,
help='Number of domains')
parser.add_argument('--latent_dim', type=int, default=16,
help='Latent vector dimension')
parser.add_argument('--hidden_dim', type=int, default=512,
help='Hidden dimension of mapping network')
parser.add_argument('--style_dim', type=int, default=64,
help='Style code dimension')
# weight for objective functions
parser.add_argument('--lambda_reg', type=float, default=1,
help='Weight for R1 regularization')
parser.add_argument('--lambda_cyc', type=float, default=1,
help='Weight for cyclic consistency loss')
parser.add_argument('--lambda_sty', type=float, default=1,
help='Weight for style reconstruction loss')
parser.add_argument('--lambda_ds', type=float, default=1,
help='Weight for diversity sensitive loss')
parser.add_argument('--ds_iter', type=int, default=100000,
help='Number of iterations to optimize diversity sensitive loss')
parser.add_argument('--w_hpf', type=float, default=1,
help='weight for high-pass filtering')
# training arguments
parser.add_argument('--randcrop_prob', type=float, default=0.5,
help='Probabilty of using random-resized cropping')
parser.add_argument('--total_iters', type=int, default=100000,
help='Number of total iterations')
parser.add_argument('--resume_iter', type=int, default=0,
help='Iterations to resume training/testing')
parser.add_argument('--batch_size', type=int, default=8,
help='Batch size for training')
parser.add_argument('--val_batch_size', type=int, default=32,
help='Batch size for validation')
parser.add_argument('--lr', type=float, default=1e-4,
help='Learning rate for D, E and G')
parser.add_argument('--f_lr', type=float, default=1e-6,
help='Learning rate for F')
parser.add_argument('--beta1', type=float, default=0.0,
help='Decay rate for 1st moment of Adam')
parser.add_argument('--beta2', type=float, default=0.99,
help='Decay rate for 2nd moment of Adam')
parser.add_argument('--weight_decay', type=float, default=1e-4,
help='Weight decay for optimizer')
parser.add_argument('--num_outs_per_domain', type=int, default=10,
help='Number of generated images per domain during sampling')
# misc
parser.add_argument('--mode', type=str, required=True,
choices=['train', 'sample', 'eval', 'align'],
help='This argument is used in solver')
parser.add_argument('--num_workers', type=int, default=4,
help='Number of workers used in DataLoader')
parser.add_argument('--seed', type=int, default=777,
help='Seed for random number generator')
# directory for training
parser.add_argument('--train_img_dir', type=str, default='data/celeba_hq/train',
help='Directory containing training images')
parser.add_argument('--val_img_dir', type=str, default='data/celeba_hq/val',
help='Directory containing validation images')
parser.add_argument('--sample_dir', type=str, default='expr/samples',
help='Directory for saving generated images')
parser.add_argument('--checkpoint_dir', type=str, default='expr/checkpoints',
help='Directory for saving network checkpoints')
# directory for calculating metrics
parser.add_argument('--eval_dir', type=str, default='expr/eval',
help='Directory for saving metrics, i.e., FID and LPIPS')
# directory for testing
parser.add_argument('--result_dir', type=str, default='expr/results',
help='Directory for saving generated images and videos')
parser.add_argument('--src_dir', type=str, default='assets/representative/celeba_hq/src',
help='Directory containing input source images')
parser.add_argument('--ref_dir', type=str, default='assets/representative/celeba_hq/ref',
help='Directory containing input reference images')
parser.add_argument('--inp_dir', type=str, default='assets/representative/custom/female',
help='input directory when aligning faces')
parser.add_argument('--out_dir', type=str, default='assets/representative/celeba_hq/src/female',
help='output directory when aligning faces')
# face alignment
parser.add_argument('--wing_path', type=str, default='expr/checkpoints/wing.ckpt')
parser.add_argument('--lm_path', type=str, default='expr/checkpoints/celeba_lm_mean.npz')
# step size
parser.add_argument('--print_every', type=int, default=10)
parser.add_argument('--sample_every', type=int, default=5000)
parser.add_argument('--save_every', type=int, default=10000)
parser.add_argument('--eval_every', type=int, default=50000)
args_list = ['--mode', 'sample', '--num_domains', '3', '--resume_iter', '100000', '--w_hpf', '0','--checkpoint_dir', 'expr/checkpoints/afhq', '--result_dir', 'expr/results/afhq', '--src_dir', self.directory_src, '--ref_dir', self.directory_ref]
# 使用parse_args方法并传入模拟的命令行参数列表
args = parser.parse_args(args_list)
main.main(args)
函数外定义
类似于定义在options.py这样的函数中,通过对Options类的实例化,实例化参数解释器,从而获得其中定义的参数,如果想实现修改默认参数的话,可以在options.py中定义修改函数。
def set_data(self, attr_name, data):
# 直接使用传入的attr_name作为属性名来设置值
setattr(self.args, attr_name, data)
然后调用修改即可,
set_data('dcopy_result0_bvh', '/path/to/file0.bvh')
import argparse
class Options:
def __init__(self, argv):
if "--" not in argv:
self.argv = [] # as if no args are passed
else:
self.argv = argv[argv.index("--") + 1:]
usage_text = (
"Run blender in background mode with this script:"
" blender --background --python [main_python_file] -- [options]"
)
self.parser = argparse.ArgumentParser(description=usage_text)
self.initialize()
self.args = self.parser.parse_args(self.argv)
def initialize(self):
self.parser.add_argument(
'--dcopy_result0_bvh',
type=str,
default='./datasets/tgt_files/XBot_inp_Gangnam Style.bvh',
help='path of bvh file',
)
self.parser.add_argument(
'--dcopy_result1_bvh',
type=str,
default='./datasets/tgt_files/Robot_to_Ortiz_Gangnam Style.bvh',
help='path of bvh file',
)
self.parser.add_argument(
'--dcopy_result2_bvh',
type=str,
default='./datasets/tgt_files/Robot_to_Warrok_Gangnam Style.bvh',
help='path of bvh file',
)
self.parser.add_argument(
'--dcopy_result3_bvh',
type=str,
default='./datasets/tgt_files/Robot_to_Mousey_Gangnam Style.bvh',
help='path of bvh file',
)
self.parser.add_argument(
'--dcopy_fbx_file0',
type=str,
default='./datasets/skin/XBot.fbx',
help='path of skinned model fbx file',
)
self.parser.add_argument(
'--dcopy_fbx_file1',
type=str,
default='./datasets/skin/Ortiz.fbx',
help='path of skinned model fbx file',
)
self.parser.add_argument(
'--dcopy_fbx_file2',
type=str,
default='./datasets/skin/Warrok W Kurniawan.fbx',
help='path of skinned model fbx file',
)
self.parser.add_argument(
'--dcopy_fbx_file3',
type=str,
default='./datasets/skin/Mousey.fbx',
help='path of skinned model fbx file',
)
self.parser.add_argument(
'--save_path',
type=str,
default='./videos/',
help='path of output video file',
)
# scene parameters
self.parser.add_argument(
'--view', type=str, default='front', help='view of the camera'
)
# rendering parameters
self.parser.add_argument(
'--render', action='store_true', default=True, help='render an output video'
)
self.parser.add_argument(
'--render_engine',
type=str,
default='eevee',
help='name of preferable render engine: cycles, eevee',
)
self.parser.add_argument(
'--frame_end',
type=int,
default=2,
help='the index of the last rendered frame',
)
self.parser.add_argument(
'--fps', type=int, default=25, help='the frame rate of rendered video'
)
self.parser.add_argument('--resX', type=int, default=1920, help='x resolution')
self.parser.add_argument('--resY', type=int, default=1080, help='y resolution')
def parse(self):
return self.args