def gather_options(self): """Initialize our parser with basic options(only once). Add additional model-specific and dataset-specific options. These options are defined in the <modify_commandline_options> function in model and dataset classes. """ if not self.initialized: # check if it has been initialized parser = argparse.ArgumentParser( formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser = self.initialize(parser) # get the basic options opt, _ = parser.parse_known_args() # modify model-related parser options model_name = opt.model model_option_setter = models.get_option_setter(model_name) parser = model_option_setter(parser, self.isTrain) opt, _ = parser.parse_known_args() # parse again with new defaults # modify dataset-related parser options dataset_name = opt.dataset_mode dataset_option_setter = data.get_option_setter(dataset_name) parser = dataset_option_setter(parser, self.isTrain) # save and return the parser self.parser = parser return parser.parse_args()
def gather_options(self): # initialize parser with basic options if not self.initialized: parser = argparse.ArgumentParser( formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser = self.initialize(parser) # get the basic options opt, unknown = parser.parse_known_args() # modify model-related parser options model_name = opt.model model_option_setter = models.get_option_setter(model_name) parser = model_option_setter(parser, self.isTrain) # modify dataset-related parser options # dataset_mode = opt.dataset_mode # dataset_option_setter = data.get_option_setter(dataset_mode) # parser = dataset_option_setter(parser, self.isTrain) opt, unknown = parser.parse_known_args() # if there is opt_file, load it. # The previous default options will be overwritten if opt.load_from_opt_file: parser = self.update_options_from_file(parser, opt) opt = parser.parse_args() self.parser = parser return opt
def gather_options(self): """ 涉及到basic_options.initialize和train_options.initialize model.__init__.get_option_setter和model.cycle_gan.modify_commandline_options data.__init__.get_option_setter和data.unalingned.modify_commandline_options 被parse()调用 :return:argparse.Namespace """ # step1: initiaize parser with basic options if not self.initialized: parser = argparse.ArgumentParser( formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser = self.initialize(parser) opt, _ = parser.parse_known_args() # step2: initialize parser with model model_name = opt.model model_option_setter = models.get_option_setter(model_name) parser = model_option_setter(parser, self.isTrain) opt, _ = parser.parse_known_args() # step3: initialize parser with data dataset_name = opt.dataset_mode dataset_option_setter = data.get_option_setter(dataset_name) parser = dataset_option_setter(parser, self.isTrain) opt, _ = parser.parse_known_args() self.parser = parser return opt
def parse(self): opt = options.Options.parse(self, print_opt=False) # modify model-related parser options model_name = opt.model model_option_setter = models.get_option_setter(model_name) self.parser = model_option_setter(self.parser) opt = options.Options.parse(self, print_opt=False) opt.isTrain = self.isTrain # default model name if opt.name == '': opt.name = '{model}_{which_model_netD}_size{fineSize}'.format(**vars(opt)) else: opt.name = opt.name.format(**vars(opt)) # process opt.suffix if opt.suffix: suffix = ('_' + opt.suffix.format(**vars(opt))) if opt.suffix != '' else '' opt.name = opt.name + suffix opt.suffix = '' # process opt.prefix if opt.prefix: prefix = (opt.prefix.format(**vars(opt))) if opt.prefix != '' else '' prefix += '-' opt.name = prefix + opt.name opt.prefix = '' # print options after name/prefix/suffix is modified if self.print_opt: self.print_options(opt) # set gpu ids str_ids = opt.gpu_ids if isinstance(opt.gpu_ids, str): str_ids = opt.gpu_ids.split(',') opt.gpu_ids = [] for str_id in str_ids: id = int(str_id) if id >= 0: opt.gpu_ids.append(id) if len(opt.gpu_ids) > 0 and torch.cuda.is_available(): torch.cuda.set_device(opt.gpu_ids[0]) # check both image paths are specified assert(opt.real_im_path and opt.fake_im_path) return opt
def gather_options(self): args, _ = self.parser.parse_known_args() # Update model-related parser options model_option_setter = models.get_option_setter(args.model) parser, str_keys, val_keys, bool_keys = model_option_setter( self.parser, self.is_train) args, _ = parser.parse_known_args() self.parser = parser self.str_keys += str_keys self.val_keys += val_keys self.bool_keys += bool_keys return parser.parse_args()
def gather_options(self): if not self.initialized: parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser = self.initialize(parser) opt, _ = parser.parse_known_args() model_name = opt.model model_option_setter = models.get_option_setter(model_name) parser = model_option_setter(parser, self.isTrain) opt, _ = parser.parse_known_args() dataset_name = opt.dataset_mode dataset_option_setter = data.get_option_setter(dataset_name) parser = dataset_option_setter(parser, self.isTrain) self.parser = parser return parser.parse_args()
def get_models_parsers(): """ Create a dict {model_name: parser} in which each parser hold arguments specific to a model """ model_names = get_models_names() model_parsers = {} for model_name in model_names: parser = argparse.ArgumentParser() model_option_setter = get_option_setter(model_name) try: model_parsers[model_name] = model_option_setter(parser, True) except: pass return model_parsers
def gather_options(self): parser = self.parser # get the basic option opt, _ = parser.parse_known_args() # modify additional option model_name = opt.model model_option_setter = models.get_option_setter(model_name) parser = model_option_setter(parser, self.isTrain) opt, _ = parser.parse_known_args() dataset_name = opt.dataset_mode dataset_option_setter = data.get_option_setter(dataset_name) parser = dataset_option_setter(parser, self.isTrain) self.parser = parser return parser.parse_args()
def gather_options(self): if not self.initialized: # check if it has been initialized parser = argparse.ArgumentParser( formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser = self.initialize(parser) # get the basic options opt, _ = parser.parse_known_args() # modify model-related parser options model_name = opt.model model_option_setter = models.get_option_setter(model_name) parser = model_option_setter(self, parser) opt, _ = parser.parse_known_args() # parse again with new defaults # save and return the parser self.parser = parser return parser.parse_args()
def gather_options(self): # initialize parser with basic options if not self.initialized: parser = argparse.ArgumentParser( formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser = self.initialize(parser) # get the basic options opt, _ = parser.parse_known_args() # modify model-related parser options model_name = opt.model model_option_setter = models.get_option_setter(model_name) parser = model_option_setter(parser, self.isTrain) opt, _ = parser.parse_known_args() # parse again with the new defaults self.parser = parser return parser.parse_args()
def gather_options(self): # initialize parser with basic options if not self.initialized: ''' 设置一个解析器 使用argparse的第一步就是创建一个解析器对象,并告诉它将会有些什么参数。那么当你的程序运行时,该解析器就可以用于处理命令行参数。 解析器类是 ArgumentParser 。构造方法接收几个参数来设置用于程序帮助文本的描述信息以及其他全局的行为或设置。 argparse.ArgumentDefaultsHelpFormatter 在每个选项的帮助信息后面输出他们对应的缺省值,如果有设置的话。 之后再初始化解析器,并将add_argument后的解析器返回 ''' parser = argparse.ArgumentParser( formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser = self.initialize(parser) # get the basic options # opt返回所有参数及其默认值(或者在命令行中给定的值) # 例如:Namespace(batch_size=1, dataroot='.', fineSize=256, input_nc=3, loadSize=286, ndf=64, netD='basic', ngf=64, output_nc=3) # 使用parser.parse_known_args()方法比parser.parse_args()方法鲁棒性更好,前者在运行时指定了程序中没有的参数时,不会报错,而是保存在第二个返回参数中 opt, _ = parser.parse_known_args() # modify model-related parser options model_name = opt.model # model_option_setter得到静态modify_commandline_options方法入口 model_option_setter = models.get_option_setter(model_name) # 传递base_options的option参数,并根据相应model的option参数,返回新的parser parser = model_option_setter(parser, self.isTrain) opt, _ = parser.parse_known_args() # parse again with the new defaults # modify dataset-related parser options # 同样的,根据dataset的option参数返回新的parser dataset_name = opt.dataset_mode dataset_option_setter = data.get_option_setter(dataset_name) parser = dataset_option_setter(parser, self.isTrain) self.parser = parser return parser.parse_args()
def gather_options_jupyter(self): argstr = ["--names","rs_model","--dataset", "example", "--list_start", "0", "--list_end", "10", \ "--dataset_mode","allface","--gpu_ids","0,1","--netG","rotatespade","--norm_G","spectralsyncbatch", \ "--model","rotatespade","--label_nc","5","--nThreads","3","--heatmap_size","2.5","--chunk_size","1", \ "--no_gaussian_landmark","--multi_gpu","--device_count","2","--render_thread","1","--label_mask", \ "--align","--erode_kernel","21","--yaw_poses","0","30"] # argstr_part = ["--name","face","--dataset_mode", "paired", "--adaptive_spade", "--warp_ref", "--batchSize","8","--no_flow_gt"] # initialize parser with basic options if not self.initialized: parser = argparse.ArgumentParser( formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser = self.initialize(parser) # get the basic options opt, unknown = parser.parse_known_args(argstr) # modify model-related parser options model_name = opt.model model_option_setter = models.get_option_setter(model_name) parser = model_option_setter(parser, self.isTrain) # modify dataset-related parser options dataset_mode = opt.dataset_mode dataset_option_setter = data.get_option_setter(dataset_mode) parser = dataset_option_setter(parser, self.isTrain) opt, unknown = parser.parse_known_args(argstr) # if there is opt_file, load it. # lt options will be overwritten if opt.load_from_opt_file: parser = self.update_options_from_file(parser, opt) opt = parser.parse_args(argstr) self.parser = parser return opt
def gather_options(self): # """Initialize our parser with basic options(only once). # Add additional model-specific and dataset-specific options. # These options are defined in the <modify_commandline_options> function # in model and dataset classes. # """ parser = argparse.ArgumentParser( formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser = self.initialize(parser) opt, _ = parser.parse_known_args() model_name = opt.model model_option_setter = models.get_option_setter(model_name) parser = model_option_setter(parser, self.isTrain) opt, _ = parser.parse_known_args() dataset_name = opt.dataset_mode dataset_option_setter = data.get_option_setter(dataset_name) parser = dataset_option_setter(parser, self.isTrain) self.parser = parser return parser.parse_args()
def gather_options(self, infer=False): """使用基础选项参数初始化 parser(仅一次). 增加额外的 model-specific 和 dataset-specific 选项 这些选项定义在 dataset 和 model 类的 <modify_commandline_options> 函数中 """ if not self.initialized: # 检查是否已被初始化 parser = argparse.ArgumentParser( formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser = self.initialize(parser) if infer: parser.add_argument('--port', required=True, type=str, help='推理时后端服务开放端口') parser.set_defaults(dataroot='./') # 推理时不需要指定--dataroot parser.set_defaults(norm_max=255) # 读取非dicom时不需要指定 norm_max parser.set_defaults(norm_min=0) # 读取非dicom时不需要指定 norm_min parser.set_defaults(model='test') # 读取非dicom时不需要指定 norm_min parser.set_defaults(dataset_mode='single') # 推理时数据集类应为单向 # 得到基本选项 opt, _ = parser.parse_known_args() # 修改 model-related parser 选项 model_name = opt.model model_option_setter = models.get_option_setter(model_name) parser = model_option_setter(parser, self.isTrain) opt, _ = parser.parse_known_args() # parse again with new defaults # modify dataset-related parser options dataset_name = opt.dataset_mode dataset_option_setter = data.get_option_setter(dataset_name) parser = dataset_option_setter(parser, self.isTrain) # 保存并返回 parser self.parser = parser return parser.parse_args()
def gather_options(self): # initialize parser with basic options if not self.initialized: parser = argparse.ArgumentParser( formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser = self.initialize(parser) # get the basic options opt, _ = parser.parse_known_args() # modify model-related parser options model_name = opt.model model_option_setter = models.get_option_setter(model_name) parser = model_option_setter(parser, self.isTrain) opt, _ = parser.parse_known_args() # parse again with the new defaults # modify dataset-related parser options dataset_name = opt.dataset_mode dataset_option_setter = data.get_option_setter(dataset_name) parser = dataset_option_setter(parser, self.isTrain) self.parser = parser return parser.parse_args()
def gather_options(self): parser = argparse.ArgumentParser( prog='configurations', description='Settings:', formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser = self.initialize(parser) # get the basic settings opt, _ = parser.parse_known_args() # modify model-related parser options model_name = opt.model model_option_setter = models.get_option_setter(model_name) parser = model_option_setter(parser, self.isTrain) opt, _ = parser.parse_known_args() # parse again with new defaults # modify dataset-related parser options dataset_name = opt.dataset_mode dataset_option_setter = data.get_option_setter(dataset_name) parser = dataset_option_setter(parser, self.isTrain) # save and return self.parser = parser return parser.parse_args()
def get_schema(self, allow_nan=False): if not self.initialized: parser = argparse.ArgumentParser( formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser = self.initialize(parser) opt = argparse.Namespace() self._json_parse_known_args(parser, opt, {}) named_parsers = {"": parser} for model_name in models.get_models_names(): if self.isTrain and model_name in ["test"]: continue setter = models.get_option_setter(model_name) model_parser = argparse.ArgumentParser() setter(model_parser) self._json_parse_known_args(model_parser, opt, {}) named_parsers[model_name] = model_parser self.opt = opt self.parser = parser json_vals = self.to_json() for k in json_vals: if json_vals[k] is None: json_vals[k] = "None" if not allow_nan: if json_vals[k] == float("inf"): json_vals[k] = 1e100 if json_vals[k] == float("-inf"): json_vals[k] = -1e100 if type(json_vals[k]) == float and math.isnan(json_vals[k]): json_vals[k] = 0 from pydantic import create_model schema = create_model(type(self).__name__, **json_vals).schema() option_tags = defaultdict(list) for parser_name in named_parsers: current_parser = named_parsers[parser_name] for action_group in current_parser._action_groups: for action in action_group._group_actions: if isinstance(action, _HelpAction): continue if len(parser_name) > 0: option_tags[action.dest].append(parser_name) if action.dest in schema["properties"]: field = schema["properties"][action.dest] description = action.help if action.help is not None else "" for c in "#*<>": description = description.replace(c, "\\" + c) field["description"] = description if "title" in field: del field["title"] for tagged in option_tags: tags = " | ".join(option_tags[tagged]) schema["properties"][tagged][ "description"] = "[" + tags + "]\n\n" + schema["properties"][ tagged]["description"] return schema
self.initialized = True return parser def gather_options(self): # initialize parser with basic options if not self.initialized: parser = argparse.ArgumentParser( formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser = self.initialize(parser) # get the basic options opt, unknown = parser.parse_known_args() # modify model-related parser options model_name = opt.model model_option_setter = models.get_option_setter(model_name) parser = model_option_setter(parser, self.isTrain) # modify dataset-related parser options dataset_mode = opt.dataset_mode dataset_option_setter = data.get_option_setter(dataset_mode) parser = dataset_option_setter(parser, self.isTrain) opt, unknown = parser.parse_known_args() # if there is opt_file, load it. # The previous default options will be overwritten if opt.load_from_opt_file: parser = self.update_options_from_file(parser, opt) opt = parser.parse_args()
def gather_options(self): """Initialize our parser with basic options(only once). Add additional model-specific and dataset-specific options. These options are defined in the <modify_commandline_options> function in model and dataset classes. """ if not self.initialized: # check if it has been initialized parser = argparse.ArgumentParser( formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser = self.initialize(parser) # get the basic options opt, _ = parser.parse_known_args() # modify model-related parser options # modify model-related parser options model_name = opt.model model_option_setter = models.get_option_setter(model_name) parser = model_option_setter(parser, self.isTrain) opt, _ = parser.parse_known_args() # parse again with new defaults # modify dataset-related parser options dataset_name = opt.dataset_mode dataset_option_setter = data.get_option_setter(dataset_name) parser = dataset_option_setter(parser, self.isTrain) # save and return the parser self.parser = parser output_opt, _ = parser.parse_known_args() # determine alphabet and dataroot according to dataname: output_opt.dataroot = dataset_catalog.datasets[output_opt.dataname] if self.isTrain: if output_opt.unlabeled_dataname is not None: output_opt.unlabeled_dataroot = dataset_catalog.datasets[ output_opt.unlabeled_dataname] alphabet_dict = dataset_catalog.alphabet_dict lex_dict = dataset_catalog.lex_dict for name in alphabet_dict.keys(): if name in opt.dataname: output_opt.alphabet = getattr(alphabets, alphabet_dict[name]) if output_opt.lex == '': output_opt.lex = lex_dict[name] lex_str = '' else: lex_str = '_lex_' + os.path.splitext( output_opt.lex.split('/')[-1])[0] # save to the disk if output_opt.name == '': # name is constructed from the following: # 1. path to the datasets - with underscore instead of / beginning from main dataset name which is taken from the list IAM/RIMES/CVL/gw # 2. lexicon if it's not the default one for this dataset # 3. resolution # 4. batch size # if changed from default: # 5. dim_z # 6. no Hierarchial Z # 7. one_hot_k # 8. if different OCR from default is used, the structure of the OCR (TPS, feature extractor and prediction layer) # 9. if an rnn is used, '_useRNN' is added # 10. noGB or GB alpha different from 1 # 11. semi supervised parameters # 12. Single writer parameters # 13. Not optimizing G # 14. Use reconstruction loss instead of adversarial loss and which one # 15. Use only rec onstruction loss (alpha=Inf) output_opt.name += output_opt.name_prefix + '_' + output_opt.dataname + lex_str + output_opt.capitalize * '_CapitalizeLex' + '_GANres%s' % output_opt.resolution + '_bs%s' % output_opt.batch_size if output_opt.dim_z != 128: output_opt.name += '_dimZ%s' % output_opt.dim_z if output_opt.no_hier: output_opt.name += '_noHier' if output_opt.one_hot_k > 1: output_opt.name += '_oneHot%s' % output_opt.one_hot_k if output_opt.use_rnn: output_opt.name += '_useRNN' if self.isTrain: if output_opt.no_grad_balance: output_opt.name += '_noGB' elif output_opt.gb_alpha != 1: output_opt.name += '_GB%s' % output_opt.gb_alpha if output_opt.unlabeled_dataname is not None: output_opt.name += '_SemiSupervised_' + output_opt.unlabeled_dataname if output_opt.disjoint: output_opt.name += '_disjoint' if output_opt.single_writer: output_opt.name += '_SingleWriter' if output_opt.optimize_z: output_opt.name += 'OptimizeZ' if output_opt.not_optimize_G: output_opt.name += '_NotOptimizeG' if output_opt.onlyOCR: output_opt.name += '_OnlyOCRLoss' output_opt.len_vocab = len(output_opt.alphabet) return output_opt
def gather_options(self): """Initialize our parser with basic options(only once). Add additional model-specific and dataset-specific options. These options are defined in the <modify_commandline_options> function in model and dataset classes. """ if not self.initialized: # check if it has been initialized parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser = self.initialize(parser) # get the basic options opt, _ = parser.parse_known_args() #Phase Specific option: method_name = "phase_" + opt.phase + "_options" module = importlib.import_module('options.phase_specific_options') method = getattr(module, method_name) parser = method(parser) opt, _ = parser.parse_known_args() self.isTrain = opt.phase == 'train' # print('so far', opt) # print('str_options_from_file',str_options_from_file) dict_options, isLoading = self.get_all_specific_options_from_file(opt) # print('so far 2', dict_options) # parser_phase_sepcific = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser = self.load_base_option(parser) # if isLoading: # print('\n\nis loading is true: {}'.format(dict_options)) opt_spec, _ = parser.parse_known_args(dict_options) # print('so far 3', opt_spec) # print('\n\nso far so good') managers_option_setter = managers.get_option_setter(opt_spec.model) parser = managers_option_setter(parser, self.isTrain) # opt, _ = parser.parse_known_args() # parse again with new defaults model_option_setter = models.get_option_setter(opt_spec.model) parser = model_option_setter(parser, self.isTrain) # opt, _ = parser.parse_known_args() # parse again with new defaults # modify dataset-related parser options dataset_option_setter = data.get_option_setter(opt_spec.dataset) # print(dataset_option_setter) parser = dataset_option_setter(parser, self.isTrain) # opt, _ = parser.parse_known_args() # parser_all = method(parser_phase_sepcific) # parser_all = self.initialize(parser_all) self.parser = parser # print('so far so good - last') options = parser.parse_args() # print(options) # print('so far so good - last last') # print('\n\n\n',options) # print('\n\n\n',options2) # print('so far so good') # todelete = [] # for idx,elem in enumerate(dict_options): # kk = elem.replace('--','').split('=')[0] # if not hasattr(options2, kk): # todelete.append(idx) # print('deleting elements: {}'.format(todelete)) # for i in todelete: # del dict_options[i] if isLoading: options2 = parser.parse_known_args(dict_options) # print('so far so good - last last last') for kk, vv in vars(options2[0]).items(): if hasattr(options, kk) and getattr(options, kk) != vv: old = getattr(options, kk) setattr(options, kk, vv) print('updating option: {} from {} to {}'.format(kk,old, vv)) return options