Message logger for printing. Args: opt (dict): Config. It contains the following keys: name (str): Exp name. logger (dict): Contains 'print_freq' (str) for logger interval. train (dict): Contains 'total_iter' (int) for total iters. use_tb_
| 43 | |
| 44 | |
| 45 | class MessageLogger(): |
| 46 | """Message logger for printing. |
| 47 | |
| 48 | Args: |
| 49 | opt (dict): Config. It contains the following keys: |
| 50 | name (str): Exp name. |
| 51 | logger (dict): Contains 'print_freq' (str) for logger interval. |
| 52 | train (dict): Contains 'total_iter' (int) for total iters. |
| 53 | use_tb_logger (bool): Use tensorboard logger. |
| 54 | start_iter (int): Start iter. Default: 1. |
| 55 | tb_logger (obj:`tb_logger`): Tensorboard logger. Default: None. |
| 56 | """ |
| 57 | |
| 58 | def __init__(self, opt, start_iter=1, tb_logger=None): |
| 59 | self.exp_name = opt['name'] |
| 60 | self.interval = opt['logger']['print_freq'] |
| 61 | self.start_iter = start_iter |
| 62 | self.max_iters = opt['train']['total_iter'] |
| 63 | self.use_tb_logger = opt['logger']['use_tb_logger'] |
| 64 | self.tb_logger = tb_logger |
| 65 | self.start_time = time.time() |
| 66 | self.logger = get_root_logger() |
| 67 | |
| 68 | def reset_start_time(self): |
| 69 | self.start_time = time.time() |
| 70 | |
| 71 | @master_only |
| 72 | def __call__(self, log_vars): |
| 73 | """Format logging message. |
| 74 | |
| 75 | Args: |
| 76 | log_vars (dict): It contains the following keys: |
| 77 | epoch (int): Epoch number. |
| 78 | iter (int): Current iter. |
| 79 | lrs (list): List for learning rates. |
| 80 | |
| 81 | time (float): Iter time. |
| 82 | data_time (float): Data time for each iter. |
| 83 | """ |
| 84 | # epoch, iter, learning rates |
| 85 | epoch = log_vars.pop('epoch') |
| 86 | current_iter = log_vars.pop('iter') |
| 87 | lrs = log_vars.pop('lrs') |
| 88 | |
| 89 | message = (f'[{self.exp_name[:5]}..][epoch:{epoch:3d}, iter:{current_iter:8,d}, lr:(') |
| 90 | for v in lrs: |
| 91 | message += f'{v:.3e},' |
| 92 | message += ')] ' |
| 93 | |
| 94 | # time and estimated time |
| 95 | if 'time' in log_vars.keys(): |
| 96 | iter_time = log_vars.pop('time') |
| 97 | data_time = log_vars.pop('data_time') |
| 98 | |
| 99 | total_time = time.time() - self.start_time |
| 100 | time_sec_avg = total_time / (current_iter - self.start_iter + 1) |
| 101 | eta_sec = time_sec_avg * (self.max_iters - current_iter - 1) |
| 102 | eta_str = str(datetime.timedelta(seconds=int(eta_sec))) |