跳过正文
  1. 日常记录、技术札记与转载收藏。/

SAM

目录

Sam1
#

sam设计的出发点:

  1. 可提示分割任务

  2. 支持灵活提示,实时交互使用

  3. 多样化,大规模的数据源

Image
Image

重头戏:Mask Decoder(怎么把提示 + 图像特征变成掩码)
#

设计宗旨:既要能灵活融合提示,又要极快。因此 SAM 采用一个轻量的改造版 Transformer 解码器,并用“动态头”生成掩码。

输入与“输出 token”
#

  • 输入:图像嵌入(ViT 提供的二维网格)、提示嵌入(点/框/稠密掩码),以及一个学习到的输出 token(类似 ViT 的 [class],用来“承载”本次要生成的掩码)。ar5iv

“双向”交互的 Two-Way Transformer
#

每个解码层有四步,关键在双向交叉注意力(two-way)——既让提示看图像,也让图像回看提示:

  1. 对提示 tokens 做自注意力(整合提示内部信息);

  2. 提示 → 图像:提示作 query,跨注意力读取图像嵌入;

  3. 逐点 MLP 更新提示 tokens;

  4. 图像 → 提示:图像作 query,跨注意力读取提示,把提示信息写回图像特征。 默认两层这样的解码器(数据引擎的某个版本曾用过 3 层)。注意力里会加位置编码,并把原始提示 token(含位置信息)残差相加以保几何信息。ar5iv

直觉:先让提示“问”图像在哪、长啥样;再让图像特征“带着提示的意图”被改写,这样下游生成掩码时更“对题”。

上采样 + 动态线性分类器(生成掩码)
#

  • 两层转置卷积把解码后的图像特征上采样到更细网格;

  • 用一个小 MLP输出 token映射成一组动态权重,对上采样后的每个像素特征做点积(可理解为“动态线性分类器”),得到每个位置为前景的概率(logit) → 形成整幅掩码ar5iv

多掩码与 IoU 置信度(处理歧义)
#

  • 一个提示可能对应多个有效目标(比如点击在衣服上,既可能分出衣服,也可能分出人)。SAM 设计为一次输出多张掩码(默认 3 张)来“包容歧义”。训练时对三张分别算损失,只回传最小损失那张(multi-output 最小化技巧)。

  • 同时再加一个小头,预测每张掩码的置信度(估计 IoU)用于排序。多提示时通常歧义减少,模型只输出一张(通过额外的输出 token 设置实现)。ar5iv

训练细节(和 Decoder 直接相关的)
#

  • 损失:掩码用 Focal + Dice 的线性组合;IoU 预测头用 MSE,与掩码损失并和。

  • 高效设置:解码器通道维度约 256,注意力 8 头;跨注意力里会把 q/k/v 的维度减半提速;上采样的转置卷积通道(例如 64 → 32)。这些选择让 decoder 计算量远小于大 ViT encoder。ar5iv

数据引擎,这个务必学会

Image

Sam2
#

从标题上来看,sam2就是比sam1多一个视频功能,下面我们详细阅读原文

摘要:提出几个关键:更快,更准,加入视频分割,减少交互

Image

仔细看,有一个记忆注意力机制

相关工作:

交互式视频分割:交互式视频对象分割已经成为在用户引导下有效地获得视频(小掩模)中的对象分割的关键任务,所述用户引导通常以涂写、点击或边界框的形式

视频对象分割:

它的方法是PVS

Image

如何实现记忆模块:self attention , cross attention

Image
Image

SAM 2 模型架构总览
#

SAM 2 是 Meta 发布的新一代基础分割模型,统一处理图像和视频任务,通过 prompt 控制(如点、框、mask)进行分割,具备零样本泛化能力和实时性能。

核心组件包括:
#

  • Image Encoder:采用分层设计(如 Hiera),能在不同尺度抽取丰富特征,支持多尺度融合与视频帧的实时处理 LearnOpenCVSupervisely

  • Prompt Encoder:类似于 SAM1,用于编码用户的点、框、mask 提示 Supervisely

  • Memory 模块(新增):包含 memory encoder、memory bank 和 memory attention,用于视频中的时序记忆管理:存储过去帧和 prompt 信息,帮助跨帧保持对象一致性,即便对象被遮挡或消失也能追踪回来 Ultralytics DocsSupervisely

  • Mask Decoder:一个轻量级而强大的 promptable 解码器,本文重点聚焦其如何结合 prompt、memory 和当前帧特征生成掩码。


Mask Decoder:SAM 2 的核心解码器
#

解码流程结构(图像 & 视频一致、但视频加入 memory 融合):
#

步骤一:Image Embedding + Memory Attention

  • 首先将当前帧通过 image encoder 得到特征图(frame embedding)。

  • 通过 memory attention 模块,融合来自 memory bank 的先前帧特征与 prompt,让当前帧的 embedding 带有时序 context 信息。这种 attention 类似 Transformer 的 cross-attention,用来比对 past memories,有助于处理目标遮挡、重现等挑战 arXivSupervisely

步骤二:Prompt Cross-Attention

  • 融合了 memory 信息的帧 embedding,随后接 prompt encoder 编码结果做 cross-attention,再结合 prompt 信息对目标定位提供引导 arXivSupervisely

步骤三:Mask 生成

  • 最终利用 decoder 输出生成 segmentation mask。这部分在 SAM1 中用的是轻量 Transformer + 动态 classifier 设计,SAM 2 的思路也是类似,只不过加入了 memory-conditioned embedding。具体生成步骤类似「frame embedding + prompt → decoder → mask logits」。

  • SAM 2 还支持不在当前帧出现目标的判断(presence head),专门用于视频中判断目标是否存在当前帧 Supervisely


SAM 2 Mask Decoder 的优势
#


推理示例:SAM 2 的 Mask Decoder 工作流
#

  1. 输入:当前帧图像 + 用户 prompt(点/框/mask)。

  2. 编码:Image Encoder → 特征图;Prompt Encoder → 提示 embedding。

  3. 融合:memory attention 融合过去帧特征;prompt attention 引导当前帧器官级识别。

  4. 解码:Mask Decoder 基于融合 embedding 输出 segmentation mask 和 presence 置信度。

  5. 记忆更新:当前帧 mask 加入 memory bank,供下帧使用。

解决方案
#

大规模造数据问题(语义分割)
#

对于分割来说,人工标注数据集的成本是高昂的,如何基于少量标注,通过一种机制快速获取大量高标注的数据集呢

Image

SAM3
#

Image

一、什么是 SAM 3(Segment Anything Model 3)
#

SAM 3 是 Meta AI 发布的第三代视觉基础模型(Vision Foundation Model),用于在图像与视频中进行 开放词汇(open-vocabulary)可提示分割。它不仅能检测与分割对象,还能通过文本、示例图像或视觉提示来定位、掩码与跟踪匹配的所有实例。

核心目标可以归结为:

将“交互式视觉分割工具”升级为“语义概念驱动的通用视觉理解引擎”。


二、技术能力与核心功能
#

Open-Vocabulary 概念分割(Promptable Concept Segmentation)
#

SAM 3 的旗舰能力是 Promptable Concept Segmentation \(PCS\),即通过自然语言短语(如“黄色出租车”)或示例图像来指定一个概念,并自动识别场景中 所有匹配该概念的实例。这与传统的固定类别分割模型(如 COCO 的 80 类)不同,它可以处理任意用户描述的概念类别。

特点:

  • 支持 文本提示(Text Prompts):直接用自然语言描述想要的对象。

  • 支持 示例提示(Exemplar Prompts):给出一个参考样例图像或区域,检测所有相似对象。

  • 支持 视觉提示(Visual Prompts):传统的点、框、遮罩等提示用于精细控制。


统一图像 + 视频检测、分割与跟踪
#

SAM 3 能对图像和视频序列做端到端处理:

  • 图像分割:返回所有匹配概念的像素级掩码(masks)。

  • 视频跟踪:一旦实例被识别,它即可跨帧跟踪对象,输出一致的实例 ID。

  • 开放词汇检测:支持广泛语义,而不是固定类表。


架构要素
#

根据 Meta 提供的技术细节与论文摘要,SAM 3 的架构包含以下模块:

a. 共享视觉编码器
#

一个统一的 backbone(视觉编码器)负责提取图像/视频的基础视觉特征。

b. 检测器(Detector)
#

  • 基于 DETR 风格结构,用于根据提示(文本 + 视觉)定位所有符合概念的对象。

  • 引入 Presence Token 机制以提高对相似/細粒度概念的区分能力。

c. 跟踪器(Tracker)
#

  • 内置记忆机制,可跟踪视频中多个匹配对象的轨迹。

d. 大数据训练引擎
#

  • 支撑超过 400 万独特概念标签 的大规模训练数据集,用于提升开放词汇泛化能力。

三、与 SAM1 / SAM2 的对比
#

总结对比逻辑

  • SAM 1:只支持静态图像,通过人工交互(点/框)生成单个实例的掩码。

  • SAM 2:新增视频跟踪能力,但仍然依赖视觉提示,并且每次通常只分割一个实例。

  • SAM 3:真正引入自然语言和示例提示,实现 一次性自动分割多个概念实例,并支持图像与视频双模态处理。


四、性能与开放词汇泛化
#

独立基准测试显示 SAM 3 在开放词汇目标检测和概念分割任务上显著领先其他模型:如在 SA-Co/Gold 基准上,它的 cgF1 分数远高于现有模型,并在多个视频概念分割指标中表现优异。

此外,据 Meta 的评估,SAM 3 在 SA-Co 基准上可以达到 接近人类水平(约 75-80%) 的表现。


五、实际应用场景
#

SAM 3 的技术能力使它适配多种现实应用,包括但不限于:

  1. 数据标注与自动标注流水线 快速生成高质量掩码,用于训练下游分割/检测模型。

  2. 视频理解与监控分析 利用文本提示跟踪场景中的指定对象,例如“所有红色车”。

  3. 机器人感知与自动驾驶 可用于动态环境中开放词汇对象识别与跟踪。

  4. 内容编辑与增强现实 基于语义掩码可以进行替换、模糊、特效、背景移除等操作。

  5. 医疗与科研场景分割 可根据医生描述的病灶类型进行自动分割,为辅助诊断提供高效工具。


六、局限性与未来拓展方向
#

虽然 SAM 3 在开放词汇分割任务上取得了巨大进步,但当前研究也指出如下发展方向:

  • 自然语言指令的丰富理解:单短语提示虽强,但对复杂语义指令仍需结合更强语言模块(例如 SAM3-I 研究方向)。

  • 领域特化表现:在特定领域(如医学图像)尚需域内微调提升精度。

  • 部署资源需求:大规模模型推理对计算资源要求较高,在边缘设备上部署仍是工程挑战。


七、总结要点
#

  • SAM 3 是 Meta 发布的最新一代视觉基础模型,支持开放词汇分割。

  • 核心能力是 Promptable Concept Segmentation:利用文本与示例提示自动识别、分割所有相关实例。

  • 它统一了视觉对象检测、分割、跟踪三个基本视觉任务。

  • 相较先前版本(SAM 1/2),新增开放词汇理解与多实例输出能力,标志着视觉基础模型向更强语义理解迈进。

SAM3核心
#

Detection-style Queries(实例查询)

Image

好,这里我彻底换一种“工程直觉优先、数学最少”的方式来讲,而且只讲一件事

Detection-style Instance Queries 到底是什么? 它在代码和模型里“具体干了什么”?

你可以把下面的解释直接讲给一个做过 YOLO / Mask R-CNN,但没碰过 Transformer 的工程师,对方是能听懂的。


一句话先给结论(非常重要)
#

Detection-style Instance Query = 一组“可学习的空槽位”, 每个槽位都在图像里“试着找一个完整的对象/实例”。

它不是类别,不是 anchor,也不是像素。

它更像是:

“我假设图里有 N 个东西,每个 Query 负责去找一个。”


先把“错误直觉”全部清掉
#

很多人第一次听 Query,会误解成下面这些(都不对):

❌ Query = 一个类别

❌ Query = 一个 anchor box

❌ Query = 一块图像 patch

❌ Query = 文本 embedding

正确的是:

Query 本身一开始什么都不是 它只是一个可学习的向量


用一个极通俗的比喻
#

把模型想成“多个人同时在图里找东西”
#

  • 图像特征 = 一整张复杂的现场

  • Query = 100 个“检查员”

每个检查员的任务:

“我看看这张图,有没有一个完整的东西值得我负责?


Query 在代码里的真实形态(非常具体)
#

# 假设有 100 个 instance queries
num_queries = 100
d_model = 256

# 可学习参数
instance_queries = nn.Embedding(num_queries, d_model)

这就是全部。

  • shape = (100, 256)

  • 不对应任何图像位置

  • 不绑定任何类别


Query 是怎么“看图像”的?
#

靠的是这一步(核心)👇

Cross-Attention(Query 看 Image)
#

Query 作为 Q
Image feature 作为 K, V

直觉版:

Query 会问图像每一个位置: “你像不像我正在找的那个‘整体结构’?”


用一句白话解释 Cross-Attention
#

对每个 Query:

“我扫一遍整张图, 把和我最匹配的像素特征收集起来, 然后更新我自己。”


一轮下来发生了什么?
#

初始时(完全随机)
#

  • Query #17:乱看

  • Query #42:乱看


训练若干轮后
#

模型学会了:

⚠️ 但它们从未被明确告知这是“裂缝”或“人”


那“Detection-style”是什么意思?
#

这是和传统分割的本质区别

传统分割
#

每个像素:你是什么类别?

Detection-style Query
#

每个 Query:你能不能负责一个实例?

👉 这是 “从像素问类别” → “从实例问像素”


为什么它和 Detection 很像?
#

你熟悉的检测流程:


Query 怎么知道“我该负责哪个 GT 实例”?
#

这一步非常关键👇

Hungarian Matching(训练时)
#

模型做的是:

“预测的 100 个 Query 和 GT 的 M 个实例 一一配对,最优匹配。”

匹配依据通常包括:

  • mask IoU

  • box IoU(如果有)

  • mask loss


结果:
#

  • Query #7 ↔ GT #2

  • Query #23 ↔ GT #1

  • 剩下的 Query → 背景(no-object)


这一步为什么对泛化很重要?
#

因为:

Query 从未被绑定成“某一类” 它只学会: “只要结构和条件对,我就负责你。”


Query 最终是怎么变成 mask 的?
#

流程极简版:

Query feature
和 dense image feature 做点积
得到一个 mask

直觉解释:

Query 学会了一个“模板”, 模板和图像中每个像素算相似度, 相似的地方亮,不相似的地方暗。


那文本 / Concept 是怎么进来的?
#

非常关键的一句:

文本不是“告诉 Query 是什么类别”, 而是“调 Query 的关注方向”。

  • Query 仍然是实例槽

  • 文本只是改变“什么算匹配”


一个极其直观的总结图(文字版)
#

[Query 1] ----\
[Query 2] -----\    看整张图
[Query 3] ------>  Image Feature Map
[Query 4] -----/    谁像我?
[Query 5] ----/

最后:

  • 有的 Query 找到了实例

  • 有的 Query 什么都没找到


用一句“能写进论文的通俗解释”
#

Detection-style instance queries are learnable slots that independently search the entire image for coherent object-level regions via cross-attention, rather than assigning class labels to individual pixels.


和你研究的直接连接(非常关键)
#

你做工业裂缝、缺陷,其实天然适合 Query

  • 裂缝 ≠ 固定类别

  • 裂缝 = 一段“结构连续区域”

  • Query 正是“结构优先”的机制


如果你愿意,下一步我可以:
#

  1. 用你贴的 TransformerEncoderLayer 代码逐行对 Query 流程做“工程级解读”

  2. 对比 YOLO anchor / DETR query / SAM prompt 的本质差异

  3. 给你一个“工业裂缝 Query 分割”的最小可实现框架

你想从 代码级 还是 和你论文工作结合 的角度继续?

相关文章