| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- # fmt: off
- # flake8: noqa
- # pyre-unsafe
- """Config."""
- import argparse
- import os
- def parse_configs():
- """Parse command line."""
- default_eval_config = get_default_eval_config()
- default_eval_config["DISPLAY_LESS_PROGRESS"] = True
- default_dataset_config = get_default_dataset_config()
- default_metrics_config = {"METRICS": ["TETA"]}
- config = {
- **default_eval_config,
- **default_dataset_config,
- **default_metrics_config,
- }
- parser = argparse.ArgumentParser()
- for setting in config.keys():
- if type(config[setting]) == list or type(config[setting]) == type(None):
- parser.add_argument("--" + setting, nargs="+")
- else:
- parser.add_argument("--" + setting)
- args = parser.parse_args().__dict__
- for setting in args.keys():
- if args[setting] is not None:
- if type(config[setting]) == type(True):
- if args[setting] == "True":
- x = True
- elif args[setting] == "False":
- x = False
- else:
- raise Exception(
- f"Command line parameter {setting} must be True/False"
- )
- elif type(config[setting]) == type(1):
- x = int(args[setting])
- elif type(args[setting]) == type(None):
- x = None
- else:
- x = args[setting]
- config[setting] = x
- eval_config = {k: v for k, v in config.items() if k in default_eval_config.keys()}
- dataset_config = {
- k: v for k, v in config.items() if k in default_dataset_config.keys()
- }
- metrics_config = {
- k: v for k, v in config.items() if k in default_metrics_config.keys()
- }
- return eval_config, dataset_config, metrics_config
- def get_default_eval_config():
- """Returns the default config values for evaluation."""
- code_path = get_code_path()
- default_config = {
- "USE_PARALLEL": True,
- "NUM_PARALLEL_CORES": 8,
- "BREAK_ON_ERROR": True,
- "RETURN_ON_ERROR": False,
- "LOG_ON_ERROR": os.path.join(code_path, "error_log.txt"),
- "PRINT_RESULTS": True,
- "PRINT_ONLY_COMBINED": True,
- "PRINT_CONFIG": True,
- "TIME_PROGRESS": True,
- "DISPLAY_LESS_PROGRESS": True,
- "OUTPUT_SUMMARY": True,
- "OUTPUT_EMPTY_CLASSES": True,
- "OUTPUT_TEM_RAW_DATA": True,
- "OUTPUT_PER_SEQ_RES": True,
- }
- return default_config
- def get_default_dataset_config():
- """Default class config values"""
- code_path = get_code_path()
- default_config = {
- "GT_FOLDER": os.path.join(
- code_path, "data/gt/tao/tao_training"
- ), # Location of GT data
- "TRACKERS_FOLDER": os.path.join(
- code_path, "data/trackers/tao/tao_training"
- ), # Trackers location
- "OUTPUT_FOLDER": None, # Where to save eval results (if None, same as TRACKERS_FOLDER)
- "TRACKERS_TO_EVAL": ['TETer'], # Filenames of trackers to eval (if None, all in folder)
- "CLASSES_TO_EVAL": None, # Classes to eval (if None, all classes)
- "SPLIT_TO_EVAL": "training", # Valid: 'training', 'val'
- "PRINT_CONFIG": True, # Whether to print current config
- "TRACKER_SUB_FOLDER": "data", # Tracker files are in TRACKER_FOLDER/tracker_name/TRACKER_SUB_FOLDER
- "OUTPUT_SUB_FOLDER": "", # Output files are saved in OUTPUT_FOLDER/tracker_name/OUTPUT_SUB_FOLDER
- "TRACKER_DISPLAY_NAMES": None, # Names of trackers to display, if None: TRACKERS_TO_EVAL
- "MAX_DETECTIONS": 0, # Number of maximal allowed detections per image (0 for unlimited)
- "USE_MASK": False, # Whether to use mask data for evaluation
- }
- return default_config
- def init_config(config, default_config, name=None):
- """Initialize non-given config values with defaults."""
- if config is None:
- config = default_config
- else:
- for k in default_config.keys():
- if k not in config.keys():
- config[k] = default_config[k]
- if name and config["PRINT_CONFIG"]:
- print("\n%s Config:" % name)
- for c in config.keys():
- print("%-20s : %-30s" % (c, config[c]))
- return config
- def update_config(config):
- """
- Parse the arguments of a script and updates the config values for a given value if specified in the arguments.
- :param config: the config to update
- :return: the updated config
- """
- parser = argparse.ArgumentParser()
- for setting in config.keys():
- if type(config[setting]) == list or type(config[setting]) == type(None):
- parser.add_argument("--" + setting, nargs="+")
- else:
- parser.add_argument("--" + setting)
- args = parser.parse_args().__dict__
- for setting in args.keys():
- if args[setting] is not None:
- if type(config[setting]) == type(True):
- if args[setting] == "True":
- x = True
- elif args[setting] == "False":
- x = False
- else:
- raise Exception(
- "Command line parameter " + setting + "must be True or False"
- )
- elif type(config[setting]) == type(1):
- x = int(args[setting])
- elif type(args[setting]) == type(None):
- x = None
- else:
- x = args[setting]
- config[setting] = x
- return config
- def get_code_path():
- """Get base path where code is"""
- return os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
|