semantic-segmentation-pytorch

GitHub
5.1k 1.1k 中等 1 次阅读 6天前BSD-3-Clause图像开发框架
AI 解读 由 AI 自动生成,仅供参考

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
GPU
  • 训练必需 >=4 块 GPU,测试必需 >=1 块 GPU
  • 基准测试使用 NVIDIA Pascal Titan Xp (12GB 显存)
  • 需安装 CUDA >= 8.0
内存

未说明

依赖
notes该工具基于 MIT ADE20K 数据集开发。基础 ResNet 模型为自定义版本(不同于 torchvision),运行时会自动下载。代码包含纯 Python 实现的同步批归一化(SyncBN)模块,无需额外 C++ 扩展。支持通过配置文件管理选项,训练时支持动态输入尺度以保留图像宽高比。
python>=3.5
PyTorch>=0.4.0
numpy
scipy
opencv
yacs
tqdm
semantic-segmentation-pytorch hero image

快速开始

在 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.8475.7554.07 17.2
33.8476.8055.32 10.3
MobileNetV2dilated + PPM_deepsup 35.7677.7756.27 14.9
36.2878.2657.27 6.7
ResNet18dilated + C1_deepsup 33.8276.0554.94 13.9
35.3477.4156.38 5.8
ResNet18dilated + PPM_deepsup 38.0078.6458.32 11.7
38.8179.2959.05 4.2
ResNet50dilated + PPM_deepsup 41.2679.7360.50 8.3
42.1480.1361.14 2.6
ResNet101dilated + PPM_deepsup 42.1980.5961.39 6.8
42.5380.9161.72 2.0
UperNet50 40.4479.8060.12 8.4
41.5580.2360.89 2.9
UperNet101 42.0080.7961.40 7.8
42.6681.0161.84 2.3
HRNetV2 42.0380.7761.40 5.8
43.2081.4762.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

快速入门:使用我们训练好的模型对一张图片进行测试

  1. 以下是一个简单的示例,用于对单张图片进行推理:
chmod +x demo_test.sh
./demo_test.sh

该脚本会下载一个训练好的模型(ResNet50dilated + PPM_deepsup)和一张测试图片,运行测试脚本,并将预测的分割结果(.png)保存到工作目录中。

  1. 若要对一张图片或一个包含多张图片的文件夹($PATH_IMG)进行测试,只需执行以下命令:
python3 -u test.py --imgs $PATH_IMG --gpu $GPU --cfg $CFG

训练

  1. 下载 ADE20K 场景解析数据集:
chmod +x download_ADE20K.sh
./download_ADE20K.sh
  1. 通过选择要使用的 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
  1. 您还可以在命令行中覆盖选项,例如 python3 train.py TRAIN.num_epoch 10

评估

  1. 在验证集上评估训练好的模型。在参数中添加 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),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|3天前
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|4天前
开发框架图像Agent

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 真正成长为懂上

147.9k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

108.1k|★★☆☆☆|昨天
开发框架图像Agent

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 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

93.4k|★★☆☆☆|3天前
插件开发框架

LLMs-from-scratch

LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备

90.1k|★★★☆☆|3天前
语言模型图像Agent