Segment Anything Model(SAM)是Facebook Research近来开源的一种新的图像分割任务、模型。Segment Anything Model(SAM)可以从输入提示(如点或框)生成高质量的对象掩模,并可用于生成图像中所有对象的掩模。它已经在一个包含1100万张图像和110亿个掩模的数据集上进行了训练,可以将zero-shot transfer零样本迁移到新的图像分布和任务。其分割效果较为惊艳,是目前分割SOTA的算法。
SAM代码:https://github.com/facebookresearch/segment-anything
SAM官网:https://segment-anything.com
SAM论文:https://arxiv.org/pdf/2304.02643.pdf
1 概述
SAM,即Segment Anything,它借助了NLP任务中的Prompt思路,通过给图像分割任务提供一下Prompt提示来完成任意目标的快速分割。提示可以是前景/背景点集、粗略的框或遮罩、任意形式的文本或者任何指示图像中需要进行分割的信息。该任务的输入是原始的图像和一些提示语,输出是图片中不同目标的掩码信息。
2 Segment Anything Task
将NLP中的提示概念转化为分割领域。在这个领域中,提示可以是前景/背景点集、粗略的框或掩模、自由文本或者一般的任何指示图像中要分割的信息。因此,可提示的分割任务是在给定任何提示的情况下返回一个有效的分割掩模。所谓“有效”掩模,就是即使提示是模糊的并且可能涉及多个对象,输出应该是至少一个对象的合理掩模。
3 Segment Anything Model
用于提示式分割的Segment Anything Model (SAM)模型包含三个组件:图像编码器,提示编码器和掩码解码器。
Image encoder图像编码器。使用经过最小适应以处理高分辨率输入的MAE 预训练Vision Transformer (ViT) ,这是为了提高可扩展性和利用强大的预训练方法。图像编码器每个图像只运行一次,并且可以在提示模型之前应用。
Prompt encoder提示编码器。考虑两组提示:稀疏提示(点、框、文本)和密集提示(掩码)。对于点和框,我们使用位置编码[95]表示,并加上每个提示类型的学习嵌入。对于自由文本,使用CLIP [82]的现成文本编码器进行表示。对于密集提示(即掩码),使用卷积嵌入,并与图像嵌入逐元素相加。
Mask decoder掩码解码器。最后是掩码解码器。掩码解码器将图像嵌入、提示嵌入和输出令牌高效地映射到掩码。这个设计采用了Transformer解码器块的修改版本,后跟一个动态掩码预测头。修改的解码器块在两个方向上(提示到图像嵌入和反过来)使用提示自注意力和交叉注意力来更新所有嵌入。运行两个块后,上采样图像嵌入,并使用MLP将输出令牌映射到动态线性分类器,然后在每个图像位置计算掩码前景概率。
Resolving ambiguity解决歧义问题。对于一个模棱两可的提示,如果只有一个输出,模型将会对多个有效的掩码进行平均。为了解决这个问题,我们修改了模型,使其能够为一个单一提示预测多个输出掩码。我们发现,预测3个掩码输出就足以解决大多数常见情况(嵌套掩码通常最多只有三层:整体、部分和子部分)。为了更好地训练模型,我们只反向传播最小的掩码损失,以确保模型能够专注于最准确的掩码。此外,我们还为每个掩码预测了置信度分数,以便对掩码进行排序。这个置信度分数是根据预测掩码和真实掩码之间的IoU得出的。这样,我们可以在训练过程中更好地指导模型学习如何产生准确的掩码。
Efficiency效率。整个模型的设计主要是为了追求高效率。在给定预先计算的图像嵌入向量的情况下,提示编码器和掩码解码器可以在Web浏览器上以CPU方式运行,大约需要50毫秒的时间。这种运行时性能使我们的模型能够实现无缝、实时的交互式提示。
Losses and training损失和训练。为了监督掩码预测,我们采用了focal loss 和 dice loss的线性组合。我们使用一系列几何提示来训练可提示分割任务。为了模拟交互式设置,我们在每个掩码中随机抽样11轮提示,这样SAM就可以无缝地集成到我们的数据引擎中。
4 Segment Anything Data
4-1 Segment Anything Data Engine
由于分割掩码在互联网上并不丰富,因此我们构建了一个数据引擎来收集我们的1.1B掩码数据集SA-1B。该数据引擎分为三个阶段:(1)模型辅助手动注释阶段,(2)半自动阶段,包括自动预测掩码和模型辅助注释,以及(3)完全自动阶段,在该阶段中,我们的模型可以在没有标注者输入的情况下生成掩码。
Assisted-manual stage: 在模型辅助手动注释阶段初期,使用常见的公共分割数据集对SAM进行了训练。随着数据注释的增加,我们使用新注释的掩模对SAM进行了重新训练,并对图像编码器进行了扩展和其他架构细节进行了改进。在辅助手动阶段中,与经典的交互式分割类似,在一个由SAM提供支持的基于浏览器的交互式分割工具中,由一组专业标注员通过点击前景/背景对象点来标记掩模。我们没有强制施加语义约束来标记对象,标注员自由标记“物品”和“物质”。我们建议标注员标记他们可以命名或描述的对象,但没有收集这些名称或描述。要求标注员按突出程度标记对象。
在这个阶段,我们从120k个图像中收集了4.3M个掩模。
Semi-automatic stage: 在半自动阶段,我们旨在增加掩模的多样性,以提高模型对任何物体的分割能力。为了让注释者更加专注于不太显眼的对象,我们首先自动检测到了自信的掩模。然后,我们将这些掩模应用到图像中,并要求注释者标注任何未被覆盖的对象。为了检测自信的掩模,我们使用通用的“物体”类别在所有第一阶段的掩模上训练了一个边界框检测器。
在这个阶段,我们收集了额外的5.9M个掩模,总共达到了10.2M个掩模。
Fully automatic stage: 全自动阶段,标注变得完全自动化。这是由于我们的模型经历了两个主要的改进。首先,在这个阶段的开始,我们已经收集了足够的掩模,大大改善了模型,包括来自前一阶段的多样化掩模。其次,在这个阶段,我们开发了具有歧义感知能力的模型,使我们能够在歧义情况下预测有效的掩模。具体而言,我们通过一个32×32的点阵提示模型,并为每个点预测一组可能对应有效对象的掩模。通过具有歧义感知能力的模型,如果一个点位于部分或子部分上,我们的模型将返回子部分、部分和整个对象。我们的模型的IoU预测模块用于选择自信的掩模;此外,我们还确定并选择了稳定的掩模(我们认为如果将概率图阈值设置为0:5-δ和0:5+δ,结果相似的掩模即为稳定的掩模)。最后,在选择自信和稳定的掩模后,我们应用非最大抑制(NMS)来过滤重复的掩模。为了进一步提高较小掩模的质量,我们还处理了多个重叠的缩小图像裁剪。
我们将完全自动的掩模生成应用于我们数据集中的所有11M张图像,总共产生了1.1B个高质量的掩模。
4-2 Segment Anything Dataset
我们的数据集SA-1B包含了1100万张多样化、高分辨率、经过许可和隐私保护的图像,以及11亿个高质量的分割掩码,这些数据是通过我们的数据引擎收集的。
Images图像,我们从直接与摄影师合作的供应商处获得了一组新的1100万张图像,这些图像具有高分辨率(平均每张3300×4950像素),但数据大小可能会带来访问和存储方面的挑战。因此,我们发布的图像都是经过降采样处理的,最短边设置为1500像素。即使经过降采样,我们的图像分辨率仍然远高于许多现有的视觉数据集(例如,COCO数据集中的图像大小约为480×640像素)。
Masks掩码,我们的数据引擎生成了11亿个掩码,其中99.1%是完全自动化生成的。因此,自动掩码的质量至关重要。与主要分割数据集的比较,我们的自动掩码具有高质量和有效性,可用于训练模型。因此,SA-1B只包含自动生成的掩码。
Mask quality掩码的质量,我们随机抽样了500张图像(约50k个掩码),并要求专业标注者使用我们的模型和像素精确的“画笔”和“橡皮擦”编辑工具来改善这些图像中所有掩码的质量。这个过程产生了一组自动预测和专业纠正的掩码。我们计算了每一对掩码之间的IoU,并发现94%的对数IoU大于90%(97%的对数IoU大于75%)。相比之下,之前的研究估计标注者之间的一致性在85-91% IoU。我们的实验进一步证实了掩码的高质量,以及使用自动掩码训练模型的效果与使用数据引擎生成的所有掩码几乎相同。