目录

SAM 3:Meta 开源第三代分割一切模型

SAM 3 (Segment Anything Model 3): Meta 开源的第三代分割一切模型

分类: CV · 图像分割 Stars: 10,061 地址: https://github.com/facebookresearch/sam3 官网: https://ai.meta.com/sam/

SAM 3 不只是 SAM 2 的升级版。它真正的分水岭在于:从“在 2D 图像里把东西圈出来”跨到了“在 3D 世界里理解物体的空间边界”。点云、mesh、NeRF 场景都可以直接丢进去做分割,而且模型更小、跑得更快。


阅读指引

下面按 SAM 3 的 2D 管线、3D 管线和多模态提示三条主线拆开,用一个"自驾场景点云分割"案例把管线串起来,再对照 SAM 1/2/3 的演进解释各代在精度和泛化上的差异来源。最后给出什么时候该上 SAM 3、什么时候 SAM 2 就够用的判断。

读完下面这些问题应该有答案:

  • SAM 3 的 2D 分支和 3D 分支分别在什么结构层级分叉,各自由什么编码器负责。
  • 一条点云数据从输入到输出 mask 会经过哪些阶段。
  • SAM 系列三代之间的精度提升主要来自架构变动还是数据规模。
  • 显存 8 GB 的机器能不能跑 SAM 3 的 3D 分支。

系统地图:三条主线

SAM 3 内部不是一条流水线打到底。它有三条在编码器阶段就分叉的主线:

主线输入模态编码器解码器
2D 图像分割RGB 图像ViT-based 图像编码器共享 mask 解码器
3D 点云 / mesh 分割点云 (PLY/OFF)、3D mesh稀疏 3D 编码器共享 mask 解码器
多模态提示文本 / bbox / 涂鸦文本编码器 + 几何编码器共享 mask 解码器

三条线共享同一个 mask 解码器,区别全在编码器阶段。SAM 3 比 SAM 2 更轻量的原因也在这里:不是砍了解码器,而是 3D 编码器用了稀疏卷积,2D 编码器也做了蒸馏压缩。


2D 分支:继承与压缩

2D 图像分割是 SAM 系列的起家本领。SAM 3 的 2D 管线与 SAM 2 在接口上兼容,但在编码器一侧做了两件事:

  1. ViT 骨干蒸馏:把 SAM 2 的 ViT-H 教师模型蒸馏到一个更小的学生模型,参数量约为原来的 60%,但 mask 质量损失控制在 2% 以内。
  2. 提示编码统一:无论你给的是点、框还是涂鸦,都先进同一个几何提示编码器,输出统一的 prompt embedding,再与图像 embedding 一起送入 mask 解码器。
from sam3 import SAM3

sam = SAM3(model_type="vit_h")
mask = sam.predict(image="photo.jpg", points=[[100, 200]], labels=[1])

这段代码背后实际走了以下步骤:图像编码器生成 image embedding → 提示编码器把点坐标转成 prompt embedding → mask 解码器对两者做交叉注意力 → 输出 mask 和置信度分数。


3D 分支:从像素到体素

这是 SAM 3 最大的增量。3D 分支的编码器不是把 2D ViT 简单升维,而是专门设计的稀疏 3D 卷积网络,直接处理体素化的点云或 mesh。

为什么用稀疏卷积

点云天然稀疏——一帧 LiDAR 点云可能有 10 万个点,但体素化后 90% 以上的体素是空的。用密集 3D 卷积会把显存吃满;稀疏卷积只对非空体素做计算,同等显存下可以处理更高分辨率的场景。

数据流

一条 .ply 点云文件进入 SAM 3 的 3D 分支后:

  1. 体素化:点云被映射到固定分辨率的 3D 网格,每个非空体素记为特征向量。
  2. 稀疏 3D 编码器:多层稀疏卷积提取多尺度 3D 特征,输出 3D feature volume。
  3. 提示投影:用户给的点坐标(世界坐标或归一化坐标)被投影到体素空间,编码为 3D prompt embedding。
  4. Mask 解码:3D feature volume 与 prompt embedding 做交叉注意力,输出每个体素的 mask 概率。
from sam3 import SAM3PointCloud

sam_pc = SAM3PointCloud()
masks = sam_pc.predict(point_cloud="scene.ply", points=[[0.1, 0.2, 0.3]])

支持的数据格式

格式类型说明
PLY点云最常用,支持 RGB 和法向量属性
OFFmesh三角面片格式
OBJmesh需配合材质文件

多模态提示:不只是点

SAM 系列的提示机制从 SAM 1 的“点 + 框”扩展到了 SAM 3 的“文本 + 几何”。你可以用自然语言描述要分割的对象,模型会找到对应的区域。

实际使用时,文本提示和几何提示可以叠加——比如用文本指定“红色轿车”,再用框限定 ROI(感兴趣区域),两个提示的 embedding 在解码器阶段做加权融合。这比单独用点或单独用文本的召回率高出一截。


一个完整案例:自驾场景的点云分割

假设你有一帧来自 Velodyne LiDAR 的街景点云 street.ply,想把所有行人从场景里分离出来。

步骤 1:加载模型

from sam3 import SAM3PointCloud

sam = SAM3PointCloud()

步骤 2:用文本提示做初筛

masks = sam.predict(point_cloud="street.ply", text="pedestrian")

模型会在点云里找到所有可能是行人的点簇,返回一组 mask。这一步用的是文本编码器把 “pedestrian” 映射到与 3D 特征对齐的语义空间。

步骤 3:用点提示做精修

如果某个行人的 mask 边界不够精确——比如相邻的两个行人被合并了——可以在被合并区域的中间补一个负样本点:

masks = sam.predict(
    point_cloud="street.ply",
    points=[[12.3, -5.1, 1.2]],
    labels=[0],  # 0 = 负样本,告诉模型这里不是目标
)

这个案例里,文本提示负责语义层面的召回,点提示负责实例级的边界精修——两条提示线在解码器里协同工作,而不是互相替代。


SAM 系列三代演进

不要把这张表当成成绩单看。每代的精度提升来源不同,代表的能力也不一样。

版本时间核心突破精度来源适用边界
SAM 12023分割一切,零样本泛化SA-1B 数据集(1100 万张图像、10 亿 mask)带来的数据规模优势2D 静态图像;视频或 3D 场景需额外适配
SAM 22024视频分割,实时处理时序记忆模块让帧间 mask 传播可学习,不再依赖手工光流视频序列;3D 场景需逐帧处理后拼接,边界一致性差
SAM 320253D + 点云 + 多模态提示稀疏 3D 编码器直接吃体素,文本-几何双提示联合解码2D 图像、3D 点云、mesh;视频场景建议仍用 SAM 2

SAM 1 的精度来自数据量,SAM 2 的精度来自时序建模,SAM 3 的精度来自编码器的结构升级和提示机制的扩展。三者不是线性升级关系——如果你的任务就是 2D 视频分割,SAM 3 不一定比 SAM 2 好。


安装

pip install sam3
# 或
git clone https://github.com/facebookresearch/sam3
cd sam3 && pip install -e .

适用场景

场景SAM 3 能做什么不建议做什么
自动驾驶实时分割道路场景中的车辆、行人、路牌;点云和图像可联合推理不要拿 3D 分支去跑摄像头 2D 数据——用 2D 分支更快
医学影像CT/MRI 的器官和病灶 3D 分割,比切片级 2D 分割更连续灰度值分布异常的影像需先做窗宽窗位归一化
AR/VR实时场景理解和物体分离,3D mesh 分割后可直接用于遮挡计算动态场景的实时 3D 分割对帧率敏感,需评估推理延迟
机器人抓取点云分割定位目标物体,配合抓取位姿估计透明或反光物体点云质量差,需先用深度补全

注意事项与常见问题

显存

3D 分支建议 16 GB 以上显存。如果只有 8 GB,仍然可以跑 2D 分支和轻量 3D 场景(点云点数 < 5 万),但大规模街景点云会触发 OOM(显存溢出)。

模型下载

预训练权重文件较大,首次运行时自动下载。国内用户建议配置 Hugging Face 镜像或手动下载后指定本地路径。

点云格式

支持 PLY、OFF 格式。点云需包含坐标字段(x, y, z),RGB 字段可选但有助于分割质量。

文本提示的语言

文本提示目前以英文为主,中文描述的效果未经充分验证。建议用简短的英文短语(如 “red car” 而非 “那辆红色小轿车”)。

为什么点云分割有时候会把地面和物体混在一起?

地面点云通常是连续的大平面,稀疏卷积在下采样阶段可能把地面和紧贴地面的物体(如轮胎底部)合并到同一个体素里。解法是预处理阶段先做地面去除(ground removal),或者给地面点添加负样本提示。


什么时候该上 SAM 3

  • 你的数据本身就是 3D 的(点云、mesh、CT 体积)→ 直接上 SAM 3,不要用 SAM 2 逐帧处理再拼接。
  • 你需要文本 + 几何联合提示做分割 → SAM 3。
  • 你主要跑 2D 视频分割 → 继续用 SAM 2,SAM 3 在这一场景没有明显优势。
  • 你的设备显存不到 8 GB → 先跑 SAM 2 的轻量版,或者等 SAM 3 的量化版本。

SAM 3 更值得看的地方在“把分割从 2D 平面拉进了 3D 空间”。如果你的任务没有 3D 需求,升级的收益有限。


相关工具: Supervision