mmsegmentation 可视化:一条命令看清语义分割模型学到什么 📅 发布时间:2026/9/17 5:42:22 👁 浏览次数: mmsegmentation 可视化:一条命令看清语义分割模型学到什么【免费下载链接】mmsegmentationOpenMMLab Semantic Segmentation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmsegmentation训练日志只有一串数字,你很难判断模型到底哪学错了。这篇带你用 mmsegmentation 自带的可视化工具,几分钟内拿到预测掩码给每个像素打上类别颜色标签的图与真实标注的叠加图,直接定位模型的短板。分清 SegLocalVisualizer 能画什么、不能画什么核心组件是 mmseg/visualization/local_visualizer.py 里的SegLocalVisualizer类,它继承自 MMEngine 的Visualizer,专门适配了语义分割任务。它覆盖的能力:把预测掩码按类别调色板渲染,再与原图按透明度混合,一眼看出分割对不对with_labelsTrue时,在掩块质心位置叠加类别名文本GT 和预测同时存在时,左右拼接成一张对比图额外支持深度图渲染(_draw_depth_map),做深度估计任务时可用它不画损失曲线和指标曲线。标量类记录走 TensorBoard,这个类只负责像素级的图像渲染,别指望它替代日志分析。一条命令跑通单图分割可视化仓库里现成的入口是 demo/image_demo_with_inferencer.py,内部封装了 mmseg/apis/mmseg_inferencer.py 的MMSegInferencer。复制下面这条命令即可(权重换成你本地的 .pth 路径):python demo/image_demo_with_inferencer.py \ demo/classroom__rgb_00283.jpg \ configs/fcn/fcn_r50-d8_4xb2-40k_cityscapes-512x1024.py \ --checkpoint path/to/fcn_r50-d8_512x1024_40k_cityscapes.pth \ --out-dir ./vis_result --opacity 0.7 --with-labels关键参数拆解(默认值均取自该脚本的 argparse 定义):参数作用默认值--show弹窗实时显示渲染结果False--out-dir渲染图保存目录,不传则不落盘空(不保存)--opacity掩码混合透明度,取值 (0, 1]0.5--with-labels在掩块上叠加类别名False--dataset-name按数据集名加载类名与调色板cityscapes推理完成后,MMSegInferencer.visualize会调用SegLocalVisualizer.add_datasample,把渲染图写进--out-dir。想换模型,把 config 和权重换成configs/下任意一组预训练配置即可。把可视化挂进训练流程训练侧不用从零搭。configs/base/default_runtime.py 已声明SegLocalVisualizer和LocalVisBackend,configs/base/schedules/schedule_20k.py 的default_hooks里也有SegVisualizationHook,只是默认只画不存。你在自己的配置里覆盖这一项:default_hooks dict( timerdict(typeIterTimerHook), loggerdict(typeLoggerHook, interval50, log_metric_by_epochFalse), checkpointdict(typeCheckpointHook, by_epochFalse, interval2000), visualizationdict(typeSegVisualizationHook, drawTrue, interval1))drawTrue后,钩子会在每次验证循环和评估时触发渲染;interval1表示每个样本都画,嫌多就调大。落盘位置固定:$WORK_DIRS/vis_data/vis_image下按step编号存图,配合 tools/train.py 启动训练即可,无需额外代码。从叠加图里读出 3 个调优信号 渲染图不是给你欣赏的,每次抽检 10 张左右,重点盯三处:看到什么:预测与 GT 在物体边缘错位一圈 →说明什么:网络对边界定位偏弱,常发生在高频纹理区域 →你该怎么做:换更高分辨率训练,或引入对边界更敏感的损失(如 Tversky Loss),再回看该区域。看到什么:某一类(如 rider、traffic light)整片缺失或大面积串色到背景 →说明什么:该类样本不足或权重被稀释 →你该怎么做:先查该类样本量,再考虑 class-wise 加权损失或针对性裁剪增强,而不是盲目加大 batch。看到什么:颜色明显串位,比如道路画成了天空的蓝 →说明什么:调色板与类别表顺序没对齐,渲染元信息来自错误的数据集 →你该怎么做:显式传--dataset-name,或确认 checkpoint 的 meta 里保存了正确的dataset_meta,再重新渲染验证。自定义调色板,避开两个常见坑如果你的数据集不在内置名单里,直接给可视器设置classes和palette(两者长度必须一致):from mmseg.visualization import SegLocalVisualizer viz SegLocalVisualizer() viz.set_dataset_meta( classes[road, building, vegetation], palette[[128, 64, 128], [244, 35, 232], [107, 142, 35]])两个最容易踩的坑:漏传--dataset-name导致颜色错位。checkpoint 里没存类别信息时,代码会回退到 Cityscapes 的类别表并打 warning,自训练数据集的渲染颜色全部对不上。规避:命令行显式指定数据集名。--show与落盘互斥。add_datasample的文档写明:一旦showTrue,所有存储后端都会被忽略,窗口关了图就没了。要存档就去掉--show,改用--out-dir。收尾建议先用上面的单图命令确认你的权重和调色板渲染正常,再把SegVisualizationHook的drawTrue挂进训练配置,定期翻vis_data/vis_image抽检,比空盯日志高效得多。可视化完整教程: docs/zh_cn/user_guides/visualization.md可视化工具源码: mmseg/visualization/local_visualizer.py默认运行时配置: configs/base/default_runtime.py【免费下载链接】mmsegmentationOpenMMLab Semantic Segmentation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmsegmentation创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考