SegFormer:语义分割的优雅设计,以及 SAM 3 在哪些场景下更胜一筹
SegFormer 是 NVIDIA 在 NeurIPS 2021 上发表的一个语义分割模型。虽然发布已经快五年了,但它至今仍被广泛使用,尤其是在需要轻量、高效的语义分割场景中。前几天写了一篇关于 Meta SAM 3 的文章,正好借这篇来对比一下两者的定位差异。
SegFormer 的核心设计
SegFormer 的论文标题就已经说明了一切:Simple and Efficient Design for Semantic Segmentation with Transformers。整个模型的设计哲学就是「够用就好」。
编码器:分层 Transformer
SegFormer 的编码器叫 Mix Transformer(MiT),它借鉴了 CNN 的多尺度特征提取思路,分为多个 stage,逐步降低空间分辨率、增加通道数。每个 stage 都包含 Transformer block。
几个关键设计选择:
重叠的 Patch Embedding:与 ViT 使用不重叠的 patch 不同,SegFormer 让相邻 patch 之间有重叠区域,保留更多边界信息。对分割任务来说,边界处的信息至关重要。
高效自注意力(Efficient Self-Attention):标准自注意力的计算量是 O(N²),N 是 token 数。SegFormer 通过对 Key 和 Value 做空间降采样(reduction ratio),将复杂度降到近似线性。这让它能处理高分辨率输入而不爆显存。
去掉位置编码:这是一个大胆的选择。传统 ViT 依赖位置编码来感知空间关系,但位置编码在推理时遇到不同分辨率的图片会需要插值,表现不稳定。SegFormer 改用 FFN 中的 深度可分离卷积 来隐式编码位置信息。这让模型对不同分辨率的图片天然鲁棒。
解码器:All-MLP
这是 SegFormer 最让人惊讶的地方——解码器只用了几层 MLP。
从四个 stage 各取特征图,统一上采样到 1/4 分辨率,拼接后过一个 MLP 预测每个像素的类别。没有 FPN、没有 ASPP、没有 UNet 式的跳接。论文证明只要编码器足够好,简单的解码器就够了。
模型变体
SegFormer 提供 B0 到 B5 六个版本,参数量从 3.8M 到 84.7M,覆盖了从嵌入式设备到服务器的各种场景。B0 在 ADE20K 上能跑到 37.4 mIoU,B5 能到 51.0 mIoU,精度和效率的 trade-off 曲线非常漂亮。
SegFormer vs SAM 3:两种不同的思路
SegFormer 和 SAM 3 虽然都做分割,但它们的设计目标从根本上就不一样。
SegFormer 做的是什么
语义分割(Semantic Segmentation):给图中每个像素分配一个预定义类别(「道路」「建筑」「天空」等)。模型在训练时就知道一共有多少类,推理时只能预测这些类。
适用场景:自动驾驶道路场景解析、医学图像分割、遥感影像分类——这些都是类别已知、需要对整张图做密集预测的任务。
SAM 3 做的是什么
提示式分割(Promptable Segmentation):你通过点击、画框或输入文字告诉模型你想分割什么,它负责找到目标并精确勾出轮廓。没有固定的类别表,你可以说「把穿红衣服的人分割出来」。
适用场景:交互式标注、视频编辑中对特定目标的抠图、需要处理罕见类别的开放场景。
SAM 3 比 SegFormer 好的场景
| 场景 | 为什么 SAM 3 更合适 |
|---|---|
| 目标类别不在预定义列表中 | SegFormer 只能预测训练时见过的类别;SAM 3 支持开放词汇,什么都能分 |
| 视频中跟踪特定目标 | SegFormer 是单帧模型;SAM 3 原生支持视频跟踪,帧间一致性好 |
| 交互式标注 | SAM 3 支持点击、画框、文字等多种提示方式,非常适合人工辅助标注 |
| 少量特定目标的精细分割 | 你只关心画面里的某一两个东西,SAM 3 可以精准定位;SegFormer 必须对全图做密集预测 |
| 开放域应用 | 比如「帮我把这张照片里所有动物都圈出来」,SAM 3 可以做,SegFormer 做不了(除非训练集包含了这些动物类别) |
SegFormer 仍然更好的场景
| 场景 | 为什么 SegFormer 更合适 |
|---|---|
| 固定类别的密集分割 | 自动驾驶需要同时知道每个像素是「道路/车辆/行人/天空/…」,SegFormer 一次推理全搞定 |
| 边缘设备部署 | B0 版本 3.8M 参数,可以跑在移动端;SAM 3 需要 GPU |
| 延迟敏感场景 | SegFormer 推理极快(尤其小版本),适合实时系统 |
| 不需要交互的批量处理 | 有 1 万张遥感图需要做土地分类,SegFormer 直接跑就行,不需要逐个提示 |
总结
一句话概括:SegFormer 是专科医生,SAM 3 是全科医生。
SegFormer 在固定类别、密集预测、效率优先的场景下依然是最佳选择之一。它的设计简洁优雅,五年后看仍然不过时。而 SAM 3 打开的是一个完全不同的维度——通用性和灵活性,代价是更大的计算开销和对交互/提示的依赖。
在实际项目中,两者完全可以互补:用 SegFormer 做自动化的批量语义分割,用 SAM 3 处理那些超出预定义类别的长尾需求。
参考资料: