快捷键

可视化

在阅读本教程之前,建议您阅读 MMEngine 的 可视化 文档,以初步了解 Visualizer 的定义和用法。

简而言之,MMEngine 中实现了 Visualizer 来满足日常可视化需求,它包含三个主要功能

  • 实现常见的绘图 API,例如 draw_bboxes 实现边界框绘制功能,draw_lines 实现线条绘制功能。

  • 支持将可视化结果、学习率曲线、损失函数曲线和验证精度曲线写入各种后端,包括本地磁盘以及常见的深度学习训练日志记录工具,如 TensorBoardWandb

  • 支持在代码中的任何位置调用,以在训练或测试期间可视化或记录模型的中间状态,例如特征图和验证结果。

基于 MMEngine 的 Visualizer,MMDet 附带了各种预构建的可视化工具,用户只需修改以下配置文件即可使用。

  • 脚本 tools/analysis_tools/browse_dataset.py 提供了数据集可视化功能,它可以绘制数据转换后的图像和相应的注释,如 browse_dataset.py 中所述。

  • MMEngine 实现了 LoggerHook,它使用 Visualizer 将学习率、损失和评估结果写入由 Visualizer 设置的后端。因此,通过在配置文件中修改 Visualizer 后端,例如,改为 TensorBoardVISBackendWandbVISBackend,您可以实现对常见训练日志记录工具(如 TensorBoardWandB)的日志记录,从而使用户能够轻松使用这些可视化工具来分析和监控训练过程。

  • MMDet 中实现了 VisualizerHook,它使用 Visualizer 将验证或预测阶段的预测结果可视化或存储到由 Visualizer 设置的后端,因此通过在配置文件中修改 Visualizer 后端,例如,改为 TensorBoardVISBackendWandbVISBackend,您可以实现将预测图像存储到 TensorBoardWandb 中。

配置

由于使用了注册机制,因此在 MMDet 中,我们可以通过修改配置文件来设置 Visualizer 的行为。通常,我们在 configs/_base_/default_runtime.py 中定义可视化器的默认配置,有关详细信息,请参见 配置教程

vis_backends = [dict(type='LocalVisBackend')]
visualizer = dict(
    type='DetLocalVisualizer',
    vis_backends=vis_backends,
    name='visualizer')

根据上面的例子,我们可以看到 Visualizer 的配置主要分为两个部分,即 Visualizer 的类型和它使用的可视化后端 vis_backends

  • 用户可以直接使用 DetLocalVisualizer 来可视化支持任务的标签或预测。

  • 默认情况下,MMDet 将可视化后端 vis_backend 设置为本地可视化后端 LocalVisBackend,将所有可视化结果和其他训练信息保存在本地文件夹中。

存储

默认情况下,MMDet 使用本地可视化后端 LocalVisBackend,模型损失、学习率、模型评估精度和可视化信息,包括 VisualizerHookLoggerHook 中存储的损失、学习率、评估精度,默认情况下将保存到 {work_dir}/{config_name}/{time}/{vis_data} 文件夹中。此外,MMDet 还支持其他常见的可视化后端,例如 TensorboardVisBackendWandbVisBackend,您只需在配置文件中将 vis_backends 类型更改为相应的可视化后端即可。例如,您可以通过将以下代码块插入到配置文件中,将数据存储到 TensorBoardWandb 中。

# https://mmengine.readthedocs.io/en/latest/api/visualization.html
_base_.visualizer.vis_backends = [
    dict(type='LocalVisBackend'), #
    dict(type='TensorboardVisBackend'),
    dict(type='WandbVisBackend'),]

绘制

绘制预测结果

MMDet 主要使用 DetVisualizationHook 来绘制验证和测试的预测结果,默认情况下,DetVisualizationHook 是关闭的,默认配置如下所示。

visualization=dict( # user visualization of validation and test results
    type='DetVisualizationHook',
    draw=False,
    interval=1,
    show=False)

下表显示了 DetVisualizationHook 支持的参数。

参数 描述
draw DetVisualizationHook 由 enable 参数控制启用和禁用,这是默认状态。
interval 控制在启用 VisualizationHook 的情况下,存储或显示 val 或 test 结果的迭代次数。
show 控制是否可视化 val 或 test 的结果。

如果您想在训练或测试期间启用 DetVisualizationHook 相关功能和配置,您只需修改配置,以 configs/rtmdet/rtmdet_tiny_8xb32-300e_coco.py 为例,同时绘制注释和预测,并显示图像,可以将配置修改为如下所示

visualization = _base_.default_hooks.visualization
visualization.update(dict(draw=True, show=True))

通过提供 --show--show-dir 参数进一步简化了 test.py 程序,以便在测试期间可视化注释和预测结果,而无需修改配置。

# Show test results
python tools/test.py configs/rtmdet/rtmdet_tiny_8xb32-300e_coco.py https://download.openmmlab.com/mmdetection/v3.0/rtmdet/rtmdet_tiny_8xb32-300e_coco/rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth --show

# Specify where to store the prediction results
python tools/test.py configs/rtmdet/rtmdet_tiny_8xb32-300e_coco.py https://download.openmmlab.com/mmdetection/v3.0/rtmdet/rtmdet_tiny_8xb32-300e_coco/rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth --show-dir imgs/