首页 > 其他 > 详细

【MMDET】log_config

时间:2021-04-23 00:02:45      阅读:33      评论:0      收藏:0      [点我收藏+]

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 包下,包括:

  • MlflowLoggerHook

MLflow 是用于管理机器学习生命周期的开源平台。

  • PaviLoggerHook

没找到 pavi 这个包。

  • TensorboardLoggerHook

TensorBoard 是 TensorFlow 的机器学习可视化工具包。我一般用这个。

  • TextLoggerHook

最常用的文本日志,会打印到终端并保存到 JSON 文件中。

  • WandbLoggerHook

wandb 是类似于 TensorBoard 的轻量级可视化工具包。

综上,一般会用到 TextLoggerHook 和 TensorboardLoggerHook。

TextLoggerHook

@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。
    """
  • by_epoch:保持默认即可
  • interval:50 即可
  • ignore_last:可以忽略,保持默认
  • reset_flag:保持默认
  • interval_exp_name:保持默认

所以如果使用 TextLoggerHook,不需要在 hooks 中传入额外的参数。

TensorboardLoggerHook

@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 相比,额外的参数是:

  • log_dir:存放 TensorBoard 日志文件的目录,如果不执行,默认使用 runner 的 work_dir 下的 tf_logs 目录,默认即可

所以使用 TensorboardLoggerHook 也不需要在 hooks 中传入额外的参数。

综上,log_config 的一般写法:

log_config = dict(
    interval=50,
    hooks=[
        dict(type=‘TextLoggerHook‘),
        dict(type=‘TensorboardLoggerHook‘)
    ])

由于可视化几乎每次实验都会用到,所以直接把 default_runtime.py 中的 TensorboardLoggerHook 取消注释,不用在每个配置文件都重写一遍了。

【MMDET】log_config

原文:https://www.cnblogs.com/huzheyu/p/mmdet-log-config.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!