SAM论文学习

目录

  • 动机
  • 定义
    • prompt
    • ambiguity-aware
  • 创新与贡献
  • 主要贡献详细介绍
    • task
        1. 可提示分割(Promptable Segmentation Task)
        1. 预训练方法
        1. 零样本迁移(Zero-Shot Transfer)
        1. 与相关任务的区别
      • 可扩展性
    • model
      • 核心设计思路:高效、灵活、歧义感知
      • 模型结构:三大组件协同
          1. 图像编码器(Heavyweight Image Encoder)
          1. 提示编码器(Prompt Encoder)
          1. 轻量掩码解码器(Lightweight Mask Decoder)
    • data engine
      • 模型辅助人工标注阶段
      • 半自动阶段
      • 全自动阶段
    • data - 分割一切数据集
      • 数据集概述(SA-1B)
      • 掩码特性
      • 与现有数据集对比
    • 零样本迁移实验
      • 零样本单点有效掩码评估(核心任务验证)
      • 零样本边缘检测(低级任务迁移)
      • 零样本物体Proposal生成(中级任务迁移)
      • 零样本实例分割(高级任务组合)
      • 零样本文本到掩码(探索性任务)
      • 消融实验(数据与模型影响)

SAM是首个面向图像分割的“基础模型”,通过提示工程实现任务泛化,为构建可组合的视觉系统(如结合检测+分割)提供了新范式

动机

构建一个用于图像分割的基础模型,开发一个可提示的模型,并使用一种能够实现强大泛化能力的任务,在广泛的数据集上对其进行预训练。利用这个模型,旨在通过提示工程,解决一系列新数据分布上的下游分割问题。
针对这个动机,如果是你,会怎么思考这个问题的解决方式?作者问了自己3个问题:

  • 什么任务能够实现零样本泛化?——可提示的分割任务,且具备足够的通用性
  • 相应的模型架构是什么?——支持灵活提示方式,并且输出分割mask
  • 哪些数据可以支撑这项任务和模型?——需要分割任务的大规模数据,但当前还没有(所以作者提出了“数据引擎”Data Engine)

在这里插入图片描述


定义

prompt

本文的一大核心是prompt,支持多种prompt作为输入,那么什么是prompt?

A prompt simply specifies what to segment in an image, e.g., a prompt can include spatial or text information identifying an object.

prompt指定图像中要分割的内容,可以包含待识别物体的空间或文本信息等。

ambiguity-aware

有时候提示是模糊的或不明确的,例如衬衫上的一个点可能表示衬衫、也可能表示穿着衬衫的人,此时模型也应该有一个合理的输出。
在这里插入图片描述


创新与贡献

  1. task - 提出可提示分割任务

    • 定义通过任意提示(点、框、文本)生成有效掩码的任务,统一预训练目标与下游应用。
    • 支持零样本迁移,例如结合目标检测框即可实现实例分割。
  2. model - Segment Anything Model (SAM)

    • 架构创新
      • 图像编码器:基于MAE预训练的ViT,提取图像嵌入。
      • 提示编码器:支持点、框、文本等多模态提示。
      • 轻量级掩码解码器:结合图像和提示嵌入,实时生成掩码(50ms/次)。
    • 模糊性处理:预测多个掩码(如整体、部分、子部分),通过置信度排序选择最佳结果。
  3. data - Segment Anything Dataset (SA-1B)

    • 规模:11M图像、1.1B掩码,比最大现有数据集(Open Images)大400倍。
    • 质量:通过三阶段数据引擎(人工辅助→半自动→全自动)确保多样性和精度,验证显示94%的自动掩码与人工修正掩码IoU>90%。
  4. data engine - 数据引擎(Data Engine)

    • 人工辅助阶段:SAM辅助标注员快速标注(14秒/掩码,比COCO快6.5倍)。
    • 半自动阶段:SAM生成部分掩码,标注员补充剩余对象。
    • 全自动阶段:密集网格提示生成掩码,结合稳定性和非极大抑制(NMS)筛选高质量结果。

主要贡献详细介绍

task

1. 可提示分割(Promptable Segmentation Task)
  • 核心目标:给定任意分割提示(如空间点、边界框、自由文本等),模型需返回至少一个有效的分割掩码。即使提示存在歧义(如单点可能对应多个对象),输出需为其中一个合理对象的掩码。
  • 有效性要求:类似语言模型处理歧义提示,输出需符合语义逻辑(如点在衬衫上可返回衬衫或人物掩码)。
  • 任务定位:作为预训练和零样本迁移的基础,通过提示工程解决下游分割任务。
2. 预训练方法
  • 模拟交互式分割:借鉴交互式分割思路,对每个训练样本模拟多轮提示(如点、框、掩码),逐步优化预测掩码,最终与真实掩码对比计算损失。
  • 歧义处理:模型支持输出多个掩码(默认3个),通过最小损失反向传播,解决单提示多对象问题(如嵌套对象的层次化掩码:整体-部分-子部分)。
  • 损失函数:结合Focal Loss和Dice Loss,优化边界精度和类别平衡。
3. 零样本迁移(Zero-Shot Transfer)
  • 核心机制:通过设计提示将下游任务转化为可提示分割问题。例如:
    • 实例分割:输入目标检测框作为提示;
    • 文本到掩码:利用CLIP文本编码器将文本转为嵌入,结合图像嵌入生成掩码(需微调模型适配文本提示)。
  • 优势:无需针对特定任务训练,通过提示即可适应新数据分布和任务(如水下、自拍视角图像)。
4. 与相关任务的区别
  • 对比交互式分割:后者依赖用户多次交互修正掩码,而可提示分割要求单次提示生成有效掩码,侧重泛化性而非单任务高精度。
  • 对比多任务分割系统:传统多任务模型固定任务集合,而可提示分割通过提示工程支持开放任务(如未定义的新对象类型)。
可扩展性

提示和组合是强大的工具,使单个模型能够以可扩展的方式使用,有可能完成模型设计时尚未知的任务。这种方法类似于其他基础模型的使用方式,例如,CLIP作为 DALLE 图像生成系统的文本 - 图像对齐组件。

model

SAM在模型方面其实没有太大的创新或改进,但作者通过简单已有网络的组合,巧妙的解决了多种提示输入下的分割任务。
在这里插入图片描述

核心设计思路:高效、灵活、歧义感知

SAM的设计目标是实现**“可提示的实时分割”**,支持任意输入提示(点、框、文本、掩码),并处理歧义场景。其核心思路为:

  1. 分离计算成本:重型图像编码器仅需运行一次/图像,轻型提示解码器支持实时响应(~50ms/提示)。
  2. 多模态提示兼容:统一处理稀疏(点、框、文本)和密集(掩码)提示,适配多样化输入。
  3. 歧义感知:输出多个掩码(默认3个),通过IoU评分排序,解决单提示多对象问题(如点在衬衫→输出衬衫或人物)。
  4. 实时交互导向:轻量化设计支持浏览器端部署,满足交互式标注、实时应用需求。
模型结构:三大组件协同

SAM由图像编码器、提示编码器、掩码解码器三部分组成,架构如图4所示:

1. 图像编码器(Heavyweight Image Encoder)
  • 目标:提取高分辨率图像的全局特征,支持后续提示的高效查询。
  • 设计
    • 采用MAE预训练的ViT-H/16(Vision Transformer),适配高分辨率输入(1024×1024),输出64×64×256的图像嵌入。
    • 仅需计算一次/图像,通过1×1和3×3卷积降维,减少后续计算量。
  • 作用:为所有提示提供共享的视觉特征基础, amortized 计算成本(如1张图支持100次提示仅需1次编码)。
2. 提示编码器(Prompt Encoder)
  • 目标:将多样化提示(点、框、文本、掩码)转换为统一的嵌入表示。
  • 稀疏提示(点/框/文本)
    • :位置编码+ 前景/背景embedding。
    • :左上角和右下角的位置编码+学习嵌入(模拟用户松散标注)。
    • 文本:CLIP文本编码器生成嵌入(训练时用CLIP图像嵌入模拟,推理时直接输入文本)。
  • 密集提示(mask)
    • 掩码降维后与图像嵌入逐元素相加,传递空间先验。添加“无掩码”学习嵌入,支持空提示场景。
3. 轻量掩码解码器(Lightweight Mask Decoder)
  • 目标:结合图像嵌入和提示嵌入,快速生成多个有效掩码。
  • 结构
    • 两阶段Transformer块
      1. 提示自注意力:更新提示令牌(含输出令牌)。
      2. 交叉注意力双向交互:提示→图像嵌入(令牌查询图像)+ 图像→提示(图像查询令牌),双向传递信息。
    • 动态预测头
      • 上采样图像嵌入(4×),通过MLP生成动态线性分类器,逐像素计算前景概率。
      • 输出3个掩码(默认)+ IoU分数,用于歧义场景排序。
  • 效率优化
    • 低计算量:仅需2层Transformer,通道降维(256→128)减少注意力计算。
    • 支持浏览器端CPU实时运行,无需GPU加速。

data engine

包含11M图片、1.1Bmask的数据集SA-1B是怎么来的?如上分为三个阶段(1) 模型辅助人工标注阶段,(2) 半自动阶段,结合自动预测掩码和模型辅助标注,(3) 全自动阶段,在此阶段我们的模型无需标注人员输入即可生成掩码。
由于在实际应用中这种构建大规模数据方式有很好的参考意义,所以这里重点介绍一下。

模型辅助人工标注阶段

在这个阶段开始时,SAM 使用常见的公开分割数据集进行训练。经过充分的数据标注后,SAM 仅使用新标注的掩码进行重新训练。随着收集到更多的掩码,图像编码器从 ViT-B 扩展到 ViT-H,其他架构细节也有所演变;我们总共对模型进行了 6 次重新训练。随着模型的改进,每个掩码的平均标注时间从 34 秒减少到 14 秒。我们注意到,14 秒比 COCO 的掩码标注速度快 6.5 倍,仅比使用极值点的边界框标注速度慢 2 倍 。

  • 在这个阶段从 12 万张图像中收集了 430 万个掩码;
  • 每张图像的平均掩码数量从 20 个增加到 44 个;
半自动阶段

在这个阶段,我们旨在增加掩码的多样性,以提高模型对任意物体的分割能力。为了让标注人员专注于不太显著的物体,我们首先自动检测出置信度较高的掩码。然后,我们向标注人员展示预先填充了这些掩码的图像,并要求他们标注任何其他未标注的物体。为了检测置信度较高的掩码,在所有第一阶段的掩码上训练了一个边界框检测器(所有类别都定义为“object”,即不区分类别)。与第一阶段一样,我们定期使用新收集的数据对模型进行重新训练(5 次)。由于这些物体的标注难度更大,每个掩码的平均标注时间回升至 34 秒(不包括自动生成的掩码)。

  • 这个阶段在 18 万张图像中额外收集了 590 万个掩码(总共达到 1020 万个掩码);
  • 每张图像的平均掩码数量从 44 个增加到 72 个(包括自动生成的掩码);
全自动阶段

在最后阶段,标注完全是自动进行的。这之所以可行,得益于我们对模型的两项重大改进。首先,在这个阶段开始时,我们已经收集了足够多的掩码来大幅改进模型,其中包括前一阶段的各种不同掩码。其次,到这个阶段时,我们已经开发出了模糊感知模型,这使我们即使在模糊情况下也能预测有效的掩码。具体来说,我们用一个 32×32 的规则点网格来提示模型,并且针对每个点预测一组可能对应有效物体的掩码。借助模糊感知模型,如果一个点位于某个部分或子部分上,我们的模型将返回子部分、部分以及整个物体。
仅保留置信度高且稳定的掩码后,我们应用非极大值抑制(NMS)来过滤重复项。为了进一步提高较小掩码的质量,我们还处理了多个重叠的放大图像裁剪区域。

  • 对数据集中的所有 1100 万张图像应用了全自动掩码生成,总共生成了 11 亿个高质量掩码。

data - 分割一切数据集

数据集概述(SA-1B)
  • 规模与定位

    • 包含 1100万张(11M)授权且隐私保护的图像11亿个(1.1B)高质量分割掩码,是当前最大的分割数据集(掩码数量是第二大现有数据集的400倍)。
    • 目标:为计算机视觉基础模型研究提供大规模数据支持,推动零样本泛化能力的训练与评估。
  • 图像特征

    • 来源:第三方授权的摄影图像,覆盖地理和经济多样性。
    • 处理
      • 原始高分辨率(平均3300×4950像素),发布时下采样至短边1500像素以降低存储占用,同时仍显著高于大多数现有数据集(例如COCO大约480*640)。
      • 模糊了人脸和车牌,保护隐私。
掩码特性
  • 生成方式

    • 99.1%的掩码通过数据引擎全自动生成(第三阶段:32×32网格点提示SAM,结合NMS和稳定性过滤)。
    • 仅保留置信度(IoU>88%)、稳定性(阈值±0.1的掩码IoU>95%)和非全图掩码(覆盖<95%图像面积)。
  • 质量评估

    • 人工验证:随机抽取500张图像(~5万掩码),人工修正后计算IoU,94%的掩码对IoU>90%,97%>75%,质量接近人工标注一致性(85-91%)。
    • 下游任务有效性训练SAM时使用全自动掩码与混合阶段数据效果相近,证明自动掩码的高质量
  • 多样性分析

    • 空间分布:掩码覆盖图像角落更多(对比COCO、LVIS等数据集)。
    • 数量与尺寸:每图平均掩码数远超现有数据集(如Open Images的36倍),包含更多中小尺寸掩码(占比更高)。
    • 形状复杂性:凹度分布(掩码形状复杂度)与其他数据集相似。
      在这里插入图片描述
与现有数据集对比
  • 规模优势
    • SA-1B的图像数是Open Images的11倍,掩码数是400倍,单图平均掩码数是36倍。
  • 地理与收入多样性
    • 覆盖100+国家,欧洲(49.8%)和亚洲(36.2%)占比高,非洲(2.8%)和低收入国家(0.9%)仍不足,但整体优于COCO和Open Images(表1)。
      在这里插入图片描述

零样本迁移实验

作者重点通过5个任务验证了SAM的零样本迁移能力,其中Zero-Shot Single Point Valid Mask Evaluation作者认为是最典型且最具挑战性的任务,所以重点关注。

零样本单点有效掩码评估(核心任务验证)
  • 任务:仅通过单个前景点提示分割物体(歧义场景),评估掩码有效性(mIoU+人类评分)。
  • 数据集:23个多样化的新数据集(涵盖水下、自拍、X光等,未在训练数据中出现过),包含10万+掩码。
  • 方法
    • 基线:RITM(只对比最好的交互式模型)。
    • SAM默认输出置信度最高的掩码。
  • 结果
    • 定量SAM在16/23数据集mIoU高于RITM,随机点提示下优势更显著(图9d)。
    • 定性:人类评分(1-10)显示SAM掩码质量(7-9分)显著高于基线(图9b)。
      在这里插入图片描述
零样本边缘检测(低级任务迁移)
  • 方法:用16×16网格点生成768个掩码,Sobel滤波提取边缘,NMS去重(未微调)。
  • 数据集:BSDS500(经典边缘检测基准)。
  • 结果
    • 指标:ODS=0.768,R50=0.928(接近HED[2015]的0.923),召回高但精度受限(因未学习BSDS特定抑制规则)。
    • 定性:生成边缘图包含更多合理细节(如图10),但存在过分割(因无监督提示)。
  • 结论:SAM无需训练即可完成边缘检测,证明底层特征的通用性。
零样本物体Proposal生成(中级任务迁移)
  • 任务:生成高质量物体掩码作为Proposal(AR@1000)。
  • 数据集:LVIS v1(1203类,高难度长尾场景)。
  • 方法
    • SAM:64×64网格点+NMS(0.9),输出900+掩码/图。
    • 基线:ViTDet-H(全监督检测器,DMP方法“刷分”)。
  • 结果
    • AR@1000:SAM(59.3) vs ViTDet-H(63.0),但SAM在中/大物体(81.6/86.9)和稀有/常见类别(65.8/63.9)超越基线(表4)。
    • 消融:单掩码版本(SAM-single)性能显著下降,证明多掩码设计的重要性。
  • 结论:SAM无需目标类别监督,通过多尺度提示生成高质量Proposal,泛化性优于域内训练的检测器。
零样本实例分割(高级任务组合)
  • 方法:用ViTDet检测框作为提示,SAM生成掩码(单阶段组合)。
  • 数据集:COCO、LVIS(验证集)。
  • 结果
    • 定量:SAM的Mask AP(COCO: 46.5 vs ViTDet 51.0;LVIS: 30.8 vs 32.5)略低,但人类评分(7-10分)显著更高(图11),因掩码边界更清晰。 作者认为SAM指标更低的原因是标注的质量低,所以从具体分割结果以及人工评分来看都是SAM更好
  • 结论:SAM作为分割模块,通过提示组合即可超越全监督模型的视觉质量,证明模块化泛化能力。
零样本文本到掩码(探索性任务)

训练时直接基于mask对应的CLIP视觉嵌入,得益于CLIP图文的对齐,推理时输入文本即可。

  • 方法
    • 训练:用CLIP图像嵌入模拟文本提示(无显式文本标注),通过掩码裁剪+CLIP对齐训练。
    • 推理:CLIP文本编码器生成提示,SAM输出掩码。
  • 结果
    • 定性:简单文本(如“雨刷”)直接生效,复杂短语需结合点提示修正。
    • 局限:鲁棒性不足,依赖物体与文本的强对齐。
  • 结论:初步证明SAM与CLIP的兼容性,为多模态分割提供方向。
消融实验(数据与模型影响)

在这里插入图片描述

  1. 数据阶段
    • 左图对比可以看出仅使用第3阶段自动生成的标注,即可达到很好的效果,所以默认只用第3阶段自动生成的数据
  2. 数据量
    • 完整数据是11M,均匀下采样后进行对比,中间图可以看出当数据量达到1M时,即可达到与11M几乎一致的效果,因此对许多应用场景来说,1M数据更容易实现。
  3. 模型规模
    • ViT-H(MAE预训练)显著优于ViT-B,ViT-L与H差距微小(图13右),验证模型容量的边际收益递减

训练实现细节-作者介绍了如何训练,但源码中没有提供训练代码

一、训练目标与整体框架

目标:模拟交互式分割场景,训练模型对任意提示生成有效掩码,支持零样本泛化。
框架

  • 每轮训练对每个掩码模拟 11次迭代提示(1次初始提示 + 8次误差点采样 + 2次无新提示优化)。
  • 结合 几何提示(点/框)掩码日志(logits) 作为输入,动态优化预测。

二、初始提示生成

  1. 随机选择初始提示类型

    • 等概率选择 前景点(foreground point)边界框(bounding box)
    • 点提示:从真值掩码内均匀采样点(模拟用户点击)。
    • 框提示:基于真值掩码的边界框,添加随机噪声(标准差为框边长的10%,最大20像素),模拟用户绘制的松散框。
      作用:平衡实例分割的紧密框和交互式分割的松散框需求。
  2. 掩码日志传递

    • 前一次迭代的掩码预测以 未阈值化的logits形式 作为额外提示(非二值化掩码),保留更多细节信息。

三、迭代提示与误差点采样

  1. 误差区域定义

    • 前一次预测掩码与真值掩码的差异区域,分为:
      • 假阴性(False Negative):真值存在但预测缺失的区域 → 采样前景点。
      • 假阳性(False Positive):预测存在但真值缺失的区域 → 采样背景点。
  2. 迭代采样策略

    • 每轮从误差区域均匀采样新点,直至8次迭代后停止(最多16次测试,发现收益递减)。
    • 每次迭代仅添加 单一点提示(前景/背景),逐步修正预测。

四、多掩码处理与歧义解决

  1. 多掩码预测

    • 模型对每个提示预测 3个掩码(处理歧义,如点位于物体重叠区域),每个掩码附带 IoU预测分数(估计与真值的交并比)。
    • 训练时仅反向传播 损失最小的掩码,推理时按IoU排序选择最优掩码。
  2. 掩码稳定性优化

    • 当提示超过1个(如多轮迭代),模型仅输出 单掩码(第4个输出令牌),避免歧义平均化。

五、损失函数与优化细节

  1. 损失函数组合

    • 焦点损失(Focal Loss) + 骰子损失(Dice Loss)(比例20:1),平衡正负样本不均衡和边界优化。
    • IoU预测头:均方误差(MSE)损失,预测掩码与真值的IoU,与掩码损失加权求和(权重1.0)。
  2. 优化器与参数

    • AdamW优化器:β₁=0.9,β₂=0.999,权重衰减0.1。
    • 学习率调度
      • 初始学习率8e-4,线性热身250步,60k和86666步时衰减10倍。
      • 训练90k迭代(约2个SA-1B epoch),批量大小256图像/GPU。
    • 模型初始化:MAE预训练的ViT-H/16图像编码器,CLIP文本编码器(用于文本提示实验)。

六、数据增强与计算优化

  1. 数据增强

    • 大规模抖动(Large-scale Jitter):仅在使用手动/半自动数据时启用,缩放范围[0.1, 2.0],提升数据多样性。
  2. 计算效率

    • 图像编码器仅计算一次/图像,提示编码器和掩码解码器在CPU上实时运行(∼50ms/提示)。
    • 训练分布在256块GPU上,每GPU随机采样最多64个掩码,降低内存占用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

↣life♚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值