文章目录
目录
- 动机
- 定义
- prompt
- ambiguity-aware
- 创新与贡献
- 主要贡献详细介绍
- task
-
- 可提示分割(Promptable Segmentation Task)
-
- 预训练方法
-
- 零样本迁移(Zero-Shot Transfer)
-
- 与相关任务的区别
- 可扩展性
-
- model
- 核心设计思路:高效、灵活、歧义感知
- 模型结构:三大组件协同
-
- 图像编码器(Heavyweight Image Encoder)
-
- 提示编码器(Prompt Encoder)
-
- 轻量掩码解码器(Lightweight Mask Decoder)
-
- data engine
- 模型辅助人工标注阶段
- 半自动阶段
- 全自动阶段
- data - 分割一切数据集
- 数据集概述(SA-1B)
- 掩码特性
- 与现有数据集对比
- 零样本迁移实验
- 零样本单点有效掩码评估(核心任务验证)
- 零样本边缘检测(低级任务迁移)
- 零样本物体Proposal生成(中级任务迁移)
- 零样本实例分割(高级任务组合)
- 零样本文本到掩码(探索性任务)
- 消融实验(数据与模型影响)
- task
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
有时候提示是模糊的或不明确的,例如衬衫上的一个点可能表示衬衫、也可能表示穿着衬衫的人,此时模型也应该有一个合理的输出。
创新与贡献
-
task - 提出可提示分割任务:
- 定义通过任意提示(点、框、文本)生成有效掩码的任务,统一预训练目标与下游应用。
- 支持零样本迁移,例如结合目标检测框即可实现实例分割。
-
model - Segment Anything Model (SAM):
- 架构创新:
- 图像编码器:基于MAE预训练的ViT,提取图像嵌入。
- 提示编码器:支持点、框、文本等多模态提示。
- 轻量级掩码解码器:结合图像和提示嵌入,实时生成掩码(50ms/次)。
- 模糊性处理:预测多个掩码(如整体、部分、子部分),通过置信度排序选择最佳结果。
- 架构创新:
-
data - Segment Anything Dataset (SA-1B):
- 规模:11M图像、1.1B掩码,比最大现有数据集(Open Images)大400倍。
- 质量:通过三阶段数据引擎(人工辅助→半自动→全自动)确保多样性和精度,验证显示94%的自动掩码与人工修正掩码IoU>90%。
-
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的设计目标是实现**“可提示的实时分割”**,支持任意输入提示(点、框、文本、掩码),并处理歧义场景。其核心思路为:
- 分离计算成本:重型图像编码器仅需运行一次/图像,轻型提示解码器支持实时响应(~50ms/提示)。
- 多模态提示兼容:统一处理稀疏(点、框、文本)和密集(掩码)提示,适配多样化输入。
- 歧义感知:输出多个掩码(默认3个),通过IoU评分排序,解决单提示多对象问题(如点在衬衫→输出衬衫或人物)。
- 实时交互导向:轻量化设计支持浏览器端部署,满足交互式标注、实时应用需求。
模型结构:三大组件协同
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块:
- 提示自注意力:更新提示令牌(含输出令牌)。
- 交叉注意力双向交互:提示→图像嵌入(令牌查询图像)+ 图像→提示(图像查询令牌),双向传递信息。
- 动态预测头:
- 上采样图像嵌入(4×),通过MLP生成动态线性分类器,逐像素计算前景概率。
- 输出3个掩码(默认)+ IoU分数,用于歧义场景排序。
- 两阶段Transformer块:
- 效率优化:
- 低计算量:仅需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)。
- 覆盖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的兼容性,为多模态分割提供方向。
消融实验(数据与模型影响)
- 数据阶段:
- 左图对比可以看出仅使用第3阶段自动生成的标注,即可达到很好的效果,所以默认只用第3阶段自动生成的数据。
- 数据量:
- 完整数据是11M,均匀下采样后进行对比,中间图可以看出当数据量达到1M时,即可达到与11M几乎一致的效果,因此对许多应用场景来说,1M数据更容易实现。
- 模型规模:
- ViT-H(MAE预训练)显著优于ViT-B,ViT-L与H差距微小(图13右),验证模型容量的边际收益递减。
训练实现细节-作者介绍了如何训练,但源码中没有提供训练代码
一、训练目标与整体框架
目标:模拟交互式分割场景,训练模型对任意提示生成有效掩码,支持零样本泛化。
框架:
- 每轮训练对每个掩码模拟 11次迭代提示(1次初始提示 + 8次误差点采样 + 2次无新提示优化)。
- 结合 几何提示(点/框) 和 掩码日志(logits) 作为输入,动态优化预测。
二、初始提示生成
-
随机选择初始提示类型:
- 等概率选择 前景点(foreground point) 或 边界框(bounding box)。
- 点提示:从真值掩码内均匀采样点(模拟用户点击)。
- 框提示:基于真值掩码的边界框,添加随机噪声(标准差为框边长的10%,最大20像素),模拟用户绘制的松散框。
作用:平衡实例分割的紧密框和交互式分割的松散框需求。
-
掩码日志传递:
- 前一次迭代的掩码预测以 未阈值化的logits形式 作为额外提示(非二值化掩码),保留更多细节信息。
三、迭代提示与误差点采样
-
误差区域定义:
- 前一次预测掩码与真值掩码的差异区域,分为:
- 假阴性(False Negative):真值存在但预测缺失的区域 → 采样前景点。
- 假阳性(False Positive):预测存在但真值缺失的区域 → 采样背景点。
- 前一次预测掩码与真值掩码的差异区域,分为:
-
迭代采样策略:
- 每轮从误差区域均匀采样新点,直至8次迭代后停止(最多16次测试,发现收益递减)。
- 每次迭代仅添加 单一点提示(前景/背景),逐步修正预测。
四、多掩码处理与歧义解决
-
多掩码预测:
- 模型对每个提示预测 3个掩码(处理歧义,如点位于物体重叠区域),每个掩码附带 IoU预测分数(估计与真值的交并比)。
- 训练时仅反向传播 损失最小的掩码,推理时按IoU排序选择最优掩码。
-
掩码稳定性优化:
- 当提示超过1个(如多轮迭代),模型仅输出 单掩码(第4个输出令牌),避免歧义平均化。
五、损失函数与优化细节
-
损失函数组合:
- 焦点损失(Focal Loss) + 骰子损失(Dice Loss)(比例20:1),平衡正负样本不均衡和边界优化。
- IoU预测头:均方误差(MSE)损失,预测掩码与真值的IoU,与掩码损失加权求和(权重1.0)。
-
优化器与参数:
- 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文本编码器(用于文本提示实验)。
六、数据增强与计算优化
-
数据增强:
- 大规模抖动(Large-scale Jitter):仅在使用手动/半自动数据时启用,缩放范围[0.1, 2.0],提升数据多样性。
-
计算效率:
- 图像编码器仅计算一次/图像,提示编码器和掩码解码器在CPU上实时运行(∼50ms/提示)。
- 训练分布在256块GPU上,每GPU随机采样最多64个掩码,降低内存占用。