65 lines
1.9 KiB
Python
65 lines
1.9 KiB
Python
# Copyright (c) OpenMMLab. All rights reserved.
|
|
import json
|
|
import logging
|
|
from collections import defaultdict
|
|
|
|
from mmengine.logging import MMLogger
|
|
|
|
|
|
def get_root_logger(log_file=None, log_level=logging.INFO):
|
|
"""Get root logger.
|
|
|
|
Args:
|
|
log_file (str, optional): File path of log. Defaults to None.
|
|
log_level (int, optional): The level of logger.
|
|
Defaults to :obj:`logging.INFO`.
|
|
|
|
Returns:
|
|
:obj:`logging.Logger`: The obtained logger
|
|
"""
|
|
try:
|
|
return MMLogger.get_instance(
|
|
'mmcls',
|
|
logger_name='mmcls',
|
|
log_file=log_file,
|
|
log_level=log_level)
|
|
except AssertionError:
|
|
# if root logger already existed, no extra kwargs needed.
|
|
return MMLogger.get_instance('mmcls')
|
|
|
|
|
|
def load_json_log(json_log):
|
|
"""load and convert json_logs to log_dicts.
|
|
|
|
Args:
|
|
json_log (str): The path of the json log file.
|
|
|
|
Returns:
|
|
dict[int, dict[str, list]]:
|
|
Key is the epoch, value is a sub dict. The keys in each sub dict
|
|
are different metrics, e.g. memory, bbox_mAP, and the value is a
|
|
list of corresponding values in all iterations in this epoch.
|
|
|
|
.. code-block:: python
|
|
|
|
# An example output
|
|
{
|
|
1: {'iter': [100, 200, 300], 'loss': [6.94, 6.73, 6.53]},
|
|
2: {'iter': [100, 200, 300], 'loss': [6.33, 6.20, 6.07]},
|
|
...
|
|
}
|
|
"""
|
|
log_dict = dict()
|
|
with open(json_log, 'r') as log_file:
|
|
for line in log_file:
|
|
log = json.loads(line.strip())
|
|
# skip lines without `epoch` field
|
|
if 'epoch' not in log:
|
|
continue
|
|
epoch = log.pop('epoch')
|
|
if epoch not in log_dict:
|
|
log_dict[epoch] = defaultdict(list)
|
|
for k, v in log.items():
|
|
log_dict[epoch][k].append(v)
|
|
return log_dict
|