CV的大模型,而且新数据集+新范式+超强零样本泛化能力。
一直觉得CV的大模型可能会像BERT那样,一个处理全部任务,但是其实在CV上并没有这么好的效果。
SAM的出现统一了分割这个任务(CV任务的一个子集)的下流应用,说明了CV的大模型是可能存在的。
其肯定会对CV的研究带来巨大的变革,很多任务会被统一处理,可能再过不久,检测、分割和追踪也会被all in one了。
paper: https://arxiv.org/abs/2304.02643
Code: https://github.com/facebookresearch/segment-anything
Dataset: https://ai.facebook.com/datasets/segment-anything/
Demo的效果非常惊人: https://segment-anything.com/
![](http://139.9.1.231/wp-content/uploads/2023/04/image-16-1024x203.png)
1. 解决的问题
在网络规模数据集上预训练的大型语言模型正在通过强大的零样本和少样本泛化能力彻底改变NLP。 这些“基础模型”(foundation models)可以泛化到超出训练期间所见的任务和数据分布。此功能通常通过提示工程(prompt engineering)实现,其中使用手工制作的文本来提示语言模型为手头的任务生成有效的文本响应。 当使用来自网络的大量文本语料库进行缩放和训练时,这些模型的零样本和少样本性能与微调模型相比(在某些情况下甚至匹配)出奇地好。经验趋势表明,这种行为会随着模型规模、数据集大小和总训练计算量的增加而改善。
基础模型也在计算机视觉中进行了探索,尽管程度较小。也许最突出的工作是对齐来自网络的成对文本和图像。例如,CLIP 和 ALIGN 使用对比学习来训练对齐两种模式的文本和图像编码器。一旦经过训练,工程化的文本提示就可以零样本泛化到新颖的视觉概念和数据分布。此类编码器还可以与其他模块有效组合,以支持下游任务,例如图像生成(例如,DALL·E)。虽然在视觉和语言编码器方面取得了很大进展,但计算机视觉包括超出此范围的广泛问题,并且对于其中许多问题,并不存在丰富的训练数据。
在这项工作中,作者的目标是建立图像分割的基础模型。 也就是说,寻求开发一个可提示的模型,并使用能够实现强大泛化的任务在广泛的数据集上对其进行预训练。有了这个模型,其目标是使用提示工程解决新数据分布上的一系列下游分割问题。(基础模型是指即在广泛的数据上进行大规模训练,并且是适应广泛的下游任务)
该计划的成功取决于三个组成部分:任务、模型和数据。 为了开发它们,作者解决了以下有关图像分割的问题:
- 什么任务可以实现零样本泛化?
- 对应的模型架构是怎样的?
- 哪些数据可以为这项任务和模型提供支持?
2. 提出的方法
上述错综复杂,需要综合解决。作者首先定义一个可提示的分割任务,该任务足够通用以提供强大的预训练目标并支持广泛的下游应用程序。这个任务需要一个支持灵活提示的模型,并且可以在提示时实时输出分割掩码,以供交互使用。为了训练合格的模型,更是需要多样化、大规模的数据源。
不幸的是,没有用于分割的超大网络规模数据源; 为了解决这个问题,作者构建了一个“数据引擎”,即,在使用本文提出的高效模型来协助数据收集和使用新收集的数据来改进模型之间进行迭代。
![](http://139.9.1.231/wp-content/uploads/2023/04/image-17-1024x337.png)
2.1 任务:Segment Anything Task
任务:首先将提示(prompt)的概念从 NLP 转化为分割,其中提示可以是一组前景/背景点、粗略的框或掩码(mask)、自由格式的文本,或者一般来说,任何指示要分割内容的信息。 然后,可提示的分割任务是在给定任何提示的情况下返回有效的分割掩码。 “有效”掩码的仅仅意味着即使提示不明确并且可能引用多个对象(例如,回想一下衬衫与人的例子,如下图),输出也应该是至少一个对象的合理掩码。此要求类似于期望语言模型对模棱两可的提示输出连贯的响应。作者选择这个任务是因为它会产生一个自然的预训练算法和一个通过提示将零样本迁移到下游分割任务的通用方法。
![](http://139.9.1.231/wp-content/uploads/2023/04/image-18.png)
预训练:可提示分割任务提出了一种自然的预训练算法,该算法为每个训练样本模拟一系列提示(例如,点、框、掩码),并将模型的掩码预测与标注进行比较。作者从交互式分割中采用这种方法,尽管与交互式分割的目的是在足够的用户输入后最终预测一个有效掩码不同,本文的目标是始终为任何提示预测一个有效掩码,即使提示是模棱两可的。
零样本迁移:直觉上,所提出的预训练任务赋予模型在推理时对任何提示作出适当响应的能力,因此下游任务可以通过设计适当的提示来解决。例如,如果有一个猫的边界框检测器,则可以通过将检测器的框输出作为提示提供给我们的模型来解决猫实例分割。 一般来说,大量实际应用的分割任务都可以建模为提示的形式。
相关任务:分割是一个广泛的领域:有交互式分割、边缘检测、超像素化、对象候选生成、前景分割、语义分割、实例分割、全景分割等。本文可提示分割任务的目标是生成一个功能广泛的模型,可以通过提示工程适应许多(尽管不是全部)现有的和新的分割任务。 这种能力是任务泛化的一种形式,这与之前关于多任务分割系统的工作不同。 在多任务系统中,单个模型执行一组固定的任务,例如联合语义、实例和全景分割,但训练和测试任务是相同的。本文工作中的一个重要区别是,经过提示分割训练的模型可以在推理时通过充当更大系统中的组件来执行新的、不同的任务,例如,为了执行实例分割,可提示分割模型与现有的物体检测器可以结合。
讨论:提示和组合是强大的工具,可以使单个模型以可扩展的方式使用,有可能完成模型设计时未知的任务。 这种方法类似于其他基础模型的使用方式,例如,CLIP 如何成为 DALL·E 图像生成系统的文本图像对齐组件。作者预计,由提示工程等技术提供支持的可组合系统设计将支持比专门为一组固定任务训练的系统更广泛的应用程序。 从组合的角度比较可提示分割和交互式分割也很有趣:虽然交互式分割模型是为人类用户设计的,但为可提示分割训练的模型也可以组合成更大的算法系统。
2.2 模型:Segment Anything Model
可提示的分割任务和现实世界使用的目标对模型架构施加了约束。具体地说,该模型必须支持灵活的提示,需要分摊实时计算掩码以允许交互式使用,并且必须具有歧义识别能力。作者发现一个简单的设计满足所有三个约束:一个强大的图像编码器计算一个图像嵌入,一个提示编码器嵌入提示,然后这两个信息源被组合在一个轻量级掩码解码器中,预测分割掩码。作者将此模型称为 Segment Anything 模型或 SAM。通过将 SAM 分离成一个图像编码器和一个快速提示编码器/掩码解码器,相同的图像嵌入可以在不同的提示下重复使用(及其成本分摊)。给定一个图像嵌入、提示编码器和掩码解码器在 ~50 毫秒的网络浏览器中根据提示预测掩码。 本文专注于点、框和掩码提示,并且还使用自由格式的文本提示呈现初始结果。为了使 SAM 具有歧义意识, 作者将其设计为预测单个提示的多个掩码,从而使 SAM 能够自然地处理歧义。
![](http://139.9.1.231/wp-content/uploads/2023/04/image-19-1024x299.png)
图像编码器:在可扩展性和强大的预训练方法的推动下,作者使用 MAE 预训练视觉ViT,最低限度地适应处理高分辨率输入。图像编码器每张图像运行一次,可以在提示模型之前应用。
提示编码器:考虑两组提示:稀疏(点、框、文本)和密集(掩码)。作者通过位置编码和每个提示类型的学习嵌入相加来表示点和框,并使用来自 CLIP 的现成文本编码器来表示自由格式文本。 密集提示(即掩码)使用卷积嵌入,并与图像嵌入逐元素求和。
掩码解码器:掩码解码器有效地将图像嵌入、提示嵌入和输出标记映射到掩码。 该设计受 DETR 和 Maskformer 的启发,采用了 Transformer 解码器块的修改,后跟动态掩码预测头。修改后的解码器块在两个方向(提示图像嵌入和反之亦然)使用提示自注意力和交叉注意力来更新所有嵌入。运行两个块后,我们对图像嵌入进行上采样,MLP 将输出标记映射到动态线性分类器,然后计算每个图像位置的蒙版前景概率。
解决歧义:使用一个输出,如果给定一个具有歧义的提示,模型将平均多个有效掩码。为了解决这个问题,作者修改模型以预测单个提示的多个输出掩码。 实验发现 3 个掩码输出足以解决大多数常见情况(嵌套掩码通常最多三个深度:整体、部分和子部分)。在训练期间,仅反向传播掩码的最小损失。为了对掩模进行排名,该模型预测每个掩模的置信度分数(即估计的 IoU)。
效率:整体模型设计很大程度上受效率驱动。 给定一个预先计算的图像嵌入,提示编码器和掩码解码器在 CPU 上的 Web 浏览器中运行,时间约为 50 毫秒。这种运行时性能使模型能够进行无缝、实时的交互式提示。
损失和训练:我们使用 DETR 中使用的焦点损失和骰子损失的线性组合来监督掩码预测。 我们使用混合的几何提示来训练可提示的分割任务。 我们通过在每个掩码 11 轮中随机抽样提示来模拟交互式设置,从而使 SAM 能够无缝集成到我们的数据引擎中。
2.3 数据集:Segment Anything Dataset
SA-1B,由数据引擎收集的 1100 万张多样化、高分辨率、许可和隐私保护图像和 11亿高质量分割掩码组成。 同时,作者开源了 SA-1B 以帮助未来开发计算机视觉基础模型。注意到,SA-1B 将根据一项有利的许可协议发布,用于某些研究用途并保护研究人员。
图片:从直接与摄影师合作的供应商处获得了一组 1100 万张新图片的许可。 这些图像具有高分辨率(平均 3300×4950 像素),由此产生的数据大小可能会带来可访问性和存储方面的挑战。因此,本文将发布最短边设置为 1500 像素的下采样图像。 即使在下采样之后,我们的图像的分辨率也比许多现有的视觉数据集高得多(例如,COCO 图像约为 480×640 像素)。请注意,当今大多数模型都在低得多的分辨率输入上运行。发布的图像中的面部和车辆牌照已经模糊。
掩码:论文所提出的数据引擎产生了 11亿掩码,其中 99.1% 是全自动生成的。
![](http://139.9.1.231/wp-content/uploads/2023/04/image-20-1024x354.png)
掩码质量:为了估计掩模质量,作者随机抽取了 500 张图像(~50k 掩模)并要求专业注释者提高这些图像中所有掩模的质量。注释者使用我们的模型和像素精确的“画笔”和“橡皮擦”编辑工具来做到这一点。这个过程产生了一对自动预测和专业校正的掩码。作者计算了每对之间的 IoU,发现 94% 的对具有大于 90% 的 IoU(并且 97% 的对具有大于 75% 的 IoU)。为了进行比较,先前的工作估计注释器间的一致性为 85-91% IoU。 本文的实验通过人类评级证实,相对于各种数据集而言,掩码质量较高,并且在自动掩码上训练SAM几乎与使用数据引擎生成的所有掩码一样好。
![](http://139.9.1.231/wp-content/uploads/2023/04/image-21-1024x251.png)
3. 实验和效果
作者考虑五个任务,其中四个与用于训练 SAM 的可提示分割任务有很大不同。这些实验在训练期间未见的数据集和任务上评估 SAM(对“零样本迁移”的使用遵循其在 CLIP 中的使用)。数据集可能包括新颖的图像分布,例如水下或以第一视角的图像,这些图像不会出现在 SA-1B 中。
实验首先测试可提示分割的核心目标:从任何提示生成有效的掩码。 本文强调单个前景点提示的挑战性场景,因为它比其他更具体的提示更容易产生歧义。接下来,我们展示了一系列实验,这些实验遍历低、中和高级图像理解,并大致与该领域的历史发展平行。具体来说,提示 SAM:
- 执行边缘检测;
- 分割所有内容,即对象候选生成;
- 分割检测到的对象,即实例分割;
- 作为概念验证,以分割来自自由格式文本的对象(根据文本分割)。
这四个任务与 SAM 接受训练并通过提示工程实现的提示分割任务有很大不同。
实施细节:除非另有说明,SAM 使用 MAE 预训练的 ViT-H 图像编码器。SAM 在 SA-1B 上训练,注意该数据集仅包括从数据引擎的最后阶段自动生成的掩码。
3.1 零样本迁移点分割验证
评估从单个前景点分割对象。这个任务是不适定的,因为一个点可以指代多个对象。大多数数据集中的 Ground truth 掩码不会枚举所有可能的掩码,这会使自动度量变得不可靠。 因此,作者用一项人类研究来补充标准的 mIoU 指标(即,预测掩码和真实掩码之间所有 IoU 的平均值),其中注释者将掩码质量从 1(无意义)到 10(像素完美)进行评分。
我们主要与 RITM 进行比较,RITM 是一种强大的交互式分割器,与其他强大的基线相比,它在我们的基准测试中表现最佳。 我们使用了一套新编译的 23 个数据集,这些数据集具有不同的图像分布。下图是对比的实验结果:
![](http://139.9.1.231/wp-content/uploads/2023/04/image-22-1024x347.png)
SAM 在 23 个数据集中的 16 个上产生了更高的结果,高达 ∼47 IoU。论文还提供了一个“oracle”结果,其中最相关的 SAM 的 3 个掩码是通过将它们与真实注释进行比较来选择的,而不是选择最有信心的掩码。这揭示了歧义对自动评估的影响。 特别是,通过 oracle 执行歧义消解,SAM 在所有数据集上都优于 RITM。
3.2 零样本迁移边缘检测
使用 BSDS500 在边缘检测的经典low-level任务上评估 SAM。我们使用 16×16 的前景点规则网格提示 SAM,从而产生 768 个预测掩码(每个点 3 个)。NMS 删除冗余掩码。然后,使用未阈值掩模概率图的 Sobel 过滤和标准轻量级后处理(包括边缘 NMS)计算边缘图。
![](https://pic3.zhimg.com/80/v2-fa06efac9cfcbd9dcea7db2a19f40946_1440w.webp)
定性地,可以观察到即使 SAM 没有接受过边缘检测训练,它也会产生合理的边缘图。 与 ground truth 相比,SAM 预测了更多的边缘,包括 BSDS500 中未注释的敏感边缘。
![](https://pic3.zhimg.com/80/v2-6aa2cb2a45c8289bb86af50faeaf144e_1440w.webp)
SAM 自然落后于学习 BSDS500 偏差的最先进方法,即抑制哪些边缘。 尽管如此,与 HED(也在 BSDS500 上训练)等开创性的深度学习方法相比,SAM 表现良好,并且明显优于之前的零样本迁移方法,尽管这已经过时了。
3.3 零样本目标候选生成
目标候选生成在目标检测研究中发挥了重要作用,作为开创性系统的中间步骤。为了生成对象候选,论文运行了一个稍微修改过的自动掩码生成管道版本。数据集使用 LVIS,因为它的大量类别提出了具有挑战性的测试。 SAM与作ViTDet检测器(使用级联 Mask R-CNN ViT-H)实现的强基线进行比较。注意到,这个“基线”对应于向游戏 AR 展示的“检测器伪装成提议生成器”(DMP) 方法,使其成为一个真正苛刻的比较。
![](https://pic2.zhimg.com/80/v2-da32ee72c6babf68290f12faf1e8a4cd_1440w.webp)
在上表中,不出所料地看到使用 ViTDet-H 的检测作为对象候选总体上表现最好。 然而,SAM 在几个指标上表现非常出色。 值得注意的是,它在中型和大型物体以及稀有和常见物体上的表现优于 ViTDet-H。 事实上,SAM 仅在小对象和频繁对象上表现不如 ViTDet-H,而 ViTDet-H 可以轻松学习 LVIS 特定的注释偏差,因为它是在 LVIS 上训练的,与 SAM 不同。 作者还与 SAM 的消除歧义无意识版本(“单挑”)进行了比较,后者在所有 AR 指标上的表现都明显低于 SAM。
3.4 零样本迁移实例分割
转向更高层次的愿景,使用 SAM 作为实例分割器的分割模块。 实现很简单:运行对象检测器(之前使用的 ViTDet)并使用其输出框提示 SAM。 这说明了在更大的系统中编写 SAM。
![](https://pic2.zhimg.com/80/v2-19de7c4b0530b895b71c26e78026d299_1440w.webp)
观察到两个数据集上的差距,其中 SAM 相当接近,但肯定落后于 ViTDet。假设在 COCO 上,mask AP 间隙较大且标注质量相对较低(正如人类研究所证实的那样),ViTDet 学习了 COCO masks 的特定偏差。SAM 作为一种零样本方法,无法利用这些(通常不受欢迎的)偏差。LVIS 数据集具有更高质量的 ground truth,但仍然存在特定的特性(例如,masks 不包含孔,它们是构造简单的多边形)和模态与 amodal masks 的偏差。 同样,SAM 没有接受过学习这些偏差的训练,而 ViTDet 可以利用它们。
3.5 零样本文本引导的掩码生成
考虑一个更高级别的任务:从自由格式文本中分割对象。该实验是 SAM 处理文本提示的能力的概念验证。 虽然在之前的所有实验中都使用了完全相同的 SAM,但对于这个 SAM 的训练过程进行了修改,使其具有文本感知能力,但不需要新的文本注释。 具体来说,对于每个面积大于 100^2 的手动收集掩码,我们提取 CLIP 图像嵌入。 然后,在训练期间,我们使用提取的 CLIP 图像嵌入提示 SAM 作为其第一次交互。这里的关键观察是,因为 CLIP 的图像嵌入经过训练以与其文本嵌入对齐,所以我们可以使用图像嵌入进行训练,但使用文本嵌入进行推理。 也就是说,在推理时,我们通过 CLIP 的文本编码器运行文本,然后将生成的文本嵌入作为 SAM 的提示。
![](https://pic2.zhimg.com/80/v2-332d59a19daa8116f5df111569852981_1440w.webp)
SAM 可以根据简单的文本提示(如“轮子”)和短语(如“海狸齿格栅”)来分割对象。 当 SAM 无法仅从文本提示中选择正确的对象时,一个额外的点通常会修复预测,类似于PhraseClick。
3.5 消融实验
数据引擎阶段、图像编码器缩放和训练数据缩放的消融研究。(左)每个数据引擎阶段都会改进我们的 23 个数据集套件,并且仅使用自动数据进行训练会产生与使用所有三个阶段的数据相似的结果。 (中)用约 10% 的 SA-1B 和完整的 SA-1B 训练的 SAM 具有可比性。默认使用所有 1100 万张图像进行训练,但使用 100 万张图像是一个合理的实际设置。(右)缩放 SAM 的图像编码器显示出有意义但饱和的增益。 然而,在某些设置中可能更喜欢较小的图像编码器。
![](https://pic2.zhimg.com/80/v2-d04c4cae0bbf72fc03d4527b856d5251_1440w.webp)
4. 总结和不足
Segment Anything 项目试图将图像分割提升到基础模型时代,这篇论文试图使这一飞跃成为可能的新任务(可提示分割)、模型(SAM)和数据集(SA-1B)。
限制:虽然 SAM 总体上表现良好,但并不完美。它可能会错过精细的结构,有时会产生不连贯的小组件的幻觉,并且不会像“放大”的计算密集型方法那样清晰地产生边界。一般来说,专用的交互式分割方法在提供许多点时优于 SAM。与这些方法不同,SAM 是为通用性和使用广度而不是高 IoU 交互式分割而设计的。 此外,SAM 可以实时处理提示,但是当使用重型图像编码器时,SAM 的整体性能并不是实时的。 本文中对 text-to-mask 任务的尝试是探索性的,并不完全可靠,尽管可以相信它可以通过更多的努力得到改进。 虽然 SAM 可以执行许多任务,但尚不清楚如何设计实现语义和全景分割的简单提示。
未来:预训练模型可以提供新功能,甚至超出训练时的想象(涌现现象)。一个突出的例子是 CLIP如何用作更大系统中的一个组件,例如 DALL·E。本文的目标是使用 SAM 使这种组合变得简单明了,通过要求 SAM 为广泛的分割提示预测有效掩码来实现这一目标。 效果是在 SAM 和其他组件之间创建可靠的接口。 例如,MCC可以轻松地使用 SAM 来分割感兴趣的对象,并实现对未见对象的强泛化,以便从单个 RGB-D 图像进行 3D 重建。在另一个示例中,SAM 可以通过可穿戴设备检测到的注视点进行提示,从而启用新的应用程序。 由于 SAM 能够泛化到第一视角的图像等新领域,这样的系统无需额外培训即可工作。