news 2026/5/13 9:41:02

SAM3 Agent 架构深度解析:当分割模型学会“思考“

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SAM3 Agent 架构深度解析:当分割模型学会“思考“

本文基于 Meta 开源项目 SAM 3(Segment Anything with Concepts)源码,深入剖析其 Agent 系统的设计思路与工程实现。SAM3 Agent 将多模态大语言模型(MLLM)与 SAM3 分割模型相结合,构建了一个具备迭代推理能力的视觉概念定位系统。

术语速查

在正式开始之前,先简要解释本文涉及的几个核心术语,方便不同背景的读者阅读:

术语全称通俗解释
分割(Segmentation)Image Segmentation将图像中的目标对象从背景中"抠"出来,精确到每一个像素
掩码(Mask)Segmentation Mask一张与原图同尺寸的二值图,用 1 标记目标像素、0 标记背景像素。将掩码叠加到原图上,就能看到目标被"高亮"出来
MLLMMultimodal Large Language Model多模态大语言模型,既能理解文本又能理解图像的 AI 模型,如 Qwen-VL、GPT-4o 等
开放词汇(Open-Vocabulary)不限于预定义类别,用户可以用任意自然语言描述来指定目标

1. 背景与动机

SAM3 是 Meta 于 2025 年 11 月发布的新一代"分割一切"模型,相较于前代 SAM2,其核心突破在于支持开放词汇(Open-Vocabulary)概念分割——用户可以通过自然语言描述来分割图像中的目标对象。

然而,SAM3 的文本 prompt 接口要求输入简洁的名词短语(如 “person”、“brown handbag”),无法直接处理复杂的指代表达。例如,面对 “the leftmost child wearing blue vest” 这样的查询,SAM3 本身无法独立完成推理。

为解决这一问题,SAM3 引入了 Agent 架构:将 MLLM(如 Qwen-VL)作为"大脑",SAM3 作为"眼睛和手",通过工具调用(Tool Calling)机制实现闭环推理。

2. 整体架构

SAM3 Agent 的核心架构可概括为以下协作模式:

用户输入(复杂文本查询 + 图像) │ ▼ ┌─────────────────────┐ │ MLLM(如 Qwen-VL) │ ◄── 系统提示词(System Prompt) │ 负责理解、推理、决策 │ └─────────┬───────────┘ │ 工具调用(Tool Call) ▼ ┌─────────────────────┐ │ SAM3 分割模型 │ │ 负责生成分割掩码 │ └─────────┬───────────┘ │ 返回掩码结果 + 可视化图像 ▼ ┌─────────────────────┐ │ MLLM 评估结果 │ │ 决定:接受/重试/筛选 │ └─────────────────────┘

整个流程由agent_core.py中的agent_inference函数驱动,形成一个多轮对话循环。

3. 四大工具详解

Agent 系统为 MLLM 提供了四个工具,各司其职:

3.1 segment_phrase —— 核心分割工具

该工具接收一个简洁的名词短语作为text_prompt,调用 SAM3 模型对图像进行分割,返回所有匹配实例的掩码(即标记出目标对象所在像素区域的二值图)。

关键约束:

  • 输入必须是简短的名词短语,不能包含复杂的关系描述或比较级
  • 每次调用会清除所有先前生成的掩码
  • 同一text_prompt不允许重复使用

这意味着 MLLM 需要将用户的复杂查询"翻译"为 SAM3 能理解的简单短语。例如,对于 “a person holding a blender with their left hand”,MLLM 应调用segment_phrase("person")而非segment_phrase("left hand")

3.2 examine_each_mask —— 逐一审查工具

segment_phrase生成了多个小型或重叠的掩码时,该工具会将每个掩码逐一叠加到原图上进行可视化(包括放大视图),然后由 MLLM 逐个查看并判断每个掩码是否应被保留。

# 源码中的逐一审查逻辑(简化)foriinrange(num_masks):# 生成单个掩码的全图视图和放大视图image_w_mask_i,image_w_zoomed_in_mask_i=visualize(current_outputs,i)# 将两张图片发送给 MLLM,由其判断 Accept 或 Rejectverdict=send_generate_request(iterative_checking_messages)

值得注意的是,该工具使用了独立的系统提示词(system_prompt_iterative_checking.txt),专门用于掩码质量评估,与主推理流程的提示词分离。

3.3 select_masks_and_return —— 最终选择工具

MLLM 在确认当前掩码集合满足用户查询后,通过该工具选择最终的掩码子集作为输出。参数final_answer_masks是一个整数数组,表示被选中的掩码编号。

3.4 report_no_mask —— 无结果报告工具

当图像中确实不存在与用户查询匹配的对象时,MLLM 调用此工具报告"无结果"。系统对该工具的使用设置了严格限制——只有在确认图像与查询完全无关时才允许调用。

4. 消息历史管理:上下文窗口的精细控制

Agent 系统面临的一个核心工程挑战是:多轮对话会导致上下文窗口快速膨胀,尤其是包含多张图片时。SAM3 Agent 通过_prune_messages_for_next_round函数实现了精细的消息裁剪策略:

三段式保留规则:

  1. 始终保留前两条消息(系统提示词 + 用户原始输入)
  2. 从后向前搜索,保留最近一次包含segment_phrase工具调用的助手消息及其后续所有消息
  3. 中间的历史消息全部丢弃

图片数量硬约束:

# 确保上下文中永远不超过 2 张图片assertcount_images(messages)<=2

这一设计确保了 MLLM 始终能看到原始图像和最新的分割结果图像,同时避免上下文溢出。

重复 prompt 警告机制:

当存在已使用过的text_prompt时,系统会在用户消息中注入警告文本,明确告知 MLLM 哪些短语已经尝试过且效果不佳,避免无效重试。

5. 系统提示词工程:精细到极致的规则设计

SAM3 Agent 的系统提示词是整个系统的灵魂,其篇幅超过数千字,包含了极为详尽的行为规范。以下是几个值得关注的设计要点:

5.1 用户意图理解规则

系统提示词用大量篇幅指导 MLLM 如何正确理解用户查询:

  • 区分"主要目标"与"辅助描述":对于 “a man carrying a young girl”,应定位 “man” 而非 “young girl”
  • 处理用户错误:如用户说 “red laptop” 但图中是紫色笔记本,MLLM 应自行修正
  • 处理语法错误和拼写错误:如 “left back to us guy” 应理解为"左边背对我们的男人"

5.2 segment_phrase 使用规则(18 条)

这些规则覆盖了各种边界情况:

  • 不使用 OCR 相关描述(SAM3 不具备 OCR 能力)
  • 避免使用动作、关系或比较级作为 prompt
  • 当目标是人时,必须使用整体描述(如 “person”)而非局部(如 “hand”)
  • prompt 覆盖范围不能大于也不能小于用户查询的目标范围

5.3 select_masks_and_return 使用规则(18 条)

在最终选择阶段同样设置了严格的验证流程:

  • 调用前必须重新审视原始图像和用户查询
  • 必须逐一说明每个被选中掩码的理由
  • 必须说明每个未被选中掩码被排除的理由
  • 处理视觉幻觉:当掩码 “1” 和 “2” 靠得太近时,可能看起来像 “12”

6. 一个完整的推理示例

以查询 “the leftmost child wearing blue vest” 为例,Agent 的典型推理流程如下:

Round 1: MLLM 分析图像,识别出多个儿童 → 调用 segment_phrase("child") → SAM3 返回 5 个掩码 Round 2: MLLM 查看掩码渲染图,识别穿蓝色背心的儿童 → 需要进一步确认哪个是"最左边的" → 调用 examine_each_mask 逐一审查 Round 3: MLLM 根据审查结果,确认 mask 2 是目标 → 调用 select_masks_and_return([2]) → 返回最终结果

7. 工程亮点总结

SAM3 Agent 的设计体现了几个值得借鉴的工程思路:

  1. 关注点分离:MLLM 负责理解和推理,SAM3 负责感知和分割,各自发挥所长
  2. 防御性编程:重复 prompt 检测、消息历史裁剪、图片数量硬约束,每一处都在防止系统进入异常状态
  3. 提示词即规范:通过精心设计的系统提示词,将复杂的业务逻辑编码为 MLLM 的行为规范,而非硬编码在程序中
  4. 可插拔的 MLLM 后端:系统支持 DashScope API、vLLM 本地部署等多种 MLLM 接入方式,通过send_generate_request抽象层实现解耦

8. 参考资料

  • SAM 3 论文:https://arxiv.org/abs/2511.16719
  • SAM 3 项目主页:https://ai.meta.com/sam3
  • SAM 3 GitHub 仓库:https://github.com/facebookresearch/sam3

本文基于 SAM3 开源代码分析撰写,代码版本为 SAM 3.1(2026 年 3 月发布)。文中代码片段经过简化处理,完整实现请参考原始仓库。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 11:14:27

FanControl风扇控制软件:5分钟掌握Windows系统风扇精准调控

FanControl风扇控制软件&#xff1a;5分钟掌握Windows系统风扇精准调控 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trendi…

作者头像 李华
网站建设 2026/4/12 17:14:52

5个核心步骤:UE4SS Mod开发从入门到实践指南

5个核心步骤&#xff1a;UE4SS Mod开发从入门到实践指南 【免费下载链接】RE-UE4SS Injectable LUA scripting system, SDK generator, live property editor and other dumping utilities for UE4/5 games 项目地址: https://gitcode.com/gh_mirrors/re/RE-UE4SS 解决游…

作者头像 李华
网站建设 2026/4/12 17:40:35

3分钟快速上手:免费城通网盘解析器终极指南

3分钟快速上手&#xff1a;免费城通网盘解析器终极指南 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 还在为城通网盘下载慢、广告多而烦恼吗&#xff1f;城通网盘解析器正是解决这些问题的利器&#…

作者头像 李华
网站建设 2026/4/17 21:21:06

5步终极指南:让旧Mac重获新生,体验最新macOS的完整教程

5步终极指南&#xff1a;让旧Mac重获新生&#xff0c;体验最新macOS的完整教程 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你是否有一台被苹果官方"…

作者头像 李华
网站建设 2026/4/18 0:04:29

从原理到实践:Smith预估控制器在Simulink中的建模与仿真

1. Smith预估控制器&#xff1a;时滞系统的救星 第一次接触Smith预估控制器是在一个恒温箱控制项目里。当时客户抱怨温度调节总是慢半拍&#xff0c;设定值调到25度&#xff0c;实际温度要等好几分钟才能稳定。这种"反应迟钝"的现象&#xff0c;就是典型的时滞系统问…

作者头像 李华