Spaces:
Runtime error
Runtime error
| #!/usr/bin/env python3 | |
| import glob | |
| import os | |
| import re | |
| import tensorflow as tf | |
| from torch.utils.tensorboard import SummaryWriter | |
| GROUPING_RULES = [ | |
| re.compile(r'^(?P<group>train|test|val|extra_val_.*?(256|512))_(?P<title>.*)', re.I) | |
| ] | |
| DROP_RULES = [ | |
| re.compile(r'_std$', re.I) | |
| ] | |
| def need_drop(tag): | |
| for rule in DROP_RULES: | |
| if rule.search(tag): | |
| return True | |
| return False | |
| def get_group_and_title(tag): | |
| for rule in GROUPING_RULES: | |
| match = rule.search(tag) | |
| if match is None: | |
| continue | |
| return match.group('group'), match.group('title') | |
| return None, None | |
| def main(args): | |
| os.makedirs(args.outdir, exist_ok=True) | |
| ignored_events = set() | |
| for orig_fname in glob.glob(args.inglob): | |
| cur_dirpath = os.path.dirname(orig_fname) # remove filename, this should point to "version_0" directory | |
| subdirname = os.path.basename(cur_dirpath) # == "version_0" most of time | |
| exp_root_path = os.path.dirname(cur_dirpath) # remove "version_0" | |
| exp_name = os.path.basename(exp_root_path) | |
| writers_by_group = {} | |
| for e in tf.compat.v1.train.summary_iterator(orig_fname): | |
| for v in e.summary.value: | |
| if need_drop(v.tag): | |
| continue | |
| cur_group, cur_title = get_group_and_title(v.tag) | |
| if cur_group is None: | |
| if v.tag not in ignored_events: | |
| print(f'WARNING: Could not detect group for {v.tag}, ignoring it') | |
| ignored_events.add(v.tag) | |
| continue | |
| cur_writer = writers_by_group.get(cur_group, None) | |
| if cur_writer is None: | |
| if args.include_version: | |
| cur_outdir = os.path.join(args.outdir, exp_name, f'{subdirname}_{cur_group}') | |
| else: | |
| cur_outdir = os.path.join(args.outdir, exp_name, cur_group) | |
| cur_writer = SummaryWriter(cur_outdir) | |
| writers_by_group[cur_group] = cur_writer | |
| cur_writer.add_scalar(cur_title, v.simple_value, global_step=e.step, walltime=e.wall_time) | |
| if __name__ == '__main__': | |
| import argparse | |
| aparser = argparse.ArgumentParser() | |
| aparser.add_argument('inglob', type=str) | |
| aparser.add_argument('outdir', type=str) | |
| aparser.add_argument('--include-version', action='store_true', | |
| help='Include subdirectory name e.g. "version_0" into output path') | |
| main(aparser.parse_args()) | |