SAM3 与开放词表分割


文档摘要

SAM3 与开放词表分割 本节摘要:给模型一段文本提示和一张图,就能拿到每个匹配物体的掩码——SAM 3 让这一切在单次前向里完成。本节区分 SAM(仅视觉提示)、Grounded SAM/SAM 2(检测器+SAM 级联)与 SAM 3(经「可提示概念分割」原生支持文本提示)三代;讲清 SAM 3 的架构(共享主干 + 图像检测器 + 基于记忆的视频跟踪器 + 存在性头 + 解耦的检测-跟踪设计)、2026 年 3 月 Object Multiplex 更新如何高效跟踪同概念的多个实例;用 Hugging Face 跑文本提示的检测、分割、视频跟踪;并在 SAM 3、Grounded SAM 2、YOLO-World、SAM-MI 间按延迟、概念复杂度、部署目标做选择。

SAM3 与开放词表分割

本节摘要:给模型一段文本提示和一张图,就能拿到每个匹配物体的掩码——SAM 3 让这一切在单次前向里完成。本节区分 SAM(仅视觉提示)、Grounded SAM/SAM 2(检测器+SAM 级联)与 SAM 3(经「可提示概念分割」原生支持文本提示)三代;讲清 SAM 3 的架构(共享主干 + 图像检测器 + 基于记忆的视频跟踪器 + 存在性头 + 解耦的检测-跟踪设计)、2026 年 3 月 Object Multiplex 更新如何高效跟踪同概念的多个实例;用 Hugging Face transformers 跑文本提示的检测、分割、视频跟踪;并在 SAM 3、Grounded SAM 2、YOLO-World、SAM-MI 间按延迟、概念复杂度、部署目标做选择。读完本节,你理解了 2D 分割、检测、图文落地如何合并进一个模型。

对应原课程:Phase 4 · Lesson 24 · sam3-open-vocab-segmentation(原英文 phases/04-computer-vision/24-sam3-open-vocab-segmentation/docs/en.md)。

学习目标

阅读完本节,你应当能够:

  1. 区分 SAM(仅视觉提示)、Grounded SAM / SAM 2(检测器 + SAM)与 SAM 3(经「可提示概念分割」原生文本提示)。
  2. 解释 SAM 3 架构:共享主干 + 图像检测器 + 基于记忆的视频跟踪器 + 存在性头 + 解耦的检测-跟踪设计。
  3. 用 Hugging Face transformers 的 SAM 3 集成做文本提示的检测、分割、视频跟踪。
  4. 按延迟、概念复杂度、部署目标,在 SAM 3、Grounded SAM 2、YOLO-World、SAM-MI 间选择。

一、问题与直觉

2023 年的 SAM 是个仅视觉提示的模型:你点一个点或画一个框,它返回一个掩码。要「给我这张照片里所有的橙子」,你需要一个检测器(Grounding DINO)产出框,再用 SAM 分割每一个。Grounded SAM 把这变成流水线,但它是两个冻结模型的级联,误差累积不可避免。

SAM 3(Meta,2025 年 11 月,ICLR 2026)把级联折叠了。它接受短名词短语或图像范例作提示,在单次前向里返回所有匹配掩码和实例 ID——这就是可提示概念分割(Promptable Concept Segmentation, PCS)。配合 2026 年 3 月的 Object Multiplex 更新(SAM 3.1),它能高效地在视频里跟踪同一概念的多个实例。

本节讲的是这次结构性转变。2D 分割、检测、图文落地已合并进一个模型。生产问题不再是「我该串起哪条流水线」,而是「哪个可提示模型端到端地处理我的用例」。

三代演进

可提示概念分割

「概念提示」是短名词短语(「黄色校车」「条纹红伞」「握着杯子的手」)或图像范例。模型为图中每个匹配概念的实例返回分割掩码,外加每个匹配的唯一实例 ID。

这与经典视觉提示 SAM 有三点不同:

  1. 无需逐实例提示——一个文本提示返回所有匹配。
  2. 开放词表——概念可以是自然语言能描述的任何东西。
  3. 一次返回多个实例,而非每提示一掩码。

关键架构部件

  • 共享主干——单个 ViT 处理图像,检测头和基于记忆的跟踪器都从它读取。
  • 存在性头——预测概念在图中是否存在,把「这在不在这」与「它在哪」解耦,降低概念缺失时的假阳性。
  • 解耦的检测-跟踪——图像级检测和视频级跟踪用独立头,互不干扰。
  • 记忆库——跨帧存每实例特征用于视频跟踪(与 SAM 2 同机制)。

大规模训练

SAM 3 在 400 万个独特概念上训练,概念由数据引擎用 AI + 人工审核迭代标注纠正生成。新 SA-CO 基准含 27 万独特概念,比先前基准大 50 倍。SAM 3 在 SA-CO 上达人类性能的 75~80%,在图像+视频 PCS 上比现有系统翻倍。

SAM 3.1 Object Multiplex

2026 年 3 月更新:Object Multiplex 引入共享记忆机制,一次联合跟踪同一概念的多个实例。以前跟踪 N 个实例要 N 个独立记忆库,Multiplex 折叠成一个带每实例查询的共享记忆,结果:多目标跟踪大幅提速且不掉精度。

2026 年 Grounded SAM 仍有用的地方

  • 需要换特定开放词表检测器时(DINO-X、Florence-2)。
  • SAM 3 授权(HF 上 gated)是阻碍时。
  • 需要比 SAM 3 暴露的更多检测器阈值控制时。
  • 对检测器组件做研究 / 消融时。

模块化流水线仍有位置。多数生产工作里,SAM 3 是更简单的答案。

YOLO-World vs SAM 3

  • YOLO-World——仅开放词表检测器(无掩码),实时,要高 fps 框时最佳。
  • SAM 3——完整分割 + 跟踪,慢但输出更丰富。

生产分工:YOLO-World 给只要检测的快流水线(机器人导航、快仪表盘),SAM 3 给任何要掩码或跟踪的场景。

SAM-MI 提效

SAM-MI(2025-2026)解决 SAM 的解码器瓶颈,关键思想:

  • 稀疏点提示——用少数精选点而非稠密提示,解码器调用减 96%。
  • 浅层掩码聚合——把粗掩码预测合并成一张更锐的掩码。
  • 解耦掩码注入——解码器接收预算好的掩码特征,而非重跑。

结果:开放词表基准上比 Grounded-SAM 快约 1.6 倍。

三模型的输出格式

都返回同一通用结构(框+标签+分数+掩码+ID),这很有用——下游流水线不必按跑了哪个模型分支。

二、从零实现

步骤 1:提示构造

建一个助手,把用户句子转成 SAM 3 概念提示列表。这是「用户打的字」与「模型消费的」之间的边界。

def split_concepts(sentence): """ 多概念提示的启发式切分器,返回短名词短语列表。 """ for sep in [",", ";", "and", "or", "&"]: if sep in sentence: parts = [p.strip() for p in sentence.replace("and ", ",").split(",")] return [p for p in parts if p] return [sentence.strip()] print(split_concepts("cats, dogs and balloons"))

SAM 3 每次前向接受一个概念;多概念查询时循环或批处理。

步骤 2:后处理助手

把 SAM 3 的原始输出转成匹配第 16 节流水线契约的干净检测列表。

from dataclasses import dataclass from typing import List @dataclass class ConceptDetection: concept: str instance_id: int box: tuple # (x1, y1, x2, y2) score: float mask_rle: str # 游程编码 def rle_encode(binary_mask): flat = binary_mask.flatten().astype("uint8") runs = [] prev, count = flat[0], 0 for v in flat: if v == prev: count += 1 else: runs.append((int(prev), count)) prev, count = v, 1 runs.append((int(prev), count)) return ";".join(f"{v}x{c}" for v, c in runs)

RLE 让即便多张高分辨率掩码的响应载荷也小。同一格式跨 SAM 2、SAM 3、Grounded SAM 2 通用。

步骤 3:统一开放词表分割接口

把任意后端(SAM 3、Grounded SAM 2、YOLO-World + SAM 2)藏在单一方法后,下游代码在后端更换时不变。

from abc import ABC, abstractmethod import numpy as np class OpenVocabSeg(ABC): @abstractmethod def detect(self, image: np.ndarray, concept: str) -> List[ConceptDetection]: ... class StubOpenVocabSeg(OpenVocabSeg): """ 未加载真实模型时用于流水线测试的确定性桩。 """ def detect(self, image, concept): h, w = image.shape[:2] return [ ConceptDetection( concept=concept, instance_id=0, box=(w * 0.2, h * 0.3, w * 0.5, h * 0.8), score=0.89, mask_rle="0x100;1x50;0x200", ), ConceptDetection( concept=concept, instance_id=1, box=(w * 0.55, h * 0.25, w * 0.85, h * 0.75), score=0.74, mask_rle="0x80;1x40;0x220", ), ]

真实的 SAM3OpenVocabSeg 子类会包装 transformers.Sam3ModelSam3Processor

步骤 4:Hugging Face SAM 3 用法(参考)

真实模型用 transformers 集成:

from transformers import Sam3Processor, Sam3Model import torch processor = Sam3Processor.from_pretrained("facebook/sam3") model = Sam3Model.from_pretrained("facebook/sam3").eval() inputs = processor(images=pil_image, return_tensors="pt") inputs = processor.set_text_prompt(inputs, "yellow school bus") with torch.no_grad(): outputs = model(**inputs) masks = processor.post_process_masks( outputs.masks, inputs.original_sizes, inputs.reshaped_input_sizes ) boxes = outputs.boxes scores = outputs.scores

一个提示,一次调用返回所有匹配。

步骤 5:衡量 Grounded SAM 2 白送了什么

诚实基准:在真实流水线里把 Grounded SAM 2 换成 SAM 3 会怎样?

  • 延迟:SAM 3 省一次前向(无独立检测器),但模型本身更重,通常净持平或略快。
  • 精度:SAM 3 在稀有或组合概念(「条纹红伞」)上明显更好,常见单词概念上相近。
  • 灵活性:Grounded SAM 2 可换检测器(DINO-X、Florence-2、Grounding DINO 1.5);SAM 3 是单体。

结论:SAM 3 是 2026 开放词表分割的默认;需要检测器灵活性或不同授权条款时,Grounded SAM 2 仍是对的选择。

三、框架对比

生产部署模式:

  • 实时标注——SAM 3 + CVAT 的「以文本提示标注」特性,标注员选标签名,SAM 3 预标每个匹配实例,再审核纠正。
  • 视频分析——SAM 3.1 Object Multiplex 做多目标跟踪,把帧喂给基于记忆的跟踪器。
  • 机器人——SAM 3 做开放词表操作(「拿起红杯子」),作为规划原语跑。
  • 医学影像——SAM 3 在医学概念上微调,HF 上需申请访问。

Ultralytics 在其 Python 包里包装了 SAM 3:

from ultralytics import SAM model = SAM("sam3.pt") results = model(image_path, prompts="yellow school bus")

与 YOLO、SAM 2 同接口。

四、可复用产物

本节产出两个可复用文件(位于原课程 outputs/):

  • prompt-open-vocab-stack-picker.md:按延迟、概念复杂度、授权,在 SAM 3 / Grounded SAM 2 / YOLO-World / SAM-MI 间挑。
  • skill-concept-prompt-designer.md:把用户话语转成格式良好的 SAM 3 概念提示(切分、消歧、降级)。

五、练习

  1. (简单) 在 10 张图上用你选的概念提示跑 SAM 3,与 SAM 2 + Grounding DINO 1.5 在同图对比,报告各自漏了哪些概念。
  2. (中等) 在 SAM 3 上搭「点击纳入/点击排除」UI:文本提示返回候选实例,用户点击保留哪些算正,最终概念集以 JSON 输出。
  3. (困难) 在自定义概念集(如 5 类电子元件)上,每类 20 张标注图微调 SAM 3,与零样本 SAM 3 在同测试集对比,测量掩码 IoU 提升。

本节要点回顾

  1. 三代演进:SAM(仅视觉提示)→ Grounded SAM/SAM 2(检测器+SAM 级联,误差累积)→ SAM 3(单次前向原生文本提示)。
  2. 可提示概念分割(PCS)——短名词短语或图像范例,一次返回所有匹配实例掩码+ID。
  3. 三大不同:无需逐实例提示、开放词表、一次多实例。
  4. SAM 3 架构四件:共享主干、存在性头(把「在不在」与「在哪」解耦)、解耦检测-跟踪、记忆库(跨帧跟踪)。
  5. 400 万概念训练 + SA-CO 基准(27 万概念,大 50 倍),达人类 75~80%。
  6. SAM 3.1 Object Multiplex——共享记忆一次跟踪同概念多实例,大幅提速不掉精度。
  7. Grounded SAM 2 仍有用:换检测器、授权阻碍、阈值控制、研究消融。
  8. YOLO-World vs SAM 3:前者仅检测实时无掩码,后者分割+跟踪更丰富;分工明确。
  9. SAM-MI 提效 1.6×:稀疏点提示、浅层掩码聚合、解耦掩码注入,解码器调用减 96%。
  10. 三模型同一输出结构——下游不必按模型分支;SAM 3 是 2026 开放词表分割默认。

下一节进入视觉语言模型——把视觉编码器接到 LLM 上,让模型看图说话、读图推理、图文对话。


发布者: 作者: Rohit Gupta 转发
评论区 (0)
U