语义分割的技术发展路线
语义分割(Semantic Segmentation)的目标,是为图像中的每一个像素预测语义类别。与只判断整张图像“有什么”的图像分类不同,语义分割还必须回答这些类别“在哪里”。因此,它从一开始就面临一个贯穿至今的矛盾:模型需要通过下采样和深层网络获得强语义,却又必须保留足够精细的空间信息来恢复物体边界。
过去十余年,语义分割的技术发展并不是简单地把主干网络从 VGG 换成 ResNet,再换成 Transformer。更准确地说,它一直在解决四组相互关联的问题:
- 分类语义与像素定位: 深层特征更理解“是什么”,浅层特征更清楚“在哪里”。
- 局部细节与全局上下文: 判断一个像素既需要观察附近纹理,也需要理解整幅场景。
- 固定类别与开放世界: 传统模型只能预测训练时定义好的类别,真实世界却不存在封闭词表。
- 专用模型与通用接口: 语义、实例、全景和交互式分割长期由不同模型处理,新的基础模型则试图提供统一能力。
本文将围绕这些矛盾,梳理语义分割从 FCN、U-Net 和 DeepLab,到 Transformer、Mask2Former、开放词汇分割和 SAM 的发展路线。
1. 语义分割到底在解决什么问题
给定图像 $I\in\mathbb{R}^{H\times W\times 3}$,闭集语义分割模型学习一个映射
\[f_\theta(I)\rightarrow Y,\qquad Y\in\{1,2,\ldots,C\}^{H\times W}\]其中,$C$ 是预先定义的类别数,输出 $Y$ 为每个像素指定一个类别。训练时最常见的目标是逐像素交叉熵:
\[\mathcal{L}_{\mathrm{CE}}=-\frac{1}{|\Omega|}\sum_{i\in\Omega}\sum_{c=1}^{C}y_{i,c}\log p_{i,c}\]$\Omega$ 表示有效标注像素集合,$p_{i,c}$ 是模型对像素 $i$ 属于类别 $c$ 的预测概率。类别极不均衡或前景区域很小时,还常使用 Dice Loss、Focal Loss 或它们与交叉熵的组合。
语义分割容易与另外两个任务混淆:
- 语义分割: 同类物体共享一个类别掩码,不区分不同实例。
- 实例分割: 不仅预测类别,还要区分每一个独立对象。
- 全景分割: 同时处理可数的物体(things)和不可数的背景区域(stuff),并为每个像素提供统一结果。
最常见的评测指标是交并比(Intersection over Union, IoU):
\[\mathrm{IoU}_c=\frac{\mathrm{TP}_c}{\mathrm{TP}_c+\mathrm{FP}_c+\mathrm{FN}_c},\qquad \mathrm{mIoU}=\frac{1}{C}\sum_{c=1}^{C}\mathrm{IoU}_c\]mIoU 对类别分别计算再取平均,因此比单纯的像素准确率更不容易被道路、天空等大面积类别主导。不过,它仍无法完整反映边界质量、小目标表现、模型速度和跨域鲁棒性,阅读论文时不能只比较一个数字。
深度学习之前
在端到端神经网络成为主流之前,图像分割通常依赖颜色、纹理和边缘等人工特征,再结合区域生长、聚类、超像素、图割、条件随机场(CRF)等算法建立空间一致性。这类方法显式规定相邻像素应该如何影响彼此,但特征表达能力有限,而且各模块往往需要分别设计和调参。
深度学习带来的关键变化,不只是换用了更强的分类器,而是让“特征提取—上下文建模—像素预测”能够在同一个目标下端到端优化。
2. FCN:把图像分类网络改造成密集预测网络
Fully Convolutional Networks:现代语义分割的起点
早期 CNN 通常在卷积层之后接全连接层,最终为整张图像输出一个类别。这种结构固定了输入尺寸,也在最后阶段丢弃了空间布局。FCN(Fully Convolutional Network)提出,可以把全连接层改写成卷积,并让网络直接输出低分辨率的类别响应图:
\[I\xrightarrow{\mathrm{encoder}}F\in\mathbb{R}^{h\times w\times d}\xrightarrow{1\times1\ \mathrm{conv}}Z\in\mathbb{R}^{h\times w\times C}\]随后再通过可学习的转置卷积把预测恢复到输入分辨率。这样,模型可以接受任意尺寸的图像,并以整图方式进行端到端的逐像素训练和推理。
FCN 还引入了 FCN-32s、FCN-16s 和 FCN-8s 等结构,将深层的粗语义预测与浅层的高分辨率特征相加。这个设计确立了一条至今仍然有效的原则:
深层特征负责识别语义,浅层特征负责恢复位置与边界。
不过,FCN 的融合方式仍然比较粗糙。分类主干连续下采样后,许多细小结构已经不可逆地丢失;简单上采样只能放大预测图,不能凭空恢复消失的空间信息。
U-Net:对称编码器—解码器与跳跃连接
U-Net 最初面向生物医学图像分割。与 FCN 相比,它构造了更完整的对称结构:编码器逐步降低分辨率并增加通道,解码器逐级上采样,并在每个尺度拼接编码器的对应特征。
其核心可以概括为:
\[F_l^{\mathrm{dec}}=\phi\left(\operatorname{Up}(F_{l+1}^{\mathrm{dec}})\mathbin\Vert F_l^{\mathrm{enc}}\right)\]$\Vert$ 表示通道拼接。相比 FCN 的预测相加,U-Net 把更完整的浅层特征交给解码器,让模型自己学习如何结合语义与边界。它还通过重叠裁剪、数据增强等方法适应标注量有限的医学场景。
U-Net 的意义并不局限于某个数据集。它把“编码语义—逐级恢复—跨层融合”变成了一种通用设计,后来广泛影响医学影像、遥感、工业缺陷检测和生成模型。
SegNet:记录下采样的位置
SegNet 同样采用编码器—解码器结构,但解码器不直接复制完整的编码器特征,而是复用最大池化时保存的索引进行非线性上采样。这降低了传递高分辨率特征的内存成本,也说明空间恢复存在不同取舍:可以传递完整特征,也可以只保留最关键的位置线索。
这一阶段解决了“分类网络如何输出像素结果”,但接下来仍有两个问题:模型怎样在不牺牲分辨率的情况下扩大感受野,以及怎样同时识别大小差异巨大的目标。
3. CNN 成熟期:感受野、多尺度上下文与边界
DeepLab:用空洞卷积扩大感受野
普通卷积网络通过池化或步长卷积扩大感受野,但每次下采样都会降低空间分辨率。DeepLab 引入空洞卷积(Atrous/Dilated Convolution),在卷积核元素之间插入间隔,从而在不进一步下采样的情况下扩大有效感受野。对一维信号,其形式为:
\[y[i]=\sum_k x[i+r\cdot k]w[k]\]其中 $r$ 是空洞率。当 $r=1$ 时退化为普通卷积;增大 $r$ 可以覆盖更大范围,而特征图尺寸保持不变。
DeepLab v1 将空洞卷积与全连接 CRF 结合:CNN 负责产生语义预测,CRF 根据颜色和位置关系细化边界。DeepLab v2 随后提出 ASPP(Atrous Spatial Pyramid Pooling),让多个不同空洞率的分支并行观察同一特征图:
\[F_{\mathrm{ASPP}}=\operatorname{Concat}\left(\phi_{r_1}(F),\phi_{r_2}(F),\ldots,\phi_{r_m}(F)\right)\]这使同一个位置同时获得不同尺度的上下文。
DeepLab v3 进一步改进 ASPP,并加入图像级特征;DeepLab v3+则把 ASPP 与编码器—解码器结合:高层分支负责多尺度语义,低层特征帮助恢复边界,再通过深度可分离卷积降低计算成本。
DeepLab 系列反映了经典语义分割最核心的设计取舍:
- 较大的 output stride 计算便宜,但输出更粗糙;
- 较小的 output stride 保留细节,但显存和计算成本更高;
- 空洞率过大时,采样点会过于稀疏,可能出现栅格效应。
PSPNet:用场景全局信息消除局部歧义
只观察局部区域可能得到语义上合理、场景上荒谬的预测。例如外观相似的区域,在道路场景和室内场景中可能属于完全不同的类别。PSPNet 使用金字塔池化模块,把特征图池化到多个空间尺度,再上采样并拼接:
\[F_{\mathrm{PPM}}=F\mathbin\Vert \operatorname{Up}(P_1(F))\mathbin\Vert\cdots\mathbin\Vert\operatorname{Up}(P_m(F))\]最粗的池化分支提供整幅图像的全局先验,较细分支提供区域级上下文。它与 ASPP 解决的是相似问题,但实现方式不同:ASPP 通过不同扩张率采样,PSPNet 通过不同网格尺度聚合。
HRNet:不把高分辨率信息丢掉
FCN、U-Net 和 DeepLab 都在不同程度上遵循“先降低分辨率,再恢复”的路线。HRNet 提出另一种思路:始终保留一条高分辨率分支,同时逐步加入更低分辨率、更强语义的并行分支,并反复交换不同尺度的信息。
这种设计对人体解析、关键点估计和需要精细边界的语义分割尤其有效。它说明恢复空间细节并非只有 decoder 一条道路,也可以从网络开始就避免将其完全丢弃。
到这一阶段,CNN 语义分割基本形成了四类可复用组件:
| 目标 | 典型设计 | 代表模型 |
|---|---|---|
| 恢复空间细节 | 编码器—解码器、跳跃连接 | U-Net、DeepLab v3+ |
| 扩大感受野 | 空洞卷积 | DeepLab |
| 聚合多尺度上下文 | ASPP、金字塔池化 | DeepLab、PSPNet |
| 保持高分辨率 | 多分辨率并行分支 | HRNet |
4. Transformer:让全局关系成为基础操作
卷积通过局部窗口逐层传播信息,想建立远距离关系通常需要堆叠很多层,或者额外设计空洞卷积、金字塔池化和非局部模块。自注意力则允许任意两个 token 直接交互:
\[\operatorname{Attention}(Q,K,V)=\operatorname{softmax}\left(\frac{QK^\top}{\sqrt d}\right)V\]这使 Transformer 天然适合建立全局上下文,但高分辨率图像的 token 数量很大,标准注意力的复杂度随 token 数平方增长。语义分割中的 Transformer 发展,本质上是在全局关系、多尺度结构与计算成本之间寻找平衡。
SETR 与 Segmenter:把分割看成序列建模
SETR 将图像划分为 patch,使用纯 Transformer 编码器建模全局关系,再用不同复杂度的 decoder 恢复预测。它展示了不依赖卷积主干也可以完成语义分割,但固定 patch 和单尺度 token 会影响小目标与边界,直接全局注意力的成本也很高。
Segmenter进一步使用 mask transformer decoder:类别嵌入与图像 patch 交互,通过二者的相似度形成类别掩码。它已经隐约体现出后来“mask classification”的思路,但仍以固定语义类别为中心。
SegFormer:层次化编码器与轻量解码器
SegFormer 没有坚持单尺度的纯 ViT,而是构造层次化 Transformer 编码器 MiT,逐级输出不同分辨率的特征。它通过带重叠的 patch embedding 保留局部连续性,使用序列缩减降低注意力成本,并移除绝对位置编码,以减轻训练和测试分辨率不一致时的位置插值问题。
更重要的是,SegFormer 只使用轻量 MLP decoder,把不同层级特征统一通道、上采样到相同尺寸再融合。这表明,只要编码器已经产生了高质量多尺度表示,decoder 未必需要非常复杂。
Swin Transformer 与 UPerNet
Swin Transformer 通过局部窗口注意力把复杂度控制在近似线性范围,再用 shifted window 实现跨窗口连接。其层次化特征可以直接接入 FPN、UPerNet 等既有 dense prediction 框架。
因此,Transformer 并没有让 CNN 时代积累的多尺度思想失效。相反,表现优秀的 SegFormer、Swin 和后续视觉骨干重新引入了层次结构、局部性和特征金字塔。真正改变的是,上下文聚合从固定卷积核扩展成了内容自适应的 token 关系建模。
5. Mask Classification:从给像素分类到给区域分类
传统语义分割直接预测 $H\times W\times C$ 的像素类别 logits。每个像素都在固定类别集合中做选择,实例分割和全景分割则通常需要另一套检测或 proposal 流程。
MaskFormer 提出,可以把不同分割任务统一改写为预测一组“掩码—类别”对:
\[\hat{Y}=\left\{\left(\hat{m}_i,\hat{p}_i\right)\right\}_{i=1}^{N}\]其中 $\hat{m}_i$ 是第 $i$ 个 query 预测的二值软掩码,$\hat{p}_i$ 是它的类别分布。训练时通过二分图匹配把预测集合与真实区域对应起来。最终语义预测可以由类别概率和掩码概率组合得到:
\[p(c\mid x,y)=\sum_{i=1}^{N}\hat{p}_i(c)\,\hat{m}_i(x,y)\]这个改变非常关键:模型不再要求每个像素独立完成分类,而是先形成具有整体性的区域表示,再给区域赋予语义。
Mask2Former:用 masked attention 统一三种分割任务
普通 cross-attention 会让每个 query 关注整张特征图,既增加计算量,也容易引入无关区域。Mask2Former 让 query 的注意力限制在当前预测掩码内部:
\[X_l=\operatorname{softmax}\left(M_{l-1}+Q_lK_l^\top\right)V_l+X_{l-1}\]$M_{l-1}$ 根据上一层掩码预测,在掩码外加入负无穷,使注意力集中在候选区域。模型还在多个尺度之间轮换使用特征,以兼顾小物体和大区域。
在这一框架下,语义、实例和全景分割的主要区别不再是网络结构,而是训练目标和结果后处理。Mask2Former 因而代表了一次比“换 backbone”更深的范式变化:分割开始拥有统一的区域级输出接口。
OneFormer 随后加入任务文本提示,让同一个模型在训练和推理时根据“semantic”“instance”或“panoptic”提示切换任务。它进一步说明,统一分割不只是共享网络参数,还可以把任务本身也表示成条件输入。
6. 开放词汇分割:类别不再固定在分类头中
到目前为止,模型的分类头仍然绑定训练集定义的 $C$ 个类别。若模型只在 Cityscapes 的类别上训练,它不能直接接受一个新的文本类别并找到对应像素。开放词汇语义分割(Open-Vocabulary Semantic Segmentation, OVSS)希望在推理时使用任意类别名称:
\[s(x,y,c)=\operatorname{sim}\left(f_{\mathrm{image}}(I)_{x,y},f_{\mathrm{text}}(c)\right)\]CLIP 等视觉—语言模型通过大规模图文预训练获得了开放类别识别能力,但它们主要为整图对比学习而设计。图像级语义很强,并不意味着 patch 特征天然具有准确的像素定位能力。这构成了开放词汇分割的核心矛盾。
像素特征直接与文本对齐
LSeg、DenseCLIP 等方法尝试把密集图像特征直接对齐到文本嵌入。优点是结构直接,可以为每个像素计算任意类别得分;难点是图文预训练中的全局表示需要被转换成局部、边界敏感的表示。
先找区域,再识别区域
另一类方法先用 class-agnostic 模型生成候选掩码,再让 CLIP 判断每个区域是什么。OpenSeg、OVSeg 和 MaskCLIP大体属于这条路线。
这种分解充分利用了专业分割模型的定位能力和 CLIP 的开放语义,但系统性能同时受到两个模块限制:候选区域漏掉的物体无法由分类器补回;将背景抹除后的 masked image 又与 CLIP 的原始训练分布不同。OVSeg专门研究了这种 masked image distribution shift,并使用图文数据构造更适合掩码区域的训练信号。
聚合图像—文本 cost volume
CAT-Seg显式构造图像 patch 与文本类别之间的相似度张量,再在空间维度和类别维度聚合 cost volume。它不只是分别改进视觉特征与文本特征,而是直接建模“哪些位置和哪些类别相匹配”。
开放词汇分割把语义分割从固定标签空间推进到语言定义的标签空间,但它仍面临:
- CLIP 全局语义强、局部空间一致性弱;
- 已见类别容易压制未见类别;
- 文本模板、同义词和类别描述会影响预测;
- 不同数据集对 background、unknown 和类别粒度的定义不一致;
- 跨数据集 zero-shot mIoU 与单数据集闭集 mIoU 不能直接横向比较。
7. SAM:提示式分割与分割基础模型
Segment Anything:把区域生成做成基础能力
SAM 将任务定义为 promptable segmentation:用户提供点、框、粗掩码等提示,模型输出对应区域。其结构由图像编码器、提示编码器和轻量 mask decoder 组成。为了处理提示本身可能存在的歧义,SAM 可以为同一个提示输出多个不同粒度的候选掩码。
SAM 的另一项关键贡献是数据引擎。模型辅助标注人员生成掩码,新数据再用于改进模型,最终形成包含约 1,100 万张图像和 10 亿级掩码的 SA-1B 数据集。它展示了“大规模模型—交互式标注—更大数据集”的循环如何把分割扩展成基础能力。
但必须明确:
SAM 是 class-agnostic 的提示式区域分割模型,不等于开放词汇语义分割模型。
SAM 很擅长回答“提示指向的区域在哪里”,却不会天然稳定地回答“这个区域属于什么类别”。要完成开放词汇语义分割,通常还需要 CLIP、开放词汇检测器或视觉语言模型提供类别语义。
从区域生成走向语义与多粒度
SEEM、Semantic-SAM 等工作尝试进一步统一点、框、掩码和文本提示,并引入物体、部件等不同粒度的语义监督。Semantic-SAM强调同一个点击可能对应物体整体、局部部件或更细结构,因此模型不应假定一个提示只有唯一正确粒度。
这条路线可以看成三个能力的组合:
- 区域生成: 找到边界完整的候选掩码;
- 语义识别: 用类别、描述或自由文本解释区域;
- 提示交互: 根据点、框、文本和历史结果选择用户真正需要的区域。
SAM 2:从图像扩展到视频
SAM 2 把图像和视频统一为同一个提示式分割任务,并引入流式记忆,让当前帧可以利用之前帧的掩码和视觉特征。视频分割不再只是对每帧独立运行图像模型,而需要持续维护对象身份、处理遮挡,并在目标重新出现时恢复跟踪。
SAM 2 的意义不仅是速度或精度提升,而是把“可交互区域生成”从静态图像扩展成具有时间状态的视觉能力。不过,它仍没有消除区域分割与语义识别之间的区别。
8. 三条路线如何汇合
回顾整个发展过程,可以看到三条原本相对独立的路线正在汇合:
闭集密集预测:FCN → U-Net/DeepLab/PSPNet → Transformer → Mask2Former
↘
开放语义识别:CLIP → DenseCLIP/OVSeg/CAT-Seg ─────────→ 通用语义分割
↗
提示式区域生成:SAM → Semantic-SAM/SEEM → SAM 2 ──────→ 分割基础模型
第一条路线不断提升像素定位和区域建模能力,第二条路线试图摆脱固定类别集合,第三条路线则把人工交互和类别无关的区域生成扩展到大规模数据。未来的通用分割模型需要同时回答三个问题:
- 图像中有哪些稳定、完整的区域?
- 这些区域分别是什么,可以用怎样的语言描述?
- 在当前任务和提示下,用户真正关心哪一种粒度?
Mask2Former 解决了输出接口的统一,CLIP 提供开放语言语义,SAM 提供可提示的区域先验,但把三者简单串联并不等于问题已经解决。多模块系统仍会产生误差传播、特征不匹配和较高推理成本;单一统一模型则面临不同数据集标签冲突、任务相互干扰和训练数据质量不一致等困难。
9. 当前仍未解决的问题
1. 边界和小目标
mIoU 的提升不一定意味着边界更准确。高分辨率遥感、医学影像、自动驾驶中的细杆、交通标志和远处行人,都对输出步长和局部特征极其敏感。高分辨率推理又会显著增加显存和延迟。
2. 类别粒度并不唯一
同一区域可以被称为“动物”“狗”“金毛犬”,也可以进一步划分为头、身体和尾巴。固定数据集通常只提供一种粒度,开放词汇和提示式模型却必须根据上下文选择合适答案。
3. 开放世界中的 unknown
开放词汇模型可以接受新的类别文本,但这不代表它真正理解无限类别。模型仍可能把陌生物体强行归入某个已知类别,也很难判断何时应该输出 unknown。开放词汇、开放集和开放世界分割是相关但不完全相同的问题。
4. 跨域与长尾
自然图像上预训练的模型迁移到医学、遥感、水下、夜间或恶劣天气场景时,图像统计和类别定义都会改变。基础模型扩大了训练数据覆盖范围,却没有自动消除领域偏移。
5. 评测正在落后于能力
闭集 mIoU 很难评价文本类别泛化、交互效率、区域粒度、视频一致性和拒识能力。不同开放词汇工作使用的训练数据、类别映射和背景处理方式也可能不同,排行榜数字不总是公平可比。
6. 通用能力与部署成本
Mask2Former、开放词汇模型和 SAM 系列扩大了能力边界,但工业系统还需要考虑延迟、显存、吞吐、量化、输入分辨率和端侧部署。对于类别固定、环境稳定的任务,一个经过充分训练的 DeepLab、U-Net 或 SegFormer 仍可能比通用基础模型更合适。
总结
语义分割的发展可以被理解为输出表示和监督范围的不断扩张:
- FCN 把图像分类网络变成逐像素预测网络;
- U-Net 和编码器—解码器结构重新连接深层语义与浅层空间信息;
- DeepLab、PSPNet 和 HRNet分别从感受野、多尺度上下文和高分辨率表示改善 CNN 分割;
- Transformer 将全局关系建模变成基础操作,但最终仍吸收了层次结构和多尺度特征;
- MaskFormer 和 Mask2Former 把输出从像素分类改写为区域级 mask classification,并统一多种分割任务;
- CLIP 驱动的开放词汇方法让类别由语言动态定义;
- SAM 将类别无关、可提示的区域生成扩展成基础模型,并由 SAM 2 延伸到视频。
这条路线并不是新模型彻底淘汰旧模型。空洞卷积、跳跃连接、特征金字塔、高分辨率分支和 mask query,仍然以不同形式存在于现代系统中。真正发生变化的是:语义分割已经从“在固定数据集上给每个像素选一个类别”,逐渐走向“根据语言和交互提示,在开放世界中生成具有合适语义与粒度的区域”。