可视化¶
在阅读本教程之前,建议您阅读 MMEngine 的 可视化 文档,以初步了解 Visualizer
的定义和用法。
简而言之,MMEngine 中实现了 Visualizer
来满足日常可视化需求,它包含三个主要功能
实现常见的绘图 API,例如
draw_bboxes
实现边界框绘制功能,draw_lines
实现线条绘制功能。支持将可视化结果、学习率曲线、损失函数曲线和验证精度曲线写入各种后端,包括本地磁盘以及常见的深度学习训练日志记录工具,如 TensorBoard 和 Wandb。
支持在代码中的任何位置调用,以在训练或测试期间可视化或记录模型的中间状态,例如特征图和验证结果。
基于 MMEngine 的 Visualizer,MMDet 附带了各种预构建的可视化工具,用户只需修改以下配置文件即可使用。
脚本
tools/analysis_tools/browse_dataset.py
提供了数据集可视化功能,它可以绘制数据转换后的图像和相应的注释,如browse_dataset.py
中所述。MMEngine 实现了
LoggerHook
,它使用Visualizer
将学习率、损失和评估结果写入由Visualizer
设置的后端。因此,通过在配置文件中修改Visualizer
后端,例如,改为TensorBoardVISBackend
或WandbVISBackend
,您可以实现对常见训练日志记录工具(如TensorBoard
或WandB
)的日志记录,从而使用户能够轻松使用这些可视化工具来分析和监控训练过程。MMDet 中实现了
VisualizerHook
,它使用Visualizer
将验证或预测阶段的预测结果可视化或存储到由Visualizer
设置的后端,因此通过在配置文件中修改Visualizer
后端,例如,改为TensorBoardVISBackend
或WandbVISBackend
,您可以实现将预测图像存储到TensorBoard
或Wandb
中。
配置¶
由于使用了注册机制,因此在 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
,模型损失、学习率、模型评估精度和可视化信息,包括 VisualizerHook
和 LoggerHook
中存储的损失、学习率、评估精度,默认情况下将保存到 {work_dir}/{config_name}/{time}/{vis_data}
文件夹中。此外,MMDet 还支持其他常见的可视化后端,例如 TensorboardVisBackend
和 WandbVisBackend
,您只需在配置文件中将 vis_backends
类型更改为相应的可视化后端即可。例如,您可以通过将以下代码块插入到配置文件中,将数据存储到 TensorBoard
和 Wandb
中。
# 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/
