SAM:SegMent Anything万物分割论文解读
SAM: SegMent Anything
论文:https://ai.facebook.com/research/publications/segment-anything/
代码:https://github.com/facebookresearch/segment-anything
Datasets: https://segment-anything.com/dataset/index.html
SAM目录:
说明:“prompting”这个词我一直翻译的是激励,在其他人的翻译中可能使用的是提示...
精彩论文预告:下一篇论文将关注Spark模型(实现CNN+MAE的训练,效果良好,有训练CNN大模型的潜质)
摘要前:
![论文fig1](https://img2023.cnblogs.com/blog/1319275/202305/1319275-20230505102439727-1448878993.png)
- Task: 这里构建了一个提示分割任务,这类任务在结构分类上,一般体现为多模态的模型;
- Model: 模型框架设计上主干是分割的架构,图像编码器,这里使用的VIT+MAE的组合方式进行训练;提示部分有不同输入的有不同的编码器;一个融合提示编码和图像编码的解码器;
- Data: 数据工程,个人理解这是SAM模型牛逼之处,虽然数据工程这块处理手段看起来比较简单,但是SAM团队给我们展示了大道至简。这种让模型自动标注的思路、细节处理实际有非常大的研究、应用价值。
如果只是了解技术,可以直接看图表;这篇论文讲解了非常多的细节,为了追随大佬的脚步,这里对论文进行全文解读,由于能力有限,部分细节可能难以做到完善……欢迎大家指正。
摘要
SA项目介绍了一个新的任务:提示任务;一个新的模型SAM;一个新的开源数据集SA-1B。SAM团队使用SAM模型构建了一个数据工程,循环地新增mask,最后在11M(一千万)的数据上得到了1.1B(11亿)的mask。这个SAM模型的设计和训练是提示型的,所以在新的图像分布和任务上可以实现零样本迁移。SAM团队评估了其在许多任务上的能力,发现其零样本性能令人印象深刻–通常与之前的监督模型相比具有竞争能力,甚至优于这些结果。模型开源地址:https://segment-anything.com/ .
一、介绍
LLM(大型语言模型)在NLP中展现了较强的零样本和小样本能力。这些基础模型在的迁移能力一般是通过一些提示工程实现的,提示工程中,人工生成的文本用于提示语言模型为之生成有效的文本响应(问答模型一般需要在提示模型的基础上进行微调)。这些模型使用大量来自于网络的数据进行训练,但是这些模型的零样本和小样本能力却出奇的好(某些场景下甚至匹配:这对于SAM数据工程是具有直接的启迪意义)。经验趋势表明,这种行为随着模型规模、数据集大小和总训练计算的增加而增强。
基础模型在CV中也进行了探索,只是目前还不处于探索的初期。比较重要的工作:使用来源于网络的文本和图像进行配对。例如:CLIP和ALIGN使用对比学习训练文本和图像编码器,并使其配对。经过训练后,工程文本提示,可以实现对新视觉概念和数据分布的零样本概括。这种编码器还与其他模块有效组合,以实现下游任务,如图像生成(如:DALL.E)。虽然在视觉和语言编码器方面已经取得了很大进展,但计算机视觉这方面还有很多问题,比如数据丰度就不够。
这里,SAM要做的事情就是,构建一个分割图像的基础模型。因此,SAM构建了一个提示模型并在大型数据集上进行预训练,训练任务让其有较强的归纳能力。我们的目标是:有了这个模型,即时工程解决新数据分布上的一系列下游分割问题。
这个计划的成功取决于三个组成部分:任务、模型和数据。模型解决了以下问题:
- 什么样的任务可以获得零样本归纳的能力?
- 一致的模型结构是什么样的?
- 什么样的数据可以支撑这种提示任务和模型?
这些问题错综复杂,需要综合解决。我们首先定义了一个可提示的分割任务,该任务足够通用,可以提供强大的预训练目标,并实现广泛的下游应用。此任务需要一个支持灵活提示的模型,并且可以在提示时实时输出分割掩码,以便进行交互使用。为了训练我们的模型,我们需要一个多样化的、大规模的数据源。不幸的是,没有用于分割的网络规模(大规模)的数据源;为了解决这个问题,我们构建了一个“数据引擎”,即我们在使用高效的模型来帮助数据收集和使用新收集的数据进行迭代来改进模型。接下来,我们介绍每个互连的组件,然后是我们创建的数据集和证明我们方法有效性的实验。
Task(Sec-2) 在NLP和最近的CV中,基础模型通过使用提示技术来达到其零样本和小样本学习的能力。在SAM中,提出一种提示任务,目的在于对任何分割提示返回一个可验证的分割掩码(如Fig. 1a)。提示只是指定在图像中分割什么,例如,提示可以包括标识对象的空间或文本信息。有效输出掩码的要求意味着,即使提示不明确,并且可能涉及多个对象(例如,衬衫上的一个点可能指示衬衫或穿着衬衫的人),输出也应该是这些对象中至少一个的合理掩码。我们使用可提示的分割任务作为预训练目标,并通过提示工程解决一般的下游分割任务。
Model(Sec-3) 可提示的分割任务和现实世界使用的目标对模型体系结构施加了约束。特别是该模型必须支持灵活的提示,需要实时计算掩码以允许交互式使用,并且必须具有模糊性(如:点的位置应该是有歧义的)。令人惊讶的是,我们发现一个简单的设计满足了所有三个约束:一个强大的图像编码器计算图像嵌入,一个提示编码器嵌入提示,然后将这两个信息源组合在一个预测分割掩码的轻量级掩码解码器中。官方定义模型名称为SAM(结构见Fig. 1b)。通过将SAM分离为图像编码器和快速提示编码器/掩码解码器,可以在不同提示下复用用相同的图像编码(并分摊其成本)。在给定图像嵌入的情况下,提示编码器和掩码解码器在web浏览器中从提示预测掩码,时间为~50ms。我们专注于点、框和掩码提示,并通过自由形式的文本提示显示初始结果。为了让SAM意识到歧义,我们将其设计为预测单个提示的多个掩码,使SAM能够自然地处理歧义,例如衬衫与人的例子。
Data engine(Sec-4) 对新的数据分布要有强健的归纳能力,SAM发现模型必须在大量、多样的mask上面训练,数据丰度要比现有数据集都有大。传统的数据收集是在线完成的,它们的mask并不是天然丰富的,因此需要一些额外的策略进行处理。我们使用一个数据工程解决这个问题,通过模型训练--数据收集的循环迭代得到。数据工程主要分为三个阶段:人工干预、半自动标注、全自动标注。在第一阶段,SAM帮助注释器注释掩码,类似于经典的交互式分段设置。在第二阶段,SAM可以通过提示可能的对象位置来自动生成对象子集的掩码,注释器专注于注释其余对象,有助于增加掩码的多样性。在最后阶段,我们用前景点的规则网格提示SAM,最后大概为每张图片生成100张高质量的分割掩码。
Dataset(Sec-5) 最后发布的开源数据集SA-1B,由11M图片和1B掩码组成。且数据集掩码的高质量和丰富性得到验证。除了将其用于训练SAM以使其稳健和通用之外,我们希望SA-1B成为:旨在建立新基础模型研究的宝贵资源。
![Fig.2](https://img2023.cnblogs.com/blog/1319275/202305/1319275-20230505145649510-1687774020.png)
Responsible AI(Sec-6) 我们研究并报告了使用SA-1B和SAM时潜在的公平问题和偏见。SA-1B中的图像跨越了地理和经济上不同的国家,我们发现SAM在不同人群中表现相似。我们希望这将使我们的工作在现实世界的用例中更加公平。我们在附录中提供了模型和数据集卡片。
Experiments(Sec-7) 我们对SAM进行了广泛的评估。首先,在23新的分割数据集中,我们发现SAM从单个前景点生成高质量的掩模,通常仅略低于手动注释的GT标签。其次,我们使用提示工程在零样本迁移下的各种下游任务上发现了一致的高质量结果,包括边缘检测、对象建议生成、实例分割和文本到掩码预测的初步探索。这些结果表明,SAM可以与即时工程一起开箱即用,以解决涉及SAM训练数据之外的对象和图像分布的各种任务。尽管如此,正如我们在第8节中所讨论的那样,仍有改进的空间。
二、分割万物任务
我们从NLP中获得了灵感,在NLP中,下一个token预测任务用于基础模型预训练,并通过即时工程解决不同的下游任务[10]。为了建立分割的基础模型,我们的目标是定义一个具有类似功能的任务。
Task 我们首先将提示的概念从NLP引入到分割,其中提示可以是一组前景/背景点、粗略框或掩码、自由格式文本,或者通常是指示在图像中分割什么的任何信息。那么,可提示的分割任务是在给定任何提示的情况下返回有效的分割掩码。“有效”掩码的要求只是意味着,即使提示不明确,并且可能涉及多个对象(例如,回忆衬衫与人的例子,见Fig. 3),输出也应该是其中至少一个对象的合理掩码。这一要求类似于期望语言模型对不明确的提示输出一致的响应。我们选择此任务是因为它会产生一种自然的预训练算法和一种通过提示将零样本转移到下游分割任务的通用方法。
![Fig. 3](https://img2023.cnblogs.com/blog/1319275/202305/1319275-20230505153214344-187974956.png)
Pre-training 可提示分割任务提出了一种自然的预训练算法,该算法模拟每个训练样本的提示序列(例如,点、框、掩码),并将模型的掩码预测与基本事实进行比较。我们将这种方法从交互式分割中进行了调整,尽管与交互式分割不同,交互式分割的目的是在足够的用户输入后最终预测有效的掩码,但我们的目的是始终预测任何提示的有效掩码,即使提示不明确。这确保了预先训练的模型在涉及歧义的用例中是有效的,包括我们的数据引擎§4所要求的自动注释。我们注意到,在这项任务中表现出色是具有挑战性的,需要专门的建模和训练损失选择,我们在§3中对此进行了讨论。
Zero-shot transfer 直观地说,我们的预训练任务赋予了模型在推理时对任何提示做出适当响应的能力,因此下游任务可以通过设计适当的提示来解决。例如,如果有一个猫的边界框检测器,则可以通过向我们的模型提供检测器的框输出作为提示来解决猫实例分割(这里的bbox不需要精确,一个带有少量歧义信息的bbox是可以被接受的)。一般来说,一系列实用的分割任务可以作为提示。除了自动数据集标记外,我们还在§7中的实验中探索了五个不同的示例任务。
Related tasks 分割是一个很广的领域,包括:交互式分割、超分像素化、边缘检测、目标候选生成、前景分割、语义分割、实例分割、全景分割等。我们的可提示分割任务的目标是通过即时工程生成一个功能广泛的模型,该模型可以适应许多(尽管不是全部)现有和新的分割任务。这种能力是任务泛化的一种形式。请注意,这与之前关于多任务分割系统的工作不同(tip: 确实是不一样,之前分割任务是和目标检测任务一起作为输出,现在直接把关键信息作为输入了)。在多任务系统中,单个模型执行一组固定的任务,例如联合语义、实例和全景分割[114,19,54],但训练和测试任务是相同的。我们工作中的一个重要区别是,为可提示分割训练的模型可以在推理时通过充当更大系统中的组件来执行新的不同任务,例如,为了执行实例分割,将可提示分割模型与现有的对象检测器相结合。
Discussion 提示和组合是功能强大的工具,使单个模型能够以可扩展的方式使用,有可能完成模型设计时未知的任务。这种方法类似于其他基础模型的使用方式,例如CLIP[82]是DALL·E[83]图像生成系统的文本图像对齐组件。我们预计,与专门为固定任务集训练的系统相比,以快速工程等技术为动力的可组合系统设计将实现在更广泛的应用程序使用。从合成的角度比较可提示分割和交互式分割也很有趣:虽然交互式分割模型是在考虑人类用户的情况下设计的,但可提示分割训练的模型也可以组成一个更大的算法系统,正如我们将要演示的那样。
三、分割万物模型
下面我们介绍可提示分割模型SAM,它由三部分组成,包括:图像编码器、提示编码器、轻量化的掩码解码器(见Fig. 4)。
![](https://img2023.cnblogs.com/blog/1319275/202305/1319275-20230505162202423-1318856154.png)
Image encoder 这里使用的是基于MAE训练的ViT模型。编码器只在一张图片上跑一次,然后应用到不同的提示。
Prompt encoder 提示有离散(points、boxes、text)和稠密(masks)两类。我们通过位置编码[95]来表示点和框,并使用CLIP的现成文本编码器(tip: CLIP模型的文本编码器在其他模型中大量使用,一般这个结构都不会再参与训练)来表示自由格式文本。稠密提示(即掩码)使用卷积编码,并与图像嵌入逐元素求和。
Mask encoder 掩码解码器有效地将图像编码、提示编码和输出token映射到掩码。该设计受到[14,20]的启发,采用了对Transformer解码器块[103]的修改,然后是动态掩码预测头。我们修改的解码器块在两个方向上使用提示自注意和交叉注意(提示到图像编码,反之亦然)来更新所有嵌入。在运行两个块之后,我们对图像编码进行上采样,MLP将输出token映射到动态线性分类器,然后动态线性分类器计算每个图像位置的掩码前景概率。
Resolving ambiguity 对于一个输出,如果提示是不明确的,那么会有多个mask可以匹配。为了实现这个歧义建模,我们修改模型对单个提示预测多个mask(见Fig. 3)。我们发现,3个掩码输出足以解决大多数常见情况(嵌套掩码通常最多有三个深度:整体、部分和子部分)。在训练过程中,我们只在mask上反向探测最小的损失[15,45,64]。为了对掩码进行排序,该模型预测每个掩码的置信度得分(即估计的IoU)。
Efficiency 整体模型设计在很大程度上是出于效率的考虑。给定预先计算的图像编码,提示编码器和掩码解码器在网络浏览器中运行,在CPU上,时间约为50ms。这种运行时性能使我们的模型能够无缝、实时地进行交互式提示。
Losses and training 掩码目标函数的设置是End-to-end object detection with Transformers.中的focal loss[65]和dice loss[73]。我们使用混合的几何提示来训练可提示的分割任务(文本提示见§7.5)。在[92,37]之后,我们通过在每个掩码的11轮中随机采样提示来模拟交互式设置,使SAM能够无缝集成到我们的数据引擎中。
四、分割万物的数据引擎
数据引擎这块很重要,但是我翻这篇论文之前研究整理过,所以直接罗列如下。(全自动标注阶段细节参考Sec B)。
SAM模型在这块的工作是分为三个阶段:
- 人工干预阶段
- 模型辅助阶段
- 全自动阶段
人工干预阶段
-
实施方案:
-
-
使用所有的开源数据训练SAM,得到一版SAM模型;
-
部署模型到浏览器,开发了一个标注平台;
-
人工标注图片:
-
使用SAM模型进行预标注;
-
人工修正
-
在人工的标注过程中是没有明确的语义边界的,更多是按途中实例的突出性(对于构图的重要程度)进行标注;
修一张图不低于30秒
-
-
获得足够数据后,SAM只在新生成的数据上进行训练,不断迭代模型(6次),将模型的图像编码器从VIT-B进化到VIT-H,并且有一些细节上的优化。这个过程数据团队的标注速度从30秒提升到14秒,同时SAM团队注意到,数据标注速度是COCO数据集标注的6.5倍,比直接bbox标注慢2倍。这个阶段数据团队实现了每一张图都配置了大量的mask(从20提上到44)。
这个阶段使用了12万的图片,标注了430万张mask。
半自动阶段
- 这个阶段为了提高模型分割万物的能力,工程上主要是提高分割掩码的丰富度。
-
- 将置信度高的可靠前景实例填充掉,让模型关注那些未分割实例的细颗粒度物体;
- 使用bbox检测器检测通用检测类别?
- 这里具体的操作策略是?
先将置信度高的物体区域保留,进一步细分颗粒度?- 将置信度高的区域排除,在低置信度区域细分颗粒度?高置信度的mask进行prefilled;
这个阶段SAM在18万张图片上收集了5.9M的mask,平均每张图mask从44增加到72.
全自动阶段
自己标注数据自己训练,那还学个毛线?
-
这个阶段SAM有两个法宝提升模型:
-
- 在前面的两个阶段收集了足够的mask,这些mask能有效提升模型性能;
- 全自动阶段开发了一个歧义感知模型;
这个阶段SAM通过\(32 \times 32\) 的格点激励模型预测一些mask,这些mask可能对应一些有效的实例;在歧义感知中,如果一个点位于实例区域或实例的子域中,那么模型可以返回实例的区域、子区域、整个父实例(粗颗粒度)。SAM的IoU预测模型用于选择可信的mask掩码;同时选择一些稳定的mask,这里阈值化概率图在\(\left[0.5-\delta, 0.5+\delta \right]\)的结果得到相似的mask。后面接一个NMS从confident和stable中抑制一样的。
为了提高小目标的mask,模型还处理了大量带重叠的裁剪图片。细节见论文\(\S\) B
最后,这个阶段产生了1100万的图片,这些图片总共产生了大约11亿的高质量mask,数据集命名未SA-1B。
五、分割万物数据集
SAM发布的数据集,命名未SA-1B,由11M高分辨率、的图片;1.1B高质量的分割掩码组成。
Images 我们从一家直接与摄影师合作的供应商那里获得了一组1100万张新图像的许可。这些图像具有高分辨率(平均3300×4950像素),由此产生的数据大小可能会带来访问和存储方面的挑战。因此,我们正在发布最短边设置为1500像素的下采样图像。即使在下采样之后,我们的图像的分辨率也明显高于许多现有的视觉数据集(例如,COCO[66]图像的分辨率为~480×640像素)。请注意,目前大多数模型的输入分辨率要低得多。在公布的图像中,人脸和车牌被模糊了。
Masks 我们的数据引擎产生了11亿个掩码,其中99.1%是完全自动生成的。因此,自动掩码的质量至关重要。我们将它们直接与专业注释进行比较,并观察各种掩码属性(与突出的分割数据集的比较情况)。正如下面的分析和§7中的实验所证实的那样,我们的主要结论是,我们的自动mask质量高,对训练模型有效。受这些发现的启发,SA-1B仅包括自动生成的掩码。
Mask quality 为了估计mask质量,我们随机采样了500张图像(~5万个mask),并要求我们的专业标注人员提高这些图像中所有mask的质量。标注人员使用我们的模型和像素精确的“画笔”和“橡皮擦”编辑工具来完成这项工作。这一过程产生了一对自动预测和专业校正的mask。我们计算了每对之间的IoU,发现94%数据对的IoU大于90%(97%数据对的IoU大于75%)。为了进行比较,先前的工作估计IOU的一致性比例为85-91%[44,60]。我们在§7中的实验通过人类评级证实,相对于各种数据集,mask质量很高,并且在自动mask上训练我们的模型几乎与使用数据引擎产生的所有mask一样好。
![Fig. 5](https://img2023.cnblogs.com/blog/1319275/202305/1319275-20230505174037983-674663506.png)
Mask properties 在Fig. 5中,与现有最大的分割数据集相比,我们绘制了SA-1B中对象中心的空间分布。所有数据集中都存在常见的摄影师偏见。我们观察到,与分布最相似的两个数据集LVIS v1[44]和ADE20K[117]相比,SA-1B对图像角的覆盖范围更大,而COCO[66]和Open Images V5[60]具有更显著的中心偏差。在Fig. 6中,我们按大小比较了这些数据集。SA-1B比第二大的Open images多了11倍的图像和400倍的掩码。平均而言,它每张图像的掩码比Open Images多36倍。在这方面最接近的数据集ADE20K,每张图像的掩码仍然减少了3.5倍。Fig. 6(左)绘制了mask数量的离散分布。接下来,我们看看Fig. 6(中间)中的图像相对掩模大小(掩模面积除以图像面积的平方根)。正如预期的那样,由于我们的数据集每个图像有更多的掩码,因此它也倾向于包括更大比例的中小型相对大小掩码。最后,为了分析形状复杂性,我们观察Fig. 6(右)中的mask凹度分布(1减去掩模面积除以掩模凸包的面积)。由于形状复杂度与掩码大小相关,我们通过首先从mask仓库中根据不同mask size进行独立采样。我们观察到,我们的掩码的凹度分布与其他数据集的凹度分布大致相似。
![](https://img2023.cnblogs.com/blog/1319275/202305/1319275-20230505174529204-1700799646.png)