SAM 3:Meta 开源第三代分割一切模型
posts posts 2026-05-23T13:09:23+08:00SAM 3 是 Meta 开源的第三代 Segment Anything Model,在图像和视频分割任务上进一步提升精度和效率,支持零样本泛化。技术笔记AI, 计算机视觉, 开源, 图像分割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 在接口上兼容,但在编码器一侧做了两件事:
- ViT 骨干蒸馏:把 SAM 2 的 ViT-H 教师模型蒸馏到一个更小的学生模型,参数量约为原来的 60%,但 mask 质量损失控制在 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 分支后:
- 体素化:点云被映射到固定分辨率的 3D 网格,每个非空体素记为特征向量。
- 稀疏 3D 编码器:多层稀疏卷积提取多尺度 3D 特征,输出 3D feature volume。
- 提示投影:用户给的点坐标(世界坐标或归一化坐标)被投影到体素空间,编码为 3D prompt embedding。
- 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 和法向量属性 |
| OFF | mesh | 三角面片格式 |
| OBJ | mesh | 需配合材质文件 |
多模态提示:不只是点
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 1 | 2023 | 分割一切,零样本泛化 | SA-1B 数据集(1100 万张图像、10 亿 mask)带来的数据规模优势 | 2D 静态图像;视频或 3D 场景需额外适配 |
| SAM 2 | 2024 | 视频分割,实时处理 | 时序记忆模块让帧间 mask 传播可学习,不再依赖手工光流 | 视频序列;3D 场景需逐帧处理后拼接,边界一致性差 |
| SAM 3 | 2025 | 3D + 点云 + 多模态提示 | 稀疏 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