news 2026/8/24 10:00:29

3 步跑通 mmsegmentation 语义分割可视化:把训练状态看得一清二楚

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
3 步跑通 mmsegmentation 语义分割可视化:把训练状态看得一清二楚

3 步跑通 mmsegmentation 语义分割可视化:把训练状态看得一清二楚

【免费下载链接】mmsegmentationOpenMMLab Semantic Segmentation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmsegmentation

训练完语义分割模型,你盯着 loss 曲线看了半天,却说不出模型到底学到哪了;推理之后拿到的是一张"标签索引的彩色噪点图",到底哪块是路、哪块是建筑,谁也说不清。mmsegmentation(OpenMMLab 出品的语义分割工具箱)内置了一套语义分割可视化机制,把预测结果和真实标注直接渲染成带颜色、带文字的可读掩码图——单张图像推理看图、训练过程定期截图,两种用法下面都给你讲明白。

一、它到底能帮你做什么?

先给结论:这套可视化的核心是把"像素级的类别索引"翻译成"人眼能直接看懂的图",一共 5 个核心能力:

能力说人话解释典型用法
GT 与预测并排对比左图真实标注、右图模型预测,一眼看出差在哪训练钩子 /add_datasample
掩码透明度调节alpha/opacity控制掩码遮不遮原图推理 demo、配置文件
类别名标签叠加掩码上直接写 "car""road",不用查色卡推理时加--with-labels
自定义调色板用自己的classes+palette控制每个类别的颜色自建数据集
深度图可视化把深度估计渲染成热图贴在原图下方Adabins 等深度任务

其中前四项封装在 mmseg/visualization/local_visualizer.py 的SegLocalVisualizer类里,推理脚本里用的MMSegInferencer也是调它来画图的。

二、三步跑起来:单张图像可视化最快上手

这一步的目标:用现成的 FCN 预训练模型,把一张图切给你看。

第 1 步:拿到代码

git clone https://gitcode.com/GitHub_Trending/mm/mmsegmentation cd mmsegmentation

第 2 步:安装

python -m pip install -r requirements.txt python -m pip install -e .

第 3 步:运行推理可视化脚本

python demo/image_demo_with_inferencer.py \ demo/classroom__rgb_00283.jpg \ configs/fcn/fcn_r50-d8_4xb2-40k_cityscapes-512x1024.py \ --checkpoint ./weights/fcn_r50-d8_cityscapes.pth \ --out-dir vis_output \ --with-labels \ --opacity 0.7

关键参数就 4 个,每个一行注释:

  • --checkpoint:模型权重文件的本地路径,换成你自己下载好的权重
  • --out-dir:结果图片保存目录,跑完直接去文件夹里看图
  • --with-labels:在掩码上叠加类别名文字
  • --opacity:掩码透明度,范围 (0, 1],默认 0.5,越大越"实"

另外两个容易踩的参数:--dataset-name决定用哪套调色板渲染掩码,默认cityscapes--device默认cuda:0,没有显卡就改成--device cpu

三、分场景怎么用?

场景 1:快速验证预训练模型效果

拿几批业务图片批量过一遍image_demo_with_inferencer.py,把--out-dir指到一个目录。判断标准很简单:预测侧掩码里能不能出现你关心的类别、边界贴不贴合物体轮廓。这一步不碰任何训练配置,5 分钟就能判断"这个模型值不值得在你的数据上微调"。

场景 2:训练中定期"抓图"检查模型状态 📊

mmsegmentation 默认配置 configs/base/default_runtime.py 里已经挂了本地可视化后端:

vis_backends = [dict(type='LocalVisBackend')] visualizer = dict( type='SegLocalVisualizer', vis_backends=vis_backends, name='visualizer', alpha=0.7)

默认每 100 次迭代就会自动渲染一组"左 GT / 右预测"的对比图,存到work_dir/vis_data下,按迭代次数命名。想在本地文件之外同步写进 TensorBoard,就在vis_backends里追加一行dict(type='TensorboardVisBackend'),然后照常python tools/train.py 你的配置.py启动训练,无需额外写钩子代码。

场景 3:自建数据集,自定义类别名和颜色

如果你的数据集类别和 cityscapes 不一样,别去改源码——SegLocalVisualizer构造参数直接支持classespalette

visualizer = dict( type='SegLocalVisualizer', vis_backends=vis_backends, name='visualizer', classes=['road', 'building', 'vegetation'], # 与标注索引一一对应 palette=[[0, 255, 0], [255, 0, 0], [0, 255, 255]], # 每类一个 RGB 颜色 alpha=0.7)

注意classespalette长度必须一致,一一对应;两者优先级高于dataset_name自动查表。

四、结果怎么看:盯住 4 个信号

训练截图里左边是 GT、右边是预测,对着看这 4 个信号:

  1. 边界贴合度:预测掩码边缘明显比 GT 模糊、或整体向内缩了一圈,说明边界学习能力不足,优先怀疑损失函数和输入分辨率,而不是先换网络。
  2. 类别缺失:某个类别的颜色在预测侧完全没出现,而 GT 侧有——大概率是类别不平衡或该类别标注有问题,先查数据再怀疑模型。
  3. 整图单一色:预测侧几乎被一种颜色占满,模型可能在塌缩到多数类,看 loss 时容易漏掉这个信号,图上则一目了然。
  4. 标签对得上吗:打开--with-labels,核对文字标签和掩码颜色是否匹配,不匹配说明classes/palette配置顺序错了,结果再"好看"也是错的。

五、避坑指南 ⚠️

  • 颜色全错或一片同色--dataset-name默认是cityscapes,拿它渲染自建数据集必然对不上。显式传--dataset-name 你的数据集,或在配置里写classes/palette
  • 服务器上--show没反应--show依赖本地 GUI 窗口,无头环境会静默失败。改用--out-dir保存图片,看文件最稳。
  • CPU 机器直接报 CUDA 错误--device默认cuda:0,纯 CPU 环境记得加--device cpu,推理会慢但能跑通。
  • opacity调到 1 后找不到原图:掩码会完全盖住原图。想对比细节就调低到 0.3~0.5;想看清掩码轮廓就调高到 0.7 左右。

写在最后

一句话总结:推理时用image_demo_with_inferencer.py看图、训练时盯vis_data目录里的对比图,语义分割训练就不再是黑盒。下一步建议:先用上面"4 个信号"检查一遍你手头模型的可视化截图,确认问题出在数据还是结构,再去动配置。更多入门内容可参考官方文档:docs/zh_cn/get_started.md。

【免费下载链接】mmsegmentationOpenMMLab Semantic Segmentation Toolbox and Benchmark.项目地址: https://gitcode.com/GitHub_Trending/mm/mmsegmentation

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/24 9:59:33

【前端知识点总结】Nginx 指南:从开发到生产的完美衔接

目录 一、 核心认知:Nginx 在前端架构中扮演什么角色? 对于开发环境: 对于生产环境(为什么要 Nginx?): Nginx 到底是干什么的? 角色 1:静态资源服务器(前端代码的“门卫”) 角色 2:反向代理服务器(接替 Vite 代理的工作) 打个比方 二、 场景判断:到底需…

作者头像 李华
网站建设 2026/8/24 9:59:20

具身智能体记忆系统BrainMem:类脑记忆与任务规划实践

1. 项目概述:当具身智能体拥有“大脑记忆”最近在折腾具身智能体(Embodied Agent)的任务规划时,我遇到了一个经典难题:如何让智能体在复杂、动态的环境中,记住过去的关键经验,并利用这些经验来指…

作者头像 李华
网站建设 2026/8/24 9:57:44

PEEU框架:让GUI智能体通过自主探索与事后经验高效学习任务规划

1. 项目概述:GUI智能体如何通过“自主探索”与“事后经验”实现任务规划最近在智能体(Agent)领域,一个核心的挑战是如何让一个能操作图形用户界面(GUI)的智能体,在没有详尽、预先编写好的指令集…

作者头像 李华