MMSegmentation 1.x 可视化功能详解
前言
在深度学习模型的开发过程中,可视化是一个非常重要的环节。通过可视化,我们可以直观地了解模型的训练状态、数据分布以及预测结果。MMSegmentation 1.x 提供了丰富的可视化功能,本文将详细介绍如何使用这些功能来监控训练状态和可视化数据及预测结果。
训练状态监控
TensorBoard 配置
TensorBoard 是 TensorFlow 提供的一个可视化工具,可以用于监控训练过程中的各种指标。在 MMSegmentation 中,我们可以通过以下步骤配置 TensorBoard:
- 首先安装 TensorBoard 相关依赖:
pip install tensorboardX
pip install future tensorboard
- 修改配置文件
default_runtime.py,添加 TensorBoard 可视化后端:
vis_backends = [dict(type='LocalVisBackend'),
dict(type='TensorboardVisBackend')]
visualizer = dict(
type='SegLocalVisualizer', vis_backends=vis_backends, name='visualizer')
查看 TensorBoard 中的标量数据
启动训练后,训练日志会保存在 work_dir 下的 vis_data 目录中。我们可以使用以下命令启动 TensorBoard 服务器:
tensorboard --logdir work_dirs/test_visual/20220810_115248/vis_data
在 TensorBoard 中,我们可以查看以下信息:
- 学习率变化曲线
- 各种损失值的变化
- 数据处理时间
- 评估指标结果
数据和结果可视化
测试/验证过程中的可视化
MMSegmentation 提供了 SegVisualizationHook 钩子,可以在模型测试和评估过程中可视化真实标签和预测结果。在配置文件中修改 default_hooks 部分:
default_hooks = dict(
visualization=dict(type='SegVisualizationHook', draw=True, interval=1))
参数说明:
draw=True:启用保存网络推理结果interval=1:保存每次推理结果(默认值为50)
可视化结果会保存在 work_dirs/vis_data/vis_image 目录下。如果配置了 TensorBoard 后端,也可以通过 TensorBoard 查看这些结果。
单样本可视化
对于单个数据样本的可视化,我们可以使用 SegLocalVisualizer。下面是一个完整的示例代码:
import mmcv
import torch
from mmengine.structures import PixelData
from mmseg.structures import SegDataSample
from mmseg.visualization import SegLocalVisualizer
# 准备数据
image = mmcv.imread('aachen_000000_000019_leftImg8bit.png', 'color')
sem_seg = mmcv.imread('aachen_000000_000019_gtFine_labelTrainIds.png', 'unchanged')
sem_seg = torch.from_numpy(sem_seg)
# 创建数据样本
gt_sem_seg_data = dict(data=sem_seg)
gt_sem_seg = PixelData(**gt_sem_seg_data)
data_sample = SegDataSample()
data_sample.gt_sem_seg = gt_sem_seg
# 初始化可视化器
seg_local_visualizer = SegLocalVisualizer(
vis_backends=[dict(type='LocalVisBackend')],
save_dir='./work_dirs')
# 设置数据集元信息
seg_local_visualizer.dataset_meta = dict(
classes=('road', 'sidewalk', 'building', 'wall', 'fence',
'pole', 'traffic light', 'traffic sign',
'vegetation', 'terrain', 'sky', 'person', 'rider',
'car', 'truck', 'bus', 'train', 'motorcycle',
'bicycle'),
palette=[[128, 64, 128], [244, 35, 232], [70, 70, 70],
[102, 102, 156], [190, 153, 153], [153, 153, 153],
[250, 170, 30], [220, 220, 0], [107, 142, 35],
[152, 251, 152], [70, 130, 180], [220, 20, 60],
[255, 0, 0], [0, 0, 142], [0, 0, 70],
[0, 60, 100], [0, 80, 100], [0, 0, 230],
[119, 11, 32]])
# 可视化并保存结果
seg_local_visualizer.add_datasample('out_file_cityscapes',
image, data_sample, show=False)
这段代码会生成一个可视化结果,包含原始图像和对应的语义分割标签,保存到 ./work_dirs/vis_data/vis_image/ 目录下。
可视化技巧与最佳实践
-
训练监控:建议在训练初期密切监控损失曲线,确保损失值正常下降。如果发现异常(如损失值突然上升或变为NaN),可能需要调整学习率或检查数据。
-
结果分析:在验证过程中,可以定期查看模型预测结果,特别关注模型在哪些类别上表现不佳,这有助于针对性改进模型。
-
类别平衡:通过可视化可以直观地看到各类别的分布情况,对于类别不平衡的数据集,可以考虑使用加权损失函数。
-
超参数调优:通过观察学习率曲线,可以判断当前学习率是否合适。如果损失值波动过大,可能需要降低学习率;如果下降过慢,则可以适当提高学习率。
结语
MMSegmentation 提供的可视化工具能够帮助我们更好地理解和优化模型。通过合理利用这些工具,我们可以更高效地进行模型开发和调试工作。建议在实际项目中结合多种可视化手段,全面监控模型性能。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



