log_config 是 default_runtime.py 中的第二个变量,也是一个字典,有两个字段:interval 和 hooks。
log_config = dict(
# 每隔几个iter保存一次日志信息
interval=50,
hooks=[
dict(type=‘TextLoggerHook‘),
# dict(type=‘TensorboardLoggerHook‘)
])
interval 表示每隔几个 iter 保存一次日志文件,hooks 是一个列表,每个元素又是一个字典,表示一个日志钩子的配置。
注册日志钩子的代码比较短:
def register_logger_hooks(self, log_config):
"""注册日志钩子"""
if log_config is None:
return
# 每隔几个iter保存一次日志信息,用于所有日志钩子
log_interval = log_config[‘interval‘]
# 构建并注册所有钩子
for info in log_config[‘hooks‘]:
logger_hook = mmcv.build_from_cfg(
info, HOOKS, default_args=dict(interval=log_interval))
# 最低优先级
self.register_hook(logger_hook, priority=‘VERY_LOW‘)
MMCV 支持的日志钩子在 mmcv.runner.hooks.logger 包下,包括:
MLflow 是用于管理机器学习生命周期的开源平台。
没找到 pavi 这个包。
TensorBoard 是 TensorFlow 的机器学习可视化工具包。我一般用这个。
最常用的文本日志,会打印到终端并保存到 JSON 文件中。
wandb 是类似于 TensorBoard 的轻量级可视化工具包。
综上,一般会用到 TextLoggerHook 和 TensorboardLoggerHook。
@HOOKS.register_module()
class TextLoggerHook(LoggerHook):
"""Logger hook in text.
文本日志的钩子。
In this logger hook, the information will be printed on terminal and
saved in json file.
日志信息会打印在终端并保存到JSON文件中。
Args:
by_epoch (bool): Whether EpochBasedRunner is used.
是否使用EpochBasedRunner。默认使用。
interval (int): Logging interval (every k iterations).
每隔几个iter(不是epoch)打印一次日志。默认是10。
ignore_last (bool): Ignore the log of last iterations in each epoch
if less than `interval`.
忽略每个epoch中最后一个iter的日志。默认忽略。
reset_flag (bool): Whether to clear the output buffer after logging.
是否在输出日志后清除缓存。默认不清除。
interval_exp_name (int): Logging interval for experiment name. This
feature is to help users conveniently get the experiment
information from screen or log file. Default: 1000.
每隔几个iter打印一次当前实验名称。默认是1000。
"""
所以如果使用 TextLoggerHook,不需要在 hooks 中传入额外的参数。
@HOOKS.register_module()
class TensorboardLoggerHook(LoggerHook):
"""TensorBoard
参数:
log_dir: 存放日志文件的目录,默认是None。
"""
def __init__(self,
log_dir=None,
interval=10,
ignore_last=True,
reset_flag=True,
by_epoch=True):
super(TensorboardLoggerHook, self).__init__(interval, ignore_last,
reset_flag, by_epoch)
self.log_dir = log_dir
与基类 LoggerHook 相比,额外的参数是:
所以使用 TensorboardLoggerHook 也不需要在 hooks 中传入额外的参数。
综上,log_config 的一般写法:
log_config = dict(
interval=50,
hooks=[
dict(type=‘TextLoggerHook‘),
dict(type=‘TensorboardLoggerHook‘)
])
由于可视化几乎每次实验都会用到,所以直接把 default_runtime.py 中的 TensorboardLoggerHook 取消注释,不用在每个配置文件都重写一遍了。
原文:https://www.cnblogs.com/huzheyu/p/mmdet-log-config.html