MMSegmentation 可视化完全指南:TensorBoard 训练监控、验证结果与单样本可视化

发布时间:2026/11/10 9:44:42

MMSegmentation 可视化完全指南:TensorBoard 训练监控、验证结果与单样本可视化 MMSegmentation 可视化完全指南TensorBoard 训练监控、验证结果与单样本可视化【免费下载链接】mmsegmentationOpenMMLab Semantic Segmentation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmsegmentationMMSegmentation 1.x 内置了一整套可视化能力覆盖模型开发全流程训练期间借助 TensorBoard 实时监控学习率、损失与指标曲线验证与测试阶段通过SegVisualizationHook自动保存网络预测结果并支持用SegLocalVisualizer对单张图像进行精细化的语义分割可视化。本文以官方用户指南为骨架结合仓库源码逐层剖析可视化组件的配置方式、调用链与底层原理读完即可在自己的训练与推理脚本中直接落地使用。一、MMSegmentation 可视化体系总览在 MMSegmentation 1.x 中可视化功能主要由三个层次构成VisBackend可视化后端定义可视化结果的输出目的地包括保存到本地文件夹的LocalVisBackend、写入 TensorBoard 的TensorboardVisBackend等在配置文件中的vis_backends列表里声明。Visualizer可视化器真正负责画图的组件。MMSegmentation 在 MMEngineVisualizer基础上扩展出SegLocalVisualizer支持绘制语义分割掩膜、深度图与类别标签。Hook钩子在训练/验证/测试流程的特定时机自动触发可视化即SegVisualizationHook挂在default_hooks中。三者配合构成了后端声明输出位置、可视化器负责绘制、钩子自动触发的完整链路。默认配置可见 configs/base/default_runtime.py其中只启用了本地后端vis_backends [dict(typeLocalVisBackend)] visualizer dict( typeSegLocalVisualizer, vis_backendsvis_backends, namevisualizer)二、训练状态监控接入 TensorBoard2.1 安装与配置 TensorBoard 后端MMSegmentation 1.x 使用 TensorBoard 监控训练状态。首先按官方指引安装依赖pip install tensorboardX pip install future tensorboard然后在配置文件的vis_backends中加入TensorboardVisBackend即可同时向本地和 TensorBoard 输出。以 configs/base/default_runtime.py 中的visualizer配置为模板修改为vis_backends [dict(typeLocalVisBackend), dict(typeTensorboardVisBackend)] visualizer dict( typeSegLocalVisualizer, vis_backendsvis_backends, namevisualizer)其中typeSegLocalVisualizer指向 mmseg/visualization/local_visualizer.py 中通过VISUALIZERS.register_module()注册的组件namevisualizer供 Runner 与 Hook 通过Visualizer.get_current_instance()获取全局实例见 mmseg/engine/hooks/visualization_hook.py。2.2 启动训练并定位 vis_data 目录以 PSPNet 在 ADE20K 上的实验为例python tools/train.py configs/pspnet/pspnet_r50-d8_4xb4-80k_ade20k-512x512.py --work-dir work_dir/test_visual训练开始后在work_dir下会生成以时间戳命名的子目录其中包含vis_data文件夹。以官方文档示例为例其路径形如work_dirs/test_visual/20220810_115248/vis_datavis_data目录中保存的标量文件scalars包括学习率lr、各类损失loss与数据加载耗时data_time等同时也会记录验证指标结果。若需要在日志中输出自定义数据可参考 MMEngine 的 logging 教程在 Hook 中自行记录。2.3 在 TensorBoard 中查看曲线启动 TensorBoard 并指向vis_datatensorboard --logdir work_dirs/test_visual/20220810_115248/vis_data浏览器打开 TensorBoard 默认地址http://localhost:6006后即可在 SCALARS 面板中查看学习率、各损失项与指标随迭代的变化曲线实现对训练过程的实时监控。三、验证/测试期间的结果可视化SegVisualizationHook3.1 Hook 的作用与配置位置MMSegmentation 提供的SegVisualizationHook是一个继承自 MMEngineHook的钩子注册于 mmseg/engine/hooks/visualization_hook.py其职责是在模型验证与测试过程中将输入图像与对应的真值ground truth、预测结果prediction一并绘制并存储。它挂在配置的default_hooks中配合 Runner 的验证/测试循环工作。以下面 configs/base/schedules/schedule_20k.py 中的默认配置为例开启可视化只需给visualization钩子传入drawTruedefault_hooks dict( timerdict(typeIterTimerHook), loggerdict(typeLoggerHook, interval50, log_metric_by_epochFalse), param_schedulerdict(typeParamSchedulerHook), checkpointdict(typeCheckpointHook, by_epochFalse, interval2000), sampler_seeddict(typeDistSamplerSeedHook), visualizationdict(typeSegVisualizationHook, drawTrue, interval1))参数说明与 visualization_hook.py 构造函数一一对应drawbool默认 False是否绘制预测结果。为False时钩子直接返回、不产生任何可视化输出为True时才启用存储。源码中若drawFalse会发出 The results will NOT be visualized or stored 的警告。intervalint默认 50预测结果的采样间隔。设置为1时每次网络推理结果都会被保存默认50表示每 50 次迭代保存一次。showbool默认 False若为True则只弹出窗口显示、不存储数据此时钩子会清空vis_backends见源码 visualization_hook.py。wait_timefloat默认 0showTrue时窗口展示的间隔秒。backend_argsdict可选构造文件后端的参数需要 mmcv2.0.0rc4、mmengine0.2.0。3.2 Hook 触发时机与调用链从源码实现看SegVisualizationHook重写了两个生命周期方法after_val_itervisualization_hook.py在每个验证迭代结束后触发。它只可视化批次中的第一张图以val_{图片名}作为窗口名并依据total_curr_iter runner.iter batch_idx判断是否满足interval采样条件满足时调用self._visualizer.add_datasample(...)绘制并存储。after_test_itervisualization_hook.py在每个测试迭代结束后触发会遍历批次内全部data_sample以test_{图片名}命名并依次绘制。两者都会从data_sample.img_path读取原始图像用mmcv.imfrombytes(img_bytes, channel_orderrgb)解码为 RGB 格式再交给SegLocalVisualizer.add_datasample完成掩膜叠加与标签绘制。测试结果的可视化对每一个样本都会执行适合用tools/test.py单独评估模型时查看逐张预测效果。3.3 查看可视化输出启动训练实验后验证循环产生的可视化结果会保存在本地文件夹中单独用tools/test.py评估模型时预测结果同样会存到本地。本地存储位置统一为$WORK_DIRS/vis_data下的vis_image目录例如work_dirs/test_visual/20220810_115248/vis_data/vis_image如果按上文 2.1 节在vis_backends中加入了TensorboardVisBackend也可以直接在 TensorBoard 中查看这些图像tensorboard --logdir work_dirs/test_visual/20220810_115248/vis_dataTensorBoard 的 IMAGES 面板会显示每次采样保存的真值与预测对比图无需人工翻看本地文件。四、单数据样本可视化SegLocalVisualizer 实战4.1 为什么推荐 SegLocalVisualizer当只想可视化单个数据样本例如调试某张图的标注或预测结果时官方建议直接使用SegLocalVisualizer。它是 mmseg/visualization/local_visualizer.py 中定义、继承自 MMEngineVisualizer的子类专为语义分割场景扩展了掩膜绘制能力。其关键构造参数包括name默认 visualizer实例名称。vis_backends后端配置列表决定结果写到本地还是 TensorBoard。save_dir所有存储后端的保存根目录为None时不保存任何数据。classes/palette类别名与对应调色板不传时默认使用cityscapes的类别与调色板。dataset_name数据集名或别名可视化器据此自动获取该类别的元信息显式传入的classes、palette优先级更高。alpha默认 0.8分割掩膜的透明度控制原图与掩膜叠加时的混合比例见 local_visualizer.py 的color_seg image * (1 - alpha) mask * alpha。类别名与调色板的获取逻辑位于 mmseg/utils/class_names.py 的get_classes/get_palette函数两者通过dataset_aliases别名表class_names.py将用户传入的数据集名映射为内部名称再调用对应的xxx_classes()/xxx_palette()返回结果无法识别的数据集名会抛出ValueError。4.2 完整示例可视化一张 Cityscapes 图像的真值掩膜SegDataSample是 MMSegmentation 内部各组件之间传递数据的数据结构包含真值gt_sem_seg、预测pred_sem_seg与预测 logitsseg_logits等字段字段定义见 mmseg/structures/seg_data_sample.py其像素级数据统一存放在 MMEngine 的PixelData中。首先准备示例数据官方提供的 Cityscapes 图像与其labelTrainIds真值标注wget https://user-images.githubusercontent.com/24582831/189833109-eddad58f-f777-4fc0-b98a-6bd429143b06.png --output-document aachen_000000_000019_leftImg8bit.png wget https://user-images.githubusercontent.com/24582831/189833143-15f60f8a-4d1e-4cbb-a6e7-5e2233869fac.png --output-document aachen_000000_000019_gtFine_labelTrainIds.png然后编写以下 Python 脚本完成可视化import mmcv import os.path as osp import torch # PixelData 是 MMEngine 中定义的像素级标注或预测数据结构 from mmengine.structures import PixelData # SegDataSample 是 MMSegmentation 定义的各组件间数据接口 # 包含语义分割的真值、预测与预测 logits。 from mmseg.structures import SegDataSample 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(datasem_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(typeLocalVisBackend)], save_dirsave_dir) # 数据集的 meta 信息通常包含 classes类别名与 palette每个前景类别的可视化颜色。 # 所有类别名与调色板均定义在 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]]) # 当 showTrue 时直接显示结果 # 当 showFalse 时结果保存到本地目录。 seg_local_visualizer.add_datasample(out_file, image, data_sample, showFalse)运行后图像与对应真值的可视化结果将保存在./work_dirs/vis_data/vis_image/下文件名为out_file_cityscapes_0.png。4.3 add_datasample 的行为细节上述脚本的核心是add_datasample方法local_visualizer.py其行为规则如下真值与预测同绘当data_sample同时包含gt_sem_seg与pred_sem_seg且draw_gt、draw_pred均为True时最终结果是一张左右拼接图——左半为真值、右半为预测见 local_visualizer.py 的np.concatenate((gt_img_data, pred_img_data), axis1)。标签绘制with_labelsTrue默认时_draw_sem_seg会在每个类别的连通区域中心位置通过_get_center_loc计算见 local_visualizer.py绘制类别名文本与背景色块字体大小随图像尺寸自适应小图任一维小于 300使用更细的线宽。深度图支持除语义分割外add_datasample还检测gt_depth_map/pred_depth_map字段用_draw_depth_map将深度图以 feature map 形式与原始图像纵向拼接。输出控制showTrue时通过本地窗口显示out_file非空时直接写文件内部经mmcv.rgb2bgr转色否则交给self.add_image(name, drawn_img, step)分发到各vis_backends存储。另外需要注意可视化语义分割结果时dataset_meta中必须提供classes否则_draw_sem_seg会抛出断言错误 class information is not provided when visualizing semantic segmentation resultslocal_visualizer.py同时classes与palette的长度必须一致local_visualizer.py。五、进阶在预测结果中叠加真值对比SegVisualizationHook与SegLocalVisualizer的可视化能力可以组合出更完整的调试工作流。例如在验证或测试阶段SegDataSample会同时携带真值gt_sem_seg与预测pred_sem_segadd_datasample会自动生成左真值、右预测的并排对比图而用tools/test.py单独评估模型时after_test_iter会对每个测试样本逐一保存预测结果便于逐个案例排查模型在特定场景下的分割质量。若希望复用数据集自带的类别与调色板而不手动填写可以直接在配置中通过dataset_meta或构造SegLocalVisualizer时传入dataset_name由get_classes/get_palette自动解析支持 cityscapes、ade20k、voc、cocostuff、isaid、mapillary 等多个内置数据集的别名完整列表见 mmseg/utils/class_names.py 中的dataset_aliases。六、总结MMSegmentation 1.x 的可视化体系可以用三条主线快速上手训练监控在vis_backends中加入TensorboardVisBackend训练后用tensorboard --logdir .../vis_data查看学习率、损失与指标曲线验证/测试自动可视化在default_hooks.visualization中配置SegVisualizationHook(drawTrue, intervalN)结果自动存入vis_data/vis_image也可同步推送到 TensorBoard单样本精细可视化用SegLocalVisualizerSegDataSample手动构造数据样本通过add_datasample输出带类别标签的掩膜叠加图深度图与语义图可同图展示。配合 mmseg/visualization/local_visualizer.py、mmseg/engine/hooks/visualization_hook.py 与 mmseg/utils/class_names.py 三处源码读者既能直接复用官方配置也能在需要定制绘制逻辑如修改透明度、字体、标签样式或增加新数据类型时快速定位修改点。【免费下载链接】mmsegmentationOpenMMLab Semantic Segmentation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmsegmentation创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/10 10:09:37

DFlash适合边缘设备吗?移动端与嵌入式部署可行性分析

DFlash适合边缘设备吗?移动端与嵌入式部署可行性分析 【免费下载链接】dflash DFlash: Block Diffusion for Flash Speculative Decoding 项目地址: https://gitcode.com/GitHub_Trending/df/dflash DFlash 是一款专为投机解码(Speculative Decod…

2026/11/10 10:15:19

C#整合MCP与ChatGPT构建智能对话平台实战

1. 项目概述:构建基于C#的MCP/ChatGPT应用平台去年在开发一个智能客服系统时,我尝试将MCP(微软对话平台)与ChatGPT的API进行深度整合。这个用C#构建的解决方案最终实现了对话准确率提升47%的效果,今天就把整套技术方案…

2026/11/11 5:22:50

电工证需要申核吗?外省证怎么转岗?上岗必备全流程解析

电工证需要申核吗?外省证怎么转岗?上岗必备全流程解析 之前考的证在外省能不能转过来?这个问题我见过太多人问了,尤其是从河南转岗过来的电工朋友,很多人手里拿着老家的电工证,但到了新地方就“卡壳”了。今天就来聊聊【电工证需要申核吗】这个话题,顺…

2026/11/11 5:22:50

电工证需要申核吗 你知道多久拿证才靠谱吗

电工证需要申核吗 你知道多久拿证才靠谱吗 怕考不过白交培训费,这事儿我太懂了。很多刚入行的电工朋友,或者打算转行的,最怕的就是花了几千块报了个培训班,结果考试没过,钱打了水漂,还耽误时间。特别是像你这种周口中小施工企业的负责人,手头预算有限…

2026/11/11 5:22:49

电工证试卷测试多久拿证?怕考不过白交培训费的必看

电工证试卷测试多久拿证?怕考不过白交培训费的必看 你是不是也在纠结,电工证试卷测试到底多久拿证?怕自己花了几千块培训费,结果考试还是过不了,白白浪费时间跟钱?别急,我作为干了10年特种作业行业的老手,今天就来给你说实话,从报名、备考到考试,…

2026/11/11 5:22:49

企石哪里有电工证报考多少钱才能顺利拿到证

企石哪里有电工证报考多少钱才能顺利拿到证 之前考的证在外省能不能转过来?这个问题其实困扰了不少想在企石就业或者换工作的朋友。尤其是从外省过来的朋友,手里有证却不能直接用,心里肯定不踏实。今天我们就来聊聊 企石哪里有电工证报考…

2026/11/11 5:22:49

企石哪里有电工证报考?上岗必备怎么考才能一次过?

企石哪里有电工证报考?上岗必备怎么考才能一次过? 怕考不过白交培训费?最近企石很多想考电工证的工友都在问“企石哪里有电工证报考”,其实问题不在于“哪里有”,而在于“怎么考才能一次过”。别让培训费打水漂,关键还得看准备是否到位。这篇文章讲透电…

2026/11/11 5:17:49

济南电工证在哪里补办报名入口与办理流程

济南电工证在哪里补办报名入口与办理流程 实操考试心里没底怕挂科,尤其是像我们濮阳的建筑工人,平时忙于项目,根本没时间系统复习。一听说要补办电工证,整个人都紧张起来,担心流程复杂、材料不齐,更怕考试不过,耽误工作。但其实,只要提前了解清楚【济…

2026/11/10 8:12:38

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/11 0:02:26

考低压电工证通过率考试真题与备考技巧

低压电工证通过率高不高?学历不高也能考,值不值得考? 你是不是总听说电工证能帮你找高薪工作,但又担心自己学历不够,考不上?其实,低压电工证考试门槛并没有你想象中那么高,关键是方法对不对。这篇文章就告诉你, 考低压电工证通过率到底有多高 ,…

2026/11/11 0:02:26

低压电工证学时千万别踩坑,濮阳毕业生怎么避坑报名

低压电工证学时千万别踩坑,濮阳毕业生怎么避坑报名 你是不是也和我一样,刚毕业就听说低压电工证学时必须达标才能上岗?可一打听,发现报名机构五花八门,价格参差不齐, 不知道去哪报名怕被中介坑…

2026/11/10 20:08:15

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/10 10:29:37

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑