跳转至

SAM3 与 VLM:Visual Prompting 与 Grounding

LaTeX 源码 · 备用 PDF

字段 内容
作者/整理 基于公开课程资料整理
来源 五道口纳什
日期 2025

SAM3 与 VLM:Visual Prompting 与 Grounding

引言:多模态的新世界

本期是 Modern Agents 系列中第一次正式介绍 VLM(Vision-Language Model,视觉语言模型)。课程围绕三大主题展开:

  1. SAM3:Meta 发布的 Segment Anything Model 3,用于经典 CV 任务——检测、分割、识别;
  2. SAM3 Agent:将 VLM 与 SAM3 结合,实现视觉问答(VQA)与 Visual Grounding;
  3. Gemini 2.5 Flash 原生多模态:端到端的对话式检测分割识别。

从数字世界到物理世界

多模态视觉能力让语言模型"插上眼睛",打开了通往物理世界的大门。Embodied AI、Robotics 等更广阔的应用场景,都依赖于模型对图像中物体的检测、分割与识别能力。

Visual Prompting:视觉提示的新范式

什么是 Visual Prompting

Visual Prompting 的核心理念是:与其用文字告诉 AI 找什么,不如直接在图片里标注。具体的视觉线索(Visual Cues)包括:

  • 点标注(Point Prompt):在图片上指定一个点
  • 框标注(Bounding Box Prompt):画一个矩形框
  • 涂鸦标注(Scribble):自由涂画区域
  • 文本标注:在图片上写文字说明

这些视觉线索引导模型完成特定的视觉任务,如 VQA、图像分割、目标检测等。在图像生成领域,用户也可以通过在图片中框选区域并写上文字,来指导视觉生成模型做更精确的编辑。

Visual Prompting 的本质

Visual Prompting 是一种将人类的视觉意图直接编码到图像中的交互方式。它弥补了纯文本 Prompt 在空间定位上的不足——某些视觉任务(如"最左边的那个蓝色物体")用文字描述既冗长又容易歧义,而直接在图上标注则直观明了。

Visual Prompting 与 Visual Grounding

Visual Grounding 是 Visual Prompting 的逆过程:

  • Visual Prompting:人在图上标注 \(\rightarrow\) 引导模型理解
  • Visual Grounding:模型理解文本 \(\rightarrow\) 在图上定位(框出/分割出目标)

两者结合形成了完整的"视觉对话"闭环。

本章小结

Visual Prompting 将传统的文本提示扩展到视觉维度,为 CV 任务提供了更自然、更精确的人机交互方式。它是理解 SAM3 与 VLM 协作的基础概念。

SAM3:Segment Anything Model 3

SAM3 相比 SAM1/SAM2 的进化

SAM(Segment Anything Model)系列是 Meta 推出的通用分割模型。SAM3 相比前两代的关键进化在于支持了文本 Prompt 输入

能力 SAM1 SAM2 SAM3
点/框 Prompt 分割
视频分割 \(×\)
文本 Prompt 分割 \(×\) \(×\)
识别(输出 Label) \(×\) \(×\)
SAM 系列能力对比

SAM3 不是 VLM

SAM3 虽然支持文本输入,但它只接受简单的名词短语(如 "cat"、"person"、"shoe"),而非自然语言句子。它不支持列表输入(如 "cat, remote"),也不支持复杂的修饰语。需要一次识别多类物体时,必须逐个遍历类别名称。

SAM3 的使用流程

SAM3 的基本使用非常简洁:

  1. 通过 build_model 加载 SAM3 模型(约 3.3GB,自动下载到 HuggingFace Hub 目录)
  2. 将模型放到 CUDA 设备上
  3. 构建 Processor,传入图像和文本 Prompt
  4. 获取输出:Mask(分割掩码)、Bounding Box、置信度分数
SAM3 基本使用示例(伪代码)
# 构建模型
model = build_sam3_model()
model.to("cuda")

# 构建 Processor
processor = SAM3Processor(model)

# 读取图片并推理
image = load_image(url)
with torch.inference_mode():
    outputs = processor(image, text_prompt="remote")
    # outputs 包含: masks, bounding_boxes, confidence_scores

SAM3 实例级分割示例

以 COCO 数据集中的经典图像(两只猫、两个遥控器)为例:

  • 输入 "remote":准确识别两个遥控器,各自有独立的 Mask 和编号(Instance 0、Instance 1),置信度约 0.96
  • 输入 "cat":准确识别两只猫,置信度同样很高
  • 多类检测:通过遍历类别列表 {[}"remote", "cat"{]},融合结果得到全部四个实例

对于更复杂的场景(如多个孩子、鞋子、门等),SAM3 也能实现实例级别的分割,但在复杂目标(如半遮挡的门)上置信度会有所下降。

本章小结

SAM3 通过引入文本 Prompt,在保持高质量分割能力的同时实现了识别功能,但其文本理解能力仅限于简单名词短语。对于需要空间推理或语义理解的复杂查询,需要结合 VLM 来弥补。

SAM3 Agent:VLM + SAM3 的协作架构

架构设计:大脑与眼睛/手

SAM3 官方代码库提供了一个 Agent 示例,其核心思想是将 VLM 与 SAM3 分工协作:

SAM3 Agent 的分工模式

  • VLM(大脑):负责高层语义推理、理解用户的自然语言意图、规划执行步骤
  • SAM3(眼睛/手):负责底层视觉操作、生成精确的 Mask 分割

VLM 不直接画 Mask,而是指挥 SAM3 去画 Mask。

工具定义与 System Prompt

SAM3 Agent 定义了四个工具(Tools),其中最核心的是 segment_phrase

  • 输入:一个简单的名词短语(如 "child"、"blue vest")
  • 输出:全图中所有匹配物体的 Mask 图像(带编号标签)

System Prompt 中明确规定了关键约束:

  • 禁止使用方位词:不能输入 "left child"
  • 禁止使用数量词:不能输入 "three cats"
  • 强制通用名词:只能用 "child"、"person" 等通用短语

Visual Grounding 的完整交互流程

以"找出最左侧穿蓝色马甲的孩子"为例:

第 1 轮——分割阶段

  1. GPT-4o 接收原始图像和用户 Query
  2. 因为 SAM3 不擅长方位推理(在 Tool 描述中已说明),GPT-4o 规划策略:先分割出所有穿蓝色马甲的孩子
  3. 调用 segment_phrase("child in blue vest")
  4. SAM3 返回带编号 Mask 的结构图(检测到 3 个匹配实例)

第 2 轮——推理阶段

  1. GPT-4o 接收带 Mask 标注的结构图(这就是 Visual Prompting!)
  2. 进行视觉验证和空间推理,确定哪个 Mask ID 对应"最左侧"的孩子
  3. 输出最终答案

VLM 的空间推理仍有缺陷

在实际测试中,GPT-4o 将 Mask ID 1 判断为最左侧,但正确答案应是 Mask ID 2——模型把左右搞混了。这说明即使是最先进的 VLM,在空间位置推理上仍然存在不稳定性。

实现细节

SAM3 Agent 的官方实现并未使用 LangChain/LangGraph 等现代 Agent 框架,而是采用了较为朴素的方式:

  • 支持文本和图像的混合输入
  • Tool 定义直接写在 System Prompt 中
  • 官方示例基于 LLaMA 3 Vision 8B;讲者改用 GPT-4o(支持 Tool + 多模态输入)

本章小结

SAM3 Agent 展示了一种经典的"VLM + 专业视觉模型"协作范式:VLM 负责推理与规划,SAM3 负责精准的视觉操作。通过 Tool Call 机制,不具备分割能力的 VLM 获得了像素级别的分割能力,实现了 Visual Grounding。

Gemini 2.5 Flash:原生多模态视觉能力

对话式的检测分割识别

Gemini 2.5 Flash 代表了一种更"端到端"的路线:无需外挂 SAM3 等专业模型,模型本身就具备检测、分割和识别的能力。

Gemini 2.5 Flash 的原生视觉能力

截至 2025 年 12 月,支持原生 Mask 分割输出的 VLM 仅有 Gemini 2.5 Flash。其关键特点:

  • 对话式交互:用自然语言 Query 触发分割
  • 输出格式:List of Dict,每个 Dict 包含 box_2d(边界框)、mask(分割掩码图片)、label(描述性标签)
  • BBox 坐标在 1000×1000 范围内归一化,叠加到原图时需要转换

使用方式

调用 Gemini 2.5 Flash 进行分割的关键配置:

  • 使用 gemini-2.5-flash 模型
  • 设置 temperature=0(确保确定性输出)
  • 传入图文 Prompt,使用官方推荐的分割 Prompt 模板

分割效果评估

以多个孩子跑步的测试图为例:

  • 六个孩子中,五个的检测分割非常准确
  • 第三个孩子的框略有偏差
  • 整体准确率很高,Mask 质量是 0/1 矩阵的像素级分割

Gemini 2.5 Flash Preview 与 Pro 的区别

  • Gemini 2.5 Flash:支持完整的 Mask 输出,是目前唯一支持原生对话式分割的 VLM
  • Gemini 2.5 Flash Preview(新发布):暂不支持 Mask 输出
  • Gemini 2.5 Flash 3 Pro:可能只输出描点而非完整 Mask

本章小结

Gemini 2.5 Flash 展示了 VLM 发展的一个重要方向——将检测、分割、识别能力原生内化到一个统一模型中,实现真正的"对话式视觉理解"。虽然 SAM3 + VLM 的组合方案更灵活,但端到端方案代表了未来的趋势。

三种方案对比

维度 SAM3 单独 SAM3 + VLM Gemini 原生
文本理解 简单名词短语 任意自然语言 任意自然语言
分割精度 高(SAM3 执行)
空间推理 不支持 VLM 负责(有局限) 模型内置
交互方式 API 调用 多轮 Tool Call 对话式
部署复杂度 需要 GPU(3.3GB) 需要 GPU + API 云 API
可扩展性 需遍历类别 Agent 自动规划 单次请求
三种视觉分割方案对比

总结与延伸

本期课程完成了从传统 CV 工具到现代多模态 Agent 的完整过渡:

  1. SAM3 通过引入文本 Prompt,将"万物分割"升级为"万物检测分割识别"
  2. SAM3 Agent 展示了如何用 VLM 作为推理大脑、SAM3 作为视觉执行器,通过 Tool Call 实现 Visual Grounding
  3. Gemini 2.5 Flash 代表了端到端原生多模态的方向,将检测分割识别统一在一个对话式模型中

拓展思考

  • Embodied AI:视觉分割是机器人操作的基础——识别物体、理解场景、规划抓取
  • Visual Prompting 的未来:随着模型能力提升,人类提供的视觉线索将从"显式标注"演变为"模型自主生成视觉草图"(如 Gemini 的 Agentic Vision)
  • 开放词汇分割:SAM3 + VLM 的组合实现了 Open-Vocabulary Segmentation,不再受限于预定义的类别列表