当前位置: 首页 > news >正文

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 月发布)。文中代码片段经过简化处理,完整实现请参考原始仓库。

http://www.jsqmd.com/news/612554/

相关文章:

  • Swift Foundation数据处理完全指南:从基础操作到高级技巧
  • 2025-2026年长沙装修公司评测:五家口碑服务推荐评价领先 - 品牌推荐
  • 基于Python的公司资产网站毕设源码
  • 如何让Windows 11运行如飞?Win11Debloat工具的3大核心优化方案
  • 如何高效实现文本交互?ActiveLabel.swift手势处理机制与UIGestureRecognizer的完美协同
  • 3步解锁Wand-Enhancer核心能力:从入门到精通的完整路径
  • STM32F103C8T6 DMA实战:从零构建通用驱动模板与核心参数调优指南
  • 2025-2026年长沙装修公司推荐:五大口碑服务评测对比顶尖领先 - 品牌推荐
  • 基于Python的医院门诊在线挂号系统毕设
  • AudioLM-PyTorch故障排除:常见问题、调试技巧与解决方案
  • 10个必学的Specter导航器:从入门到精通攻略
  • 高效解决Windows更新故障的核心方案:从问题诊断到系统修复的完整指南
  • 网盘直链下载助手:八大主流网盘高速下载的完整解决方案
  • 如何高效使用RVC变声器:从入门到精通的完整指南
  • 会议一体机厂家常见问题解答(2026最新专家版) - 速递信息
  • 保定本地人推荐的韩餐店? - 中媒介
  • uni-app——6种状态、3个技术难点、1套方案:前端状态驱动UI完整指南
  • SAM3 实战上手指南:从安装到图像/视频分割全流程
  • 如何快速掌握Bebas Neue:设计师必备的免费开源字体终极指南
  • 电子书管理元数据获取高效解决方案:Calibre-Douban插件使用指南
  • 终极mPDF图片优化指南:从嵌入到压缩的完整解决方案
  • Obsidian PDF++终极指南:如何用3分钟实现PDF知识管理革命
  • 别再为AI编程工具烧积分了!手把手教你用MCP协议和‘心灵宝石’实现Windsurf/Coder永久免费对话
  • 2026年西班牙维戈石材展- 中国组团单位- 新天国际会展 - 新天国际会展
  • 57.Acwing基础课第868题-简单-筛质数
  • 开源技术创新实践:探索个性化黑苹果系统构建之旅
  • 突破平台限制:xmly-downloader-qt5的跨平台音频内容管理解决方案
  • cxxopts代码贡献终极指南:10个步骤掌握开源C++项目开发流程
  • 基于Python的供应商管理系统毕业设计源码
  • Cadence仿真进阶:共源极噪声分析的优化策略