在阅读本教程之前,建议先阅读 MMEngine 的 Visualization 文档,以对 Visualizer
的定义和用法有一个初步的了解。
简而言之,Visualizer
在 MMEngine 中实现以满足日常可视化需求,并包含以下三个主要功能:
draw_bboxes
实现了绘制边界框的功能,draw_lines
实现了绘制线条的功能。基于 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
来可视化支持任务的标签或预测结果。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( #用户可视化验证和测试结果
type='DetVisualizationHook',
draw=False,
interval=1,
show=False)
以下表格展示了DetVisualizationHook
支持的参数。
参数 | 描述 |
---|---|
draw | DetVisualizationHook通过enable参数打开和关闭,默认状态为关闭。 |
interval | 控制在DetVisualizationHook启用时存储或显示验证或测试结果的间隔,单位为迭代次数。 |
show | 控制是否可视化验证或测试的结果。 |
如果您想在训练或测试期间启用 DetVisualizationHook
相关功能和配置,您只需要修改配置文件,以 configs/rtmdet/rtmdet_tiny_8xb32-300e_coco.py
为例,同时绘制注释和预测,并显示图像,配置文件可以修改如下:
visualization = _base_.default_hooks.visualization
visualization.update(dict(draw=True, show=True))
test.py
程序提供了--show
和--show-dir
参数,可以在测试过程中可视化注释和预测结果,而不需要修改配置文件,从而进一步简化了测试过程。
# 展示测试结果
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
# 指定存储预测结果的位置
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/