Spaces:
Running
Running
| import logging | |
| class Logger(object): | |
| def __init__(self, txt_path): | |
| root_logger = logging.getLogger() | |
| for handler in root_logger.handlers[:]: | |
| root_logger.removeHandler(handler) | |
| root_logger.setLevel(logging.WARNING) | |
| self.txt_path = txt_path | |
| self.logger = logging.getLogger('train') | |
| self.formatter = logging.Formatter('%(asctime)s.%(msecs)03d - %(levelname)s: %(message)s', datefmt='%y-%m-%d %H:%M:%S') | |
| self.logger.setLevel(logging.INFO) | |
| def __console(self, level, message): | |
| root_logger = logging.getLogger() | |
| for handler in root_logger.handlers[:]: | |
| root_logger.removeHandler(handler) | |
| file_handler = logging.FileHandler(self.txt_path, mode='a') | |
| console_handler = logging.StreamHandler() | |
| file_handler.setFormatter(self.formatter) | |
| console_handler.setFormatter(self.formatter) | |
| self.logger.addHandler(file_handler) | |
| self.logger.addHandler(console_handler) | |
| if level == 'info': | |
| self.logger.info(message) | |
| elif level == 'debug': | |
| self.logger.debug(message) | |
| elif level == 'warning': | |
| self.logger.warning(message) | |
| elif level == 'error': | |
| self.logger.error(message) | |
| self.logger.removeHandler(file_handler) | |
| self.logger.removeHandler(console_handler) | |
| file_handler.close() | |
| def debug(self, message): | |
| self.__console('debug', message) | |
| def info(self, message): | |
| self.__console('info', message) | |
| def warning(self, message): | |
| self.__console('warning', message) | |
| def error(self, message): | |
| self.__console('error', message) | |
| def log_metrics(metrics, logger, tensorboard_logger, epoch): | |
| def log_single_class(data, tag): | |
| logger.info( | |
| '{:>15} \t\tI-Auroc:{:.2f} \tI-F1:{:.2f} \tI-AP:{:.2f} \tP-Auroc:{:.2f} \tP-F1:{:.2f} \tP-AP:{:.2f}'. | |
| format(tag, | |
| data['auroc_im'], | |
| data['f1_im'], | |
| data['ap_im'], | |
| data['auroc_px'], | |
| data['f1_px'], | |
| data['ap_px']) | |
| ) | |
| # Adding scalar metrics to TensorBoard | |
| for metric_name in ['auroc_im', 'f1_im', 'ap_im', 'auroc_px', 'f1_px', 'ap_px']: | |
| tensorboard_logger.add_scalar(f'{tag}-{metric_name}', data[metric_name], epoch) | |
| for tag, data in metrics.items(): | |
| log_single_class(data, tag) | |