news 2026/9/17 19:27:37

MMSegmentation 新手上手指南:20 分钟跑通语义分割并训练出自己的模型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MMSegmentation 新手上手指南:20 分钟跑通语义分割并训练出自己的模型

MMSegmentation 新手上手指南:20 分钟跑通语义分割并训练出自己的模型

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

把一张街景图里的汽车、行人、马路自动区分开,靠的就是语义分割(让模型判断图像中每个像素属于哪一类物体)。用 MMSegmentation——OpenMMLab 推出的语义分割工具包——你可以从装好环境、跑通一个预训练模型,到用自己的数据训练并评估模型,大约 20 分钟走完一遍。

项目名片:MMSegmentation 是什么

MMSegmentation 是一个基于 PyTorch 的语义分割工具箱,把"选模型、准备数据、训练、评估、可视化"这些事收在同一个代码库里,让你不用为每个算法单独翻论文复现代码。

它的三条核心卖点:

  • 模块化拆解 → 对你意味着什么:分割框架被拆成 backbone(负责提取图像特征的基础网络)、neck(融合多尺度特征的中段)、head(输出每个像素类别的头)等可插拔组件,换算法时只改配置,不用重写整条流水线。
  • 统一评测基准 → 对你意味着什么:PSPNet、DeepLabV3、SegFormer 等几十种模型都在同一套数据和评估口径下跑,你横向比较性能时不用担心"数据不一样、结论不可信"。
  • 开箱即用的预训练权重 → 对你意味着什么:每个模型都提供现成 checkpoint,下载后一条命令就能出图,先看效果再决定是否要自己训练。

先选模型再动手:三类算法各适合什么场景

别急着装环境,先想清楚你要解决什么——这决定了你该挑哪一类模型。仓库在configs/下按算法分目录,下面这张表帮你先定方向:

算法类别代表模型能力适合的场景配置目录
经典 CNNPSPNet、DeepLabV3/DeepLabV3+、FCN精度稳定、生态成熟精度优先的街景、遥感等常规分割,适合入门configs/pspnet/
轻量级BiSeNetV2、STDC、CGNet参数少、推理快部署到端侧或需要实时响应的场景configs/bisenetv2/
TransformerSegFormer、SETR、Mask2Former全局感受野强、上限高数据量大、追求 SOTA 精度的研究场景configs/segformer/

👉 新手建议先跟 PSPNet 走:预训练权重齐全、文档多,卡住时最容易找到答案。

搭好开发环境:一条命令装好 GPU 版

系统要求:Python 3.7+、PyTorch 1.8+;用 GPU 还需 CUDA 10.2+。先建一个干净的 conda 环境,再按设备装 PyTorch。

GPU 机器:

conda create -n openmmlab python=3.8 -y conda activate openmmlab conda install pytorch torchvision -c pytorch

CPU 机器把最后一行换成:

conda install pytorch torchvision cpuonly -c pytorch

装好 PyTorch 后,用 MIM 装 MMEngine 和 MMCV(MMCV 是 OpenMMLab 的底层工具库,MIM 能自动帮你匹配好版本,避免手动对依赖):

pip install -U openmim mim install mmengine mim install "mmcv>=2.0.0"

最后装 MMSegmentation 本体,两条路线二选一。想改代码、看实现,走源码安装;只是当依赖库用,走 PyPI:

# 路线 A:源码安装(推荐,方便阅读和调试) git clone -b main https://gitcode.com/GitHub_Trending/mm/mmsegmentation cd mmsegmentation pip install -v -e . # 路线 B:PyPI 安装 pip install "mmsegmentation>=1.0.0"

验证装没装成功:用 MIM 拉一份 PSPNet 的配置和权重,再跑一张仓库自带的示例图。

mim download mmsegmentation --config pspnet_r50-d8_4xb2-40k_cityscapes-512x1024 --dest . python demo/image_demo.py demo/demo.png pspnet_r50-d8_4xb2-40k_cityscapes-512x1024.py pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth --device cuda:0 --out-file result.jpg

跑完后当前目录会多出一个result.jpg,打开它能看到街景图上叠了一层彩色分割区域——只要这张图正常生成,就说明环境装好了。装得细一点的内容见 docs/zh_cn/get_started.md。

跑通第一次分割:输入一张图,得到一张带颜色的图

先说你要什么结果:给一张街景图,拿回一张"每个像素都涂了类别颜色"的图。仓库里的demo/demo.png就是现成输入,下面这段代码做的就是"加载模型 → 推理 → 存图"三件事。

from mmseg.apis import inference_model, init_model, show_result_pyplot config_file = 'pspnet_r50-d8_4xb2-40k_cityscapes-512x1024.py' checkpoint_file = 'pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth' model = init_model(config_file, checkpoint_file, device='cuda:0') # 没 GPU 就写 device='cpu' img = 'demo/demo.png' result = inference_model(model, img) show_result_pyplot(model, img, result, show=True, out_file='result.jpg', opacity=0.5)

运行后show_result_pyplot会弹出一张叠加了半透明色块的图,同时把result.jpg写到磁盘;opacity=0.5控制颜色层的透明度,调小一点能看清原图细节。

视频分割是把同样的模型逐帧跑一遍。最省事的办法是直接调用仓库里的脚本,加--show实时预览,或用--output-file存成视频:

python demo/video_demo.py video.mp4 pspnet_r50-d8_4xb2-40k_cityscapes-512x1024.py pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth --show

⚠️ 视频只是把单帧推理循环了 N 次,帧数多时会比较慢,先拿几秒钟的短片段试。

训一个自己的模型:数据 → 训练 → 评估

数据准备。以 Cityscapes 为例:把数据集解压到data/cityscapes/(要含leftImg8bit/gtFine/两套目录),再跑转换脚本把它整理成工具包认得的格式。这一步的作用是把原始标注转成统一的.npy标签,之后训练就不用再关心原始格式:

python tools/dataset_converters/cityscapes.py data/cityscapes --nproc 8

预期结果:data/cityscapes/下多出一批*.npy文件,说明标注已经就位。目录细节看 docs/zh_cn/user_guides/2_dataset_prepare.md。

训练。选一份配置直接起训,检查点和日志会自动存进work_dirs/下与配置同名的目录:

python tools/train.py configs/pspnet/pspnet_r50-d8_4xb2-40k_cityscapes-512x1024.py

预期结果:终端里滚出Iter日志,GPU 占用上升;跑完后work_dirs/pspnet_r50-d8_4xb2-40k_cityscapes-512x1024/里会有latest.pth和若干 checkpoint。多卡训练则用bash tools/dist_train.sh <配置> 8,把 8 换成你的卡数。

评估。用训好的权重在验证集上算 mIoU(平均交并比,衡量分割准不准的指标,越高越好):

python tools/test.py configs/pspnet/pspnet_r50-d8_4xb2-40k_cityscapes-512x1024.py work_dirs/pspnet_r50-d8_4xb2-40k_cityscapes-512x1024/latest.pth --eval mIoU

预期结果:终端打印出整体 mIoU 以及每个类别的 IoU,数字越高说明模型分得越准。更多训练/测试参数见 docs/zh_cn/user_guides/4_train_test.md。

踩坑急救:三个高频问题

No module named 'mmcv'原因:MMCV 版本和 PyTorch 没对上,或根本没装。 解法:pip uninstall mmcv清干净,再用mim install "mmcv>=2.0.0"重装,让 MIM 帮你匹配版本。

推理时 CUDA 报错 / 找不到显卡原因:PyTorch 的 CUDA 版本和驱动不匹配。 解法:装 PyTorch 时按官网对应驱动的版本选;只想在 CPU 上跑,把配置里和命令中的device都改成cpu即可。

评估时类别数对不上(mIoU 全是 0 或报错)原因:配置文件里的num_classes和数据集真实类别数不一致。 解法:打开你用的配置文件,把num_classes改成与数据集一致的类别数再重跑。

更多问题可以翻 docs/zh_cn/notes/faq.md,里面有版本对照表和逐项排查。

继续深入

想把手感练得更扎实,按这个顺序往下看就行:

  • 官方 Notebook demo/MMSegmentation_Tutorial.ipynb:从建模型到推理的完整可交互例子。
  • 用户指南 docs/zh_cn/user_guides/index.rst:配置、数据、推理、训练、部署逐章讲。
  • 进阶指南 docs/zh_cn/advanced_guides/index.rst:教你怎么自定义模型、加数据集、改数据流。
  • 社区项目 projects/:医疗影像、遥感等真实落地的扩展案例。

👉 回到开头那张街景图:等你把环境、推理、训练、评估这条线跑通,想再分"卡车、自行车、红绿灯",只需要换一份配置、标好数据,就能继续往下走了。

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

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

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

VS Code 操作 MySQL:连接、SQL 管理与执行计划实战

写业务代码的时候最烦的不是逻辑绕&#xff0c;而是为了确认一条数据&#xff0c;得从 VS Code 切到 MySQL 图形客户端&#xff0c;查完再切回来&#xff0c;思路刚断了一截&#xff0c;回来还得重新把上下文捡起来。我统计过自己一天的窗口切换次数&#xff0c;密集的时候一小…

作者头像 李华