文件路径: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 torchfrom mmengine.structures import PixelData
# `PixelData` 是 MMEngine 中用于定义像素级标注或预测的数据结构。
# 请参考下面的MMEngine数据结构教程文件:
# https://mmengine.readthedocs.io/zh_CN/latest/advanced_tutorials/data_element.html#pixeldatafrom 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 SegLocalVisualizerout_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_segseg_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)