Segment Anything

Pipeline

三段式结构:重型图像编码器(一次性)、灵活提示编码器(轻量、可多次)、轻量掩码解码器(轻量、可多次) 提示嵌入与图像嵌入在解码器中通过自注意力与交叉注意力双向交互,最终由动态掩码头生成像素级前景概率

1. 图像编码器

采用 MAE 预训练的 ViT,并做最小改动以适配高分辨率输入,强调可扩展性与表征能力(从 ViT-B 逐步扩展至 ViT-H) 基于 Vision Transformer(ViT-H)架构,将整个图像一次性编码为一个深层次的图像特征嵌入(embedding)

2. Prompt编码器

解析用户提供的提示信息,如点击点、框选区域、已有的掩码或文字描述

  • Sparse prompts:点与框通过位置编码与“提示类型”可学习嵌入相加表示;文本提示由 CLIP 的文本编码器生成文本嵌入
  • Dense prompts:已有掩码通过卷积编码成与图像嵌入同分辨率的张量,并与图像嵌入逐元素相加,实现对已有分割的条件化细化

Prompt被统一嵌入到与图像嵌入兼容的表示空间,方便后续统一的注意力融合与动态掩码预测

3. 掩码解码器

根据图像特征和提示生成精确的分割掩码

改造版 Transformer 解码器块,包含:

  • prompt自注意力(让多种prompt彼此交互);
  • 双向交叉注意力(prompt<->图像嵌入的两向交互,显式对齐“要分谁”和“在哪儿”)

动态掩码头:经过两层解码器块后,上采样图像嵌入;将一个输出 token 经过 MLP 生成动态线性分类器权重,对上采样后的图像嵌入进行逐像素线性打分,输出多个候选掩码与各自的 IoU 评分

多掩码与排序:为应对歧义,解码器一次输出多个掩码(经验上 3 个已覆盖“整体/部分/子部分”等常见嵌套层次),并同时预测每个掩码的置信分数(估计 IoU)用于排序与选择

依据评分选择掩码;如需细化,可追加新的提示(例如再点一个前景/背景点),重复步骤 2–4,实时刷新结果

flowchart LR
    A[输入图像] --> B[Image Encoder编码图像]
    C[用户提示] --> D[Prompt Encoder编码提示]
    B --> E[Mask Decoder结合提示与图像信息]
    D --> E
    E --> F[输出掩码]

训练

每个掩码提示序列被采样多个训练轮(如 11 轮),让模型逐步适应不同复杂度提示。多轮交互提示模拟了真实用户操作,提升模型在人机交互中的实用性。

训练中会进行约 11 轮提示采样来模拟交互流程,使模型自然融入数据引擎的交互闭环

目标

  • 模拟不同提示方式(点击点、边框、掩码等),并要求模型输出与之相关的合理掩码
  • 不要求唯一正确结果,只需输出有效掩码,即包含提示所表达目标的一部分或整体
  • 模型被训练为能够理解提示的多义性(例如,一个点可能表示衬衫也可能表示人本身)

损失

  • 使用Focal Loss 和 Dice Loss 的加权组合来优化掩码预测, 以兼顾前景-背景不平衡与区域重叠质量: L_foca + L_dice
  • 对于多个掩码输出(以解决提示歧义),采用最小损失回传机制:只回传损失最小的一个掩码

多掩码最小损失回传:对单一提示输出多个候选掩码,训练时仅对“与真值最接近”的那个候选回传梯度(最小损失),避免平均化多个可能目标造成的模糊边界

掩码质量评分:同时训练一个“掩码质量回归头”(估计 IoU),用于对多候选进行可解释的排序与选择

数据

SA-1B

训练与标注是交替进行的循环过程:标注员采集新数据 → 更新 SAM → SAM 生成更好掩码 → 提升标注效率。

模型经历多轮迭代(总共重新训练 6 次),逐步升级图像编码器(从 ViT-B 到 ViT-H)

三阶段数据标注流程

  1. 已有的公开分割数据集(如 COCO、LVIS 等)对 SAM 进行了 基础预训练

  2. 辅助人工阶段(Assisted-Manual):专业标注员使用由 SAM 驱动的浏览器工具进行点击式标注。SAM 实时给出掩码,标注员可调整与确认,效率远高于传统标注流程。标注时间从最初的平均 34 秒下降至 14 秒,比 COCO 数据集快 6.5 倍。

  3. 半自动阶段(Semi-Automatic):SAM 自动预测图像中部分目标,人工仅需补标遗漏部分。大幅提高掩码多样性与覆盖率。

  4. 全自动阶段(Fully Automatic):通过预设点网格提示 SAM,自动生成高质量掩码。每张图像可获得约 100 个可用掩码,规模远超其他数据集。