|
|
|
|
|
|
|
|
|
|
|
"""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" |
|
|
), |
|
|
"TRACKERS_FOLDER": os.path.join( |
|
|
code_path, "data/trackers/tao/tao_training" |
|
|
), |
|
|
"OUTPUT_FOLDER": None, |
|
|
"TRACKERS_TO_EVAL": ['TETer'], |
|
|
"CLASSES_TO_EVAL": None, |
|
|
"SPLIT_TO_EVAL": "training", |
|
|
"PRINT_CONFIG": True, |
|
|
"TRACKER_SUB_FOLDER": "data", |
|
|
"OUTPUT_SUB_FOLDER": "", |
|
|
"TRACKER_DISPLAY_NAMES": None, |
|
|
"MAX_DETECTIONS": 0, |
|
|
"USE_MASK": False, |
|
|
} |
|
|
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__), "..")) |
|
|
|