SAM3 与 VLM:Visual Prompting 与 Grounding
| 字段 | 内容 |
|---|---|
| 作者/整理 | 基于公开课程资料整理 |
| 来源 | 五道口纳什 |
| 日期 | 2025 |

引言:多模态的新世界
本期是 Modern Agents 系列中第一次正式介绍 VLM(Vision-Language Model,视觉语言模型)。课程围绕三大主题展开:
- SAM3:Meta 发布的 Segment Anything Model 3,用于经典 CV 任务——检测、分割、识别;
- SAM3 Agent:将 VLM 与 SAM3 结合,实现视觉问答(VQA)与 Visual Grounding;
- 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) | \(×\) | \(×\) |
SAM3 不是 VLM
SAM3 虽然支持文本输入,但它只接受简单的名词短语(如 "cat"、"person"、"shoe"),而非自然语言句子。它不支持列表输入(如 "cat, remote"),也不支持复杂的修饰语。需要一次识别多类物体时,必须逐个遍历类别名称。
SAM3 的使用流程
SAM3 的基本使用非常简洁:
- 通过
build_model加载 SAM3 模型(约 3.3GB,自动下载到 HuggingFace Hub 目录) - 将模型放到 CUDA 设备上
- 构建 Processor,传入图像和文本 Prompt
- 获取输出:Mask(分割掩码)、Bounding Box、置信度分数
# 构建模型
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 轮——分割阶段:
- GPT-4o 接收原始图像和用户 Query
- 因为 SAM3 不擅长方位推理(在 Tool 描述中已说明),GPT-4o 规划策略:先分割出所有穿蓝色马甲的孩子
- 调用
segment_phrase("child in blue vest") - SAM3 返回带编号 Mask 的结构图(检测到 3 个匹配实例)
第 2 轮——推理阶段:
- GPT-4o 接收带 Mask 标注的结构图(这就是 Visual Prompting!)
- 进行视觉验证和空间推理,确定哪个 Mask ID 对应"最左侧"的孩子
- 输出最终答案
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 的完整过渡:
- SAM3 通过引入文本 Prompt,将"万物分割"升级为"万物检测分割识别"
- SAM3 Agent 展示了如何用 VLM 作为推理大脑、SAM3 作为视觉执行器,通过 Tool Call 实现 Visual Grounding
- Gemini 2.5 Flash 代表了端到端原生多模态的方向,将检测分割识别统一在一个对话式模型中
拓展思考
- Embodied AI:视觉分割是机器人操作的基础——识别物体、理解场景、规划抓取
- Visual Prompting 的未来:随着模型能力提升,人类提供的视觉线索将从"显式标注"演变为"模型自主生成视觉草图"(如 Gemini 的 Agentic Vision)
- 开放词汇分割:SAM3 + VLM 的组合实现了 Open-Vocabulary Segmentation,不再受限于预定义的类别列表