semantic-segmentation-pytorch
semantic-segmentation-pytorch 是一个基于 PyTorch 框架开发的开源项目,专注于在著名的 MIT ADE20K 数据集上实现高精度的语义分割与场景解析。它的核心任务是将图像中的每个像素分类到特定的语义类别中(如区分道路、建筑、行人等),从而让计算机真正“看懂”图片内容。
该项目主要解决了深度学习在语义分割任务中训练难度大、多显卡协同效率低以及复现顶尖模型复杂等痛点。它特别适合计算机视觉领域的研究人员、算法工程师以及希望深入理解分割模型的开发者使用。虽然普通用户也可以通过其提供的在线演示上传照片体验效果,但其核心价值在于为专业人群提供了坚实的代码基础。
在技术亮点方面,semantic-segmentation-pytorch 实现了高效的同步批归一化(Synchronized Batch Normalization),确保在多设备训练时能统计全局均值与方差,这对提升大批次训练的分割精度至关重要。此外,它还创新性地重构了数据并行模块,支持动态输入尺度,允许不同尺寸的图像在同一批次中分配至不同 GPU 处理,既保持了图像原始宽高比,又显著提升了多卡训练效率。项目内置了 PSPNet、UPerNet 及 HRNet 等多种业界领先的预训练模型,方便用户直接调用或作为基准进行二次开发。
使用场景
某智慧城市团队正在开发一套自动分析街道监控视频的系统,旨在实时识别道路、车辆、行人及绿化带,以优化交通信号灯控制。
没有 semantic-segmentation-pytorch 时
- 模型复现困难:团队需从零编写 PSPNet 或 UPerNet 等前沿算法代码,耗时数周且极易出现与论文不符的实现偏差。
- 多卡训练低效:在处理高分辨率街景图时,难以保持图像原始宽高比,强制缩放导致识别变形,且无法有效利用多 GPU 进行同步批归一化训练。
- 数据适配繁琐:缺乏对 MIT ADE20K 等大型数据集的原生支持,需手动编写复杂的数据预处理和标签映射逻辑,容易出错。
- 调参成本高昂:缺少统一的配置文件管理,每次调整学习率或输入尺度都需修改底层代码,迭代效率极低。
使用 semantic-segmentation-pytorch 后
- 开箱即用顶尖模型:直接加载预训练的 PSPNet 或 UPerNet 模型,几分钟内即可在自有数据上获得业界领先的分割精度。
- 高效多 GPU 并行:利用其动态尺度输入和同步批归一化模块,既保留了图像真实比例提升识别率,又显著加速了大规模数据的训练过程。
- 标准化数据流程:内置符合 PyTorch 规范的预处理流程及完整的 ADE20K 色彩编码映射,无需额外开发即可无缝对接监控数据。
- 灵活配置管理:通过简单的配置文件即可调整所有超参数,支持 HRNet 等新架构,让算法迭代从“按周计”缩短为“按小时计”。
semantic-segmentation-pytorch 将复杂的场景解析算法工程化,让开发者能专注于业务逻辑而非底层模型构建,大幅降低了计算机视觉项目的落地门槛。
运行环境要求
- Linux
- 训练必需 >=4 块 GPU,测试必需 >=1 块 GPU
- 基准测试使用 NVIDIA Pascal Titan Xp (12GB 显存)
- 需安装 CUDA >= 8.0
未说明

快速开始
在 PyTorch 中使用 MIT ADE20K 数据集进行语义分割
这是在 MIT ADE20K 场景解析数据集(http://sceneparsing.csail.mit.edu/)上实现的语义分割模型的 PyTorch 版本。
ADE20K 是由 MIT 计算机视觉团队发布的、最大的开源语义分割和场景解析数据集。请访问以下链接,查看我们基于 Caffe 和 Torch7 的数据集及其实现仓库: https://github.com/CSAILVision/sceneparsing
如果您只想体验我们的演示,请尝试此链接:http://scenesegmentation.csail.mit.edu。您可以上传自己的照片并进行场景解析!
您也可以在此处使用 Colab 笔记本进行试验,以尝试对图像进行分割的代码。
所有预训练模型均可在此处找到: http://sceneparsing.csail.mit.edu/model/pytorch
[从左至右:测试图像、真实标签、预测结果]
语义类别的颜色编码可在此处查看: https://docs.google.com/spreadsheets/d/1se8YEtb2detS7OuPE86fXGyD269pMycAWe2mtKUj2W8/edit?usp=sharing
更新
- 现已支持 HRNet 模型。
- 我们使用配置文件来存储原本位于参数解析器中的大部分选项。这些选项的定义详见
config/defaults.py。 - 我们在数据预处理方面遵循 PyTorch 的实践规范(RGB [0, 1] 范围,减去均值,除以标准差)。
亮点
PyTorch 中的同步批归一化
该模块在训练过程中会跨所有设备计算均值和标准差。我们通过实验发现,较大的批量大小对于分割任务至关重要。感谢 Jiayuan Mao 的慷慨贡献,详情请参阅 Synchronized-BatchNorm-PyTorch。
该实现易于使用,原因如下:
- 完全由 Python 编写,无需额外的 C++ 扩展库。
- 与 PyTorch 的原生实现完全兼容。具体而言,它使用无偏方差更新移动平均,并采用 sqrt(max(var, eps)) 而不是 sqrt(var + eps)。
- 效率较高,仅比非同步批归一化慢 20% 至 30%。
多 GPU 训练时输入的动态尺度
对于语义分割任务,保持图像的宽高比在训练过程中非常重要。因此,我们重新实现了 DataParallel 模块,使其能够以 Python 字典的形式将数据分发到多个 GPU 上,从而使每个 GPU 可以处理不同尺寸的图像。同时,数据加载器的工作方式也有所不同。
现在数据加载器的批次大小始终等于 GPU 的数量,每个元素都会被发送到一个 GPU。它也兼容多进程。需要注意的是,多进程数据加载器的文件索引存储在主进程中,这与我们希望每个工作进程维护自己文件列表的目标相矛盾。因此,我们采取了一个技巧:尽管主进程仍然会为 __getitem__ 函数提供索引,但我们直接忽略该请求,随机发送一个批次字典。此外,数据加载器派生的所有工作进程都具有相同的随机种子,如果不使用上述技巧,多个工作进程将会产生完全相同的数据。为此,我们在激活数据加载器的多进程功能之前,添加了一行代码来设置 numpy.random 的默认种子。
当前最先进的模型
- PSPNet 是一种场景解析网络,通过金字塔池化模块(PPM)聚合全局特征表示。它是 ILSVRC'16 MIT 场景解析挑战赛的冠军模型。详细信息请参阅 https://arxiv.org/abs/1612.01105。
- UPerNet 是一种基于特征金字塔网络(FPN)和金字塔池化模块(PPM)的模型。它不需要膨胀卷积,而膨胀卷积是一种耗时且占用大量内存的操作。在不使用任何花哨技巧的情况下,它的性能可以媲美甚至超过 PSPNet,同时训练时间更短,所需的 GPU 内存也更少。详细信息请参阅 https://arxiv.org/abs/1807.10221。
- HRNet 是一种最近提出的模型,它在整个网络中始终保持高分辨率的特征表示,避免了传统的瓶颈设计。该模型在一系列像素级标注任务中取得了当前最优的性能。详细信息请参阅 https://arxiv.org/abs/1904.04514。
支持的模型
我们将模型分为编码器和解码器两部分,其中编码器通常直接基于分类网络修改而来,而解码器则由最后几层卷积和上采样组成。我们已在 config 文件夹中提供了一些预配置的模型。
编码器:
- MobileNetV2_dilated
- ResNet18/ResNet18_dilated
- ResNet50/ResNet50_dilated
- ResNet101/ResNet101_dilated
- HRNetV2 (W48)
解码器:
- C1(单个卷积模块)
- C1_deepsup(C1 加深监督技巧)
- PPM(金字塔池化模块,详情请参阅 PSPNet 论文)
- PPM_deepsup(PPM 加深监督技巧)
- UPerNet(金字塔池化结合 FPN 头部,详情请参阅 UperNet)
性能:
重要提示:我们仓库中的基础 ResNet 是自定义的(与 torchvision 中的版本不同)。基础模型会在需要时自动下载。
| 架构 | 多尺度测试 | 平均 IoU | 像素准确率(%) | 综合得分 | 推理速度(fps) |
|---|---|---|---|---|---|
| MobileNetV2dilated + C1_deepsup | 否 | 34.84 | 75.75 | 54.07 | 17.2 |
| 是 | 33.84 | 76.80 | 55.32 | 10.3 | |
| MobileNetV2dilated + PPM_deepsup | 否 | 35.76 | 77.77 | 56.27 | 14.9 |
| 是 | 36.28 | 78.26 | 57.27 | 6.7 | |
| ResNet18dilated + C1_deepsup | 否 | 33.82 | 76.05 | 54.94 | 13.9 |
| 是 | 35.34 | 77.41 | 56.38 | 5.8 | |
| ResNet18dilated + PPM_deepsup | 否 | 38.00 | 78.64 | 58.32 | 11.7 |
| 是 | 38.81 | 79.29 | 59.05 | 4.2 | |
| ResNet50dilated + PPM_deepsup | 否 | 41.26 | 79.73 | 60.50 | 8.3 |
| 是 | 42.14 | 80.13 | 61.14 | 2.6 | |
| ResNet101dilated + PPM_deepsup | 否 | 42.19 | 80.59 | 61.39 | 6.8 |
| 是 | 42.53 | 80.91 | 61.72 | 2.0 | |
| UperNet50 | 否 | 40.44 | 79.80 | 60.12 | 8.4 |
| 是 | 41.55 | 80.23 | 60.89 | 2.9 | |
| UperNet101 | 否 | 42.00 | 80.79 | 61.40 | 7.8 |
| 是 | 42.66 | 81.01 | 61.84 | 2.3 | |
| HRNetV2 | 否 | 42.03 | 80.77 | 61.40 | 5.8 |
| 是 | 43.20 | 81.47 | 62.34 | 1.9 |
训练在配备 8 块 NVIDIA Pascal Titan Xp GPU(每块显存 12GB)的服务器上进行基准测试,推理速度则在单块 NVIDIA Pascal Titan Xp GPU 上进行基准测试,未启用可视化功能。
环境
代码在以下配置下开发:
- 硬件:训练至少 4 块 GPU,测试至少 1 块 GPU(相应设置
[--gpus GPUS]) - 软件:Ubuntu 16.04.3 LTS,CUDA≥8.0,Python≥3.5,PyTorch≥0.4.0
- 依赖库:numpy、scipy、opencv、yacs、tqdm
快速入门:使用我们训练好的模型对一张图片进行测试
- 以下是一个简单的示例,用于对单张图片进行推理:
chmod +x demo_test.sh
./demo_test.sh
该脚本会下载一个训练好的模型(ResNet50dilated + PPM_deepsup)和一张测试图片,运行测试脚本,并将预测的分割结果(.png)保存到工作目录中。
- 若要对一张图片或一个包含多张图片的文件夹(
$PATH_IMG)进行测试,只需执行以下命令:
python3 -u test.py --imgs $PATH_IMG --gpu $GPU --cfg $CFG
训练
- 下载 ADE20K 场景解析数据集:
chmod +x download_ADE20K.sh
./download_ADE20K.sh
- 通过选择要使用的 GPU(
$GPUS) 和配置文件($CFG) 来训练模型。训练过程中,默认情况下检查点会保存在ckpt文件夹中。
python3 train.py --gpus $GPUS --cfg $CFG
- 要选择使用哪些 GPU,可以输入
--gpus 0-7,也可以输入--gpus 0,2,4,6。
例如,您可以从我们提供的配置开始:
- 训练 MobileNetV2dilated + C1_deepsup
python3 train.py --gpus GPUS --cfg config/ade20k-mobilenetv2dilated-c1_deepsup.yaml
- 训练 ResNet50dilated + PPM_deepsup
python3 train.py --gpus GPUS --cfg config/ade20k-resnet50dilated-ppm_deepsup.yaml
- 训练 UPerNet101
python3 train.py --gpus GPUS --cfg config/ade20k-resnet101-upernet.yaml
- 您还可以在命令行中覆盖选项,例如
python3 train.py TRAIN.num_epoch 10。
评估
- 在验证集上评估训练好的模型。在参数中添加
VAL.visualize True可以输出如预告片所示的可视化结果。
例如:
- 评估 MobileNetV2dilated + C1_deepsup
python3 eval_multipro.py --gpus GPUS --cfg config/ade20k-mobilenetv2dilated-c1_deepsup.yaml
- 评估 ResNet50dilated + PPM_deepsup
python3 eval_multipro.py --gpus GPUS --cfg config/ade20k-resnet50dilated-ppm_deepsup.yaml
- 评估 UPerNet101
python3 eval_multipro.py --gpus GPUS --cfg config/ade20k-resnet101-upernet.yaml
与其他项目的集成
可以通过 pip 安装此库,以便轻松地与其他代码库集成。
pip install git+https://github.com/CSAILVision/semantic-segmentation-pytorch.git@master
现在,此库可以方便地以编程方式使用。例如:
from mit_semseg.config import cfg
from mit_semseg.dataset import TestDataset
from mit_semseg.models import ModelBuilder, SegmentationModule
参考文献
如果您觉得代码或预训练模型有用,请引用以下论文:
通过 ADE20K 数据集实现场景的语义理解。B. Zhou, H. Zhao, X. Puig, T. Xiao, S. Fidler, A. Barriuso 和 A. Torralba。《国际计算机视觉期刊》(IJCV),2018 年。(https://arxiv.org/pdf/1608.05442.pdf)
@article{zhou2018semantic,
title={Semantic understanding of scenes through the ade20k dataset},
author={Zhou, Bolei and Zhao, Hang and Puig, Xavier and Xiao, Tete and Fidler, Sanja and Barriuso, Adela and Torralba, Antonio},
journal={International Journal on Computer Vision},
year={2018}
}
通过 ADE20K 数据集进行场景解析。B. Zhou, H. Zhao, X. Puig, S. Fidler, A. Barriuso 和 A. Torralba。计算机视觉与模式识别会议(CVPR),2017 年。(http://people.csail.mit.edu/bzhou/publication/scene-parse-camera-ready.pdf)
@inproceedings{zhou2017scene,
title={Scene Parsing through ADE20K Dataset},
author={Zhou, Bolei and Zhao, Hang and Puig, Xavier and Fidler, Sanja and Barriuso, Adela and Torralba, Antonio},
booktitle={Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition},
year={2017}
}
常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器
LLMs-from-scratch
LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备