SAM 3: Segment Anything with Concepts —— 技术精读报告

论文:SAM 3: Segment Anything with Concepts

作者: Nicolas Carion、Laura Gustafson、Yuan-Ting Hu 等

团队: Meta Superintelligence Labs

关键词: SAM3、概念分割、ViT、DETR、提示融合

论文: arXiv | 代码: facebookresearch/sam3 | 官方介绍: Meta

Carion, N., Gustafson, L., Hu, Y.-T. et al. (2025). SAM 3: Segment Anything with Concepts. arXiv:2511.16719.

SAM3 由 Meta 的 Meta Superintelligence Labs 团队于 2025 年 11 月 19 日发布。本文主要围绕图像分支的架构与特征流的技术细节展开:从 ViT 和 FPN / Neck,到提示融合、Object Query、box 迭代更新以及 mask 生成,结合源码和特征尺寸梳理各模块之间的关系。目前尚未展开视频跟踪部分。

------ 预计阅读时间约 10--15 分钟。

摘要

SAM3 是 Meta 在 SAM 系列上的进一步扩展:它不再只是"给点/框后抠出一个 mask"的图像分割模型,而是统一处理 图像和视频中的检测、分割、跟踪 ,并支持文本、exemplar、visual prompt 等更高层的目标提示;SAM 的发展可以概括为:SAM1 提出 promptable segmentation,用点、框、mask 等提示在图像中分割任意目标,并基于 1100 万图像、10 亿级 masks 训练,核心价值是强 zero-shot 分割能力;SAM2 把能力从图像扩展到视频,引入适合视频的实时交互分割和 streaming memory;SAM3 则进一步从"交互式分割某个目标"走向"根据概念找出所有相关目标并分割/跟踪",也就是更接近 open-vocabulary detection + segmentation + tracking 的统一模型。

SAM 的发展

  1. SAM 1

    图片 + 点/框 → 一个目标 mask

  2. SAM 2

    图片/视频 + 点/框 → 一个目标 mask,并在视频中跟踪

  3. SAM 3

    图片/视频 + "red cup" → 所有符合 red cup 的 box + mask + identity

SAM3 核心架构

1. 图像特征处理

python 复制代码
vit_backbone = _create_vit_backbone(...)
vit_neck = _create_vit_neck(position_encoding, vit_backbone, ...)
return vit_neck

ViT - 主体特征提取器

输入图像切成 patch,再通过 Transformer block(sam3是32个) 提取高层视觉语义特征。比如边缘、纹理、部件、物体区域之间的关系,都会在这里被编码。源码里 _create_vit_backbone() 创建的是 ViT(...),参数包括 img_size=1008、patch_size=14、embed_dim=1024、depth=32、num_heads=16

FPN / Neck - 特征适配层

接在 ViT 后面,把 ViT 的输出整理成后续模块更容易使用的视觉特征。即提前准备"不同尺度的纯图像特征" 。源码注释写的是 Create ViT neck for feature pyramid,并返回 Sam3DualViTDetNeck,里面设置了 d_model=256 和多个 scale_factors=[4.0, 2.0, 1.0, 0.5]

以 504×504 输入、ViT 输出 36×36×1024 feature map 为例,经过不同支路并最后统一成 256 通道,得到如下结果

完整变换过程(并行)

特征层 完整变换过程(after ViT backbone) size = 36×36×1024 最终尺寸
FPN0 36×36×1024 → (可学习的上采样ConvTranspose 2×2,s=2 )→ 72×72×512 → GELU →(再次经过可学习的上采样 ConvTranspose 2×2,s=2 )→ 144×144×256 → 1×1 Conv (256→256) → 3×3 Conv (256→256) 144×144×256
FPN1 36×36×1024 → (可学习的上采样ConvTranspose 2×2,s=2 )→ 72×72×512 → 1×1 Conv (512→256) → 3×3 Conv (256→256) 72×72×256
FPN2 36×36×1024 → 1×1 Conv (1024→256) → 3×3 Conv (256→256) 36×36×256
  • 可学习的上采样:转置卷积的参数------可学习的上采样算子通过 mask loss 训练(最终 mask 和 GT mask 计算 loss,梯度一路反传回来),学会把一个粗网格里的特征分配到更细的子位置上,而不是简单复制。它不能恢复已经丢失的原始像素,通过训练学习更适合分割的高分辨率表示。
  • 3×3 Conv :同时看到当前位置周围 3×3 的区域,用于进一步做局部空间特征融合 。(padding=1、stride=1,所以高宽完全不变,通道保持)
  • 1×1 Conv :主要负责统一通道/投影(FPN0 两次通道变化来自两层转置卷积)

简单说,FPN0/FPN1 独立分支通过可学习上采样,形成更高分辨率的空间与边界表示

2. 文本特征处理

3. 统一三类Prompt

  • txt_feats 文本提示,例如 "cat"
  • geo_feats 几何提示,例如 box / point
  • visual_prompt_embed 视觉示例提示,例如 exemplar 的特征

源码 _encode_prompt() 最后:

python 复制代码
prompt = torch.cat([txt_feats, geo_feats, visual_prompt_embed], dim=0)

Fusion Encoder - 语义融合

假设输入文本 prompt 为 "cup",Text Encoder 输出固定长度的文本特征 32×256;同时视觉端得到 FPN2:36×36×256,展平为 1296×256 个 image tokens,并加入位置编码。Grounding Encoder 让 image tokens 先通过 Self-Attention 在图像内部交换信息,再通过 Cross-Attention 读取 32×256 的文本特征,并经过 FFN 更新。多层处理后,尺寸仍为 1296×256,但这些特征已经被 "cup" 的语义条件化。

Transformer Decoder / Object Query

接下来,一组可学习的 Object Queries 去读取上文的 1296×256 Tokens(Grounded Image Tokens),并结合文本信息寻找具体实例。每个 Query 最终得到一个 256D 的实例表示(1×256),可以理解为:"这个 Query 找到了一个可能的 cup,并编码了它的位置和目标信息"。这些 Object Queries 随后用于类别、box 和 mask 的预测。

iterative box refinement(迭代框回归): 每一层 Transformer Decoder/ DETR Decoder 都先根据当前 query 特征,通过一个小的 MLP box head 预测 4 个 box 修正量,然后把这个修正量加到当前 reference box 上,得到新的 box,再交给下一层继续修。最后 Decoder 输出的 Query 才继续进入 Segmentation Head

Segmentation Head - 真正生成 mask 的部分

PixelDecoder + MaskPredictor

  • PixelDecoder:以 504×504 输入、FPN2/FPN1/FPN0 = 36×36 / 72×72 / 144×144 为例,首先把 Grounding Encoder 得到的 1296×256 重新还原成 36×36×256,作为新的 FPN2 特征;PixelDecoder 再逐级上采样:依次融合 FPN1、FPN0,得到兼具文本目标信息和高分辨率空间细节的 144×144×256 pixel feature map。
  • MaskPredictor:与此同时,每个 Transformer Decoder 输出的 Object Query 1×256经过一个 MLP,变成一个 256D 的 mask embedding。最后,这个 1×256 向量与 144×144×256 feature map 的每个位置做点积,得到 144×144 的 mask logits,再上采样到最终 504×504 mask。

Box行为

SAM3 的 box 先在 0,1 的归一化坐标空间里维护一组 reference box,DETR Decoder 每一层都会预测新的偏移并迭代更新这些 box;最后得到最终的归一化 box 后,再乘上原图的宽高,恢复成原图中的实际像素坐标,从而实现分割效果。

小结

SAM3 将"根据概念寻找目标"与实例级分割结合起来,能够通过文本或视觉示例提示,检测并分割图像中符合描述的多个目标。使用户能够用"红色杯子"等描述指定目标,并同时获得目标框和分割区域。基于这些能力,SAM3 可用于可为机器人操作提供目标位置与区域信息,作为后续决策的感知输入。

声明

原创独立文章,内容可能存在疏漏或偏差,具体技术细节请以论文原文及对应版本的官方代码为准。文中引用的论文插图与代码片段来自原论文及官方项目,个人绘制的示意图用于辅助理解,部分细节有所简化。文字润色、材料整理及部分示意图制作借助了 AI。若有理解或表述不当之处,欢迎交流指正。