mmsegmentation基础使用学习笔记(四)——常用工具&可视化

文件路径:mmsegmentation\docs\zh_cn\user_guides\useful_tools.md

                  mmsegmentation\docs\zh_cn\user_guides\visualization.md

一、常用工具

1、计算参数量和计算量

python tools/get_flops.py ${CONFIG_FILE} [--shape ${INPUT_SHAPE}]

计算量和输入图片尺寸有关,参数量与输入无关

2、查看代码的fps(img/s)

python tools/benchmark.py ${CONFIG_FILE}   ${权重路径} 

3、对训练日志画图

tools/analyze_logs.py 会画出给定的训练日志文件的 loss/mIoU 曲线,首先需要 pip install seaborn 安装依赖包。

(1)对 mIoU, mAcc, aAcc 指标画图

python tools/analyze_logs.py log.json --keys mIoU mAcc aAcc --legend mIoU mAcc aAcc

(2)对 loss 指标画图

python tools/analyze_logs.py log.json --keys loss --legend loss

4、转换其他仓库的权重

二、可视化

1、使用TensorBoard监控训练状态

2、数据和结果可视化

(1)模型测试或验证期间的可视化数据样本

SegVisualizationHook 是一个可以用于可视化 ground truth 和在模型测试和验证期间的预测分割结果的钩子。它的配置在 default_hooks 中,更多详细信息请参见 执行器教程。

例如,在 _base_/schedules/schedule_20k.py 中,修改 SegVisualizationHook 配置,将 draw 设置为 True 以启用网络推理结果的存储,interval 表示预测结果的采样间隔, 设置为 1 时,将保存网络的每个推理结果。 interval 默认设置为 50:

default_hooks = dict(
    timer=dict(type='IterTimerHook'),
    logger=dict(type='LoggerHook', interval=50, log_metric_by_epoch=False),
    param_scheduler=dict(type='ParamSchedulerHook'),
    checkpoint=dict(type='CheckpointHook', by_epoch=False, interval=2000),
    sampler_seed=dict(type='DistSamplerSeedHook'),
    visualization=dict(type='SegVisualizationHook', draw=True, interval=1))

预测结果会被保存在 $WORK_DIRS/vis_data 下的 vis_image 中。

另外,如果在 vis_backends 中添加 TensorboardVisBackend ,如 TensorBoard 的配置,我们还可以运行下面的命令在 TensorBoard 中查看它们:

tensorboard --logdir work_dirs/test_visual/20220810_115248/vis_data

(2)可视化单个数据样本

如果想可视化单个样本数据,我们建议使用 SegLocalVisualizer 。SegLocalVisualizer是继承自 MMEngine 中Visualizer 类的子类,适用于 MMSegmentation 可视化。

首先准备好图片,然后可以找到图片本地的路径并使用下面的脚本文件对其进行可视化:

import mmcv
import os.path as osp
import torch

from mmengine.structures import PixelData

# `PixelData` 是 MMEngine 中用于定义像素级标注或预测的数据结构。
# 请参考下面的MMEngine数据结构教程文件:
# https://mmengine.readthedocs.io/zh_CN/latest/advanced_tutorials/data_element.html#pixeldata

from mmseg.structures import SegDataSample

# `SegDataSample` 是在 MMSegmentation 中定义的不同组件之间的数据结构接口,
# 它包括 ground truth、语义分割的预测结果和预测逻辑。
# 详情请参考下面的 `SegDataSample` 教程文件:
# https://github.com/open-mmlab/mmsegmentation/blob/1.x/docs/en/advanced_guides/structures.md


from mmseg.visualization import SegLocalVisualizer

out_file = 'out_file_cityscapes'
save_dir = './work_dirs'

image = mmcv.imread(
    osp.join(
        osp.dirname(__file__),
        './aachen_000000_000019_leftImg8bit.png'
    ),
    'color')
sem_seg = mmcv.imread(
    osp.join(
        osp.dirname(__file__),
        './aachen_000000_000019_gtFine_labelTrainIds.png'  # noqa
    ),
    '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=save_dir)

# 数据集的元信息通常包括类名的 `classes` 和
# 用于可视化每个前景颜色的 `palette` 。
# 所有类名和调色板都在此文件中定义:
# https://github.com/open-mmlab/mmsegmentation/blob/1.x/mmseg/utils/class_names.py

# 类别的名称和表示颜色是一一对应的

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]])

# 当`show=True`时,直接显示结果,
# 当 `show=False`时,结果将保存在本地文件夹中。

seg_local_visualizer.add_datasample(out_file, image, data_sample, show=False)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

还会长的桔子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值