Abstract
我们介绍了Segment Anything(SA)项目:新的图像分割任务、模型和数据集。高效的数据循环采集,使我们建立了迄今为止最大的分割数据集,在1100万张图像中,共超过10亿个掩码。
该模型被设计和训练为可提示的的 (promptable),因此它可以将零样本(zero-shot) 迁移到新的图像分布和任务。我们评估了其在许多任务上的能力,发现其零样本迁移性能十分优秀,与之前的完全监督方法的结果相比,具有竞争力甚至优于这些结果。链接:
https://segment-anything.com
https://arxiv.org/pdf/2304.02643.pdf
1 Introduction
【基础模型的流行】
在网络级别的(web_scale)数据集上预训练的大语言模型,正以强大的零样本和较少的泛化能力 革新NLP。这些“基础模型”可以推广到训练时没见过的任务和数据分布上。这种功能通常通过提示工程(prompt engineering )来实现,在提示工程中,人工编辑的文本,用于提示语言模型为当前任务生成有效的文本响应。当使用网络中的丰富文本语料库 进行不同规模训练时,这些模型的零样本和少样本的表现与其他微调模型相比更优。经验表明,这种操作的优势随着模型规模、数据集大小和总训练计算的增加而提升。
基础模型也在计算机视觉中进行了探索,尽管程度较低。也许最突出的示例是来自网络中的文本-图像对齐。例如,CLIP 和ALIGN 使用对比学习来训练对齐两种模态的文本和图像编码器。经过训练后,工程文本提示可以泛化到 新的视觉概念和数据分布。这种编码器还与其他模块有效组合,以实现下游任务,如图像生成(例如,DALL·e)。虽然在视觉和语言编码器方面已经取得了很多进展,但计算机视觉涵盖的问题范围,远远超出这一范畴,而且对于许多问题,还缺少丰富的训练数据。
【该项任务我们的工作】
这些问题错综复杂,需要综合解决。我们在该项任务中:
任务:首先 定义了一个可提示的分割任务,该任务足够通用 以满足强大的预训练目标和广泛的下游应用。
模型:此任务 需要一个支持灵活提示的模型,并且可以在提示时实时输出分割掩码,以便进行交互使用。
数据:为了训练这样的模型,就需要一个多样化的、大规模的数据源。不幸的是,没有用于分割的网络规模的数据源;为了解决这个问题,我们构建了一个“数据引擎”:我们在使用高效的模型来帮助数据收集、使用新收集的数据来改进模型之间进行迭代。
具体的为:
1 什么任务可以实现零样本泛化?
在NLP和最近的计算机视觉中,基础模型是一个很有前途的发展,它可以使用“提示”技术 对新数据集和任务 完成零样本和少样本学习。受这项工作的启发,我们提出了可提示的分割任务,其中的目标是在给定任何分割提示的情况下 返回有效的分割掩码(图1a)。
提示只是指定在图像中分割什么,例如,提示可以包括标识对象的位置或文本信息。有效输出掩码的要求意味着,即使提示不明确,并且可能涉及多个对象(例如,衬衫上的一个点可能指示衬衫或穿着衬衫的人),输出也应该是这些对象中 至少一个的合理掩码。我们使用可提示的分割任务作为预训练目标,并通过提示工程解决一般的下游分割任务。
2 相应的模型结构是什么?
可提示的分割任务和现实世界使用的目标对模型体系结构施加了约束。特别是,该模型必须支持灵活的提示,需要实时计算掩码以允许交互式使用,并且必须具有模糊性。令人兴奋的是,我们发现一个简单的设计满足了所有三个约束:
- 一个强大的图像编码器,计算图像嵌入(image embedding),
一个提示编码器嵌入提示 (prompt embedding)
一个预测分割掩码的轻量级掩码解码器,用于组合这两个信息源。我们将此模型称为分段任意模型或SAM(见图1b)。通过将SAM分离为图像编码器 和快速提示编码器/掩码解码器,可以在不同提示下重用相同的图像嵌入(分摊计算成本)。在给定图像嵌入的情况下,在web浏览器中,提示编码器和掩码解码器预测一个提示 得到掩码时间约为50ms。我们专注于点、框、掩码自由形式的文本的提示形式。为了让SAM意识到模糊性,我们将其设计为预测单个提示的多个掩码,使SAM能够自然地处理模糊性,例如衬衫和人的例子。
3 什么数据可以为这个任务和模型提供动力?
- 数据引擎(§4)。
为了实现对新数据分布的强泛化,我们发现有必要在一组庞大而多样的掩码上训练SAM,超越现有的任何分割数据集。虽然基础模型的一种典型方法是在线获取数据[82],但掩码并不丰富,因此我们需要一种替代策略。我们的解决方案是建立一个“数据引擎”,即我们与model-in-the-loop 数据集注释,共同提升我们的模型(见图1c)。我们的数据引擎有三个阶段:辅助手动、半自动和全自动。
在第一阶段,SAM协助注释器注释掩码,类似于经典的交互式分段设置。
在第二阶段,SAM可以通过提示可能的对象位置来自动生成对象子集的掩码,注释器专注于注释其余对象,有助于增加掩码的多样性。
在最后阶段,我们用前景点网格的方式,作为SAM的提示信息,平均每张图像产生约100个高质量掩码。
- 数据集(§5)。我们的最终数据集SA-1B,包括来自1100千万张的有许可和隐私保护图像,超过10亿个掩码(见图2)。SA-1B是使用我们的数据引擎的最后阶段 完全自动收集的,其掩码比任何现有的分割数据集都多400倍,正如我们广泛验证的那样,掩码具有高质量和多样性。除了将其用于训练SAM以使其稳健和通用之外,我们希望SA-1B成为旨在建立新基础模型的研究的宝贵资源。
- 负责任的AI(§6)。我们研究并报告了使用SA-1B和SAM时潜在的公平问题和偏见。SA-1B中的图像跨越了地理和经济上不同的国家,我们发现SAM在不同人群中表现相似。我们希望这将使我们的工作 在现实世界的用例中更加公平。我们在附录中提供了模型和数据集卡。
其他的:
- 实验(§7)。我们对SAM进行了广泛的评估。首先,使用一套新的23个分割数据集,发现SAM从单个前景点生成高质量的掩模,通常仅略低于手动注释的真实标签。其次,在零样本迁移协议下的各种下游任务上,我们使用提示工程,具有一致的强大的定量和定性结果,包括边缘检测、对象建议生成、实例分割和文本到掩码预测的初步探索。这些结果表明,SAM可以与提示工程一起开箱即用,以解决涉及SAM训练数据之外的对象和图像分布。尽管如此 仍有改进的空间。
- 发布。我们发布SA-1B数据集用于研究目的,并在允许的开放许可证(Apache 2.0)下提供SAM,https://segment-anything.com.我们还通过在线演示展示SAM的能力。
接下来对以上内容详细的介绍。
2 Segment Anything Task
我们从NLP中获得了灵感,在NLP中,下一个token预测任务(next token prediction task) 用于基础模型预训练,并通过提示工程解决不同的下游任务。为了建立分割的基础模型,我们的目标是定义一个具有类似功能的任务。
- 基础任务。
我们首先将提示的概念从NLP转换为分割,其中提示可以是一组前景/背景点、粗略框、掩码、自由格式文本,或者是指示在图像中分割什么的任何信息。然后,可提示的分割任务是在给定任何提示的情况下返回有效的分割掩码。“有效”掩码的要求:即使提示不明确,并且可能涉及多个对象(例如衬衫与人的例子,见图3),输出也应该是其中至少一个对象的合理掩码。
这一要求类似于期望语言模型对歧义的提示输出连贯的响应。我们选择此任务是因为,它会产生一种自然的预训练算法,和一种通过提示将零样本迁移到下游分割任务的通用方法。
- 预训练。
可提示分割任务提出了一种自然的预训练算法,该算法模拟每个训练样本的提示序列(例如,点、框、掩码),并将模型的预测掩码与标签进行比较。我们调整了交互式分割(交互式目的是在足够的用户输入后最终预测有效的掩码),调整的目的是始终预测任何提示的有效掩码,即使提示不明确。这确保了预训练模型在涉及歧义的用例中是有效的,包括我们的【数据引擎§4】所要求的自动注释。我们注意到,在这项任务中表现OK是具有挑战性的,需要选择专门的建模和训练损失,我们在第三章节对此进行了讨论。- 零样本迁移。
直观地说,我们的预训练任务赋予了模型在推理时对任何提示做出适当响应的能力,因此可以通过设计适当的提示来解决下游任务。例如,如果有一个猫的目标检测模型,则可以通过向模型提供检测模型输出的框 作为提示 来解决猫实例分割。一般来说,许多实际的分割任务都可以被设计成提示问题。除了自动数据集标注外,我们还在第七章节的实验中探索了五个不同的示例任务。- 相关任务。
分割是一个广泛的领域:有交互式分割、边缘检测、超级像素化、对象建议生成、前景分割、语义分割、实例分割、全景分割等。我们的可提示分割任务的目标是通过提示工程 生成一个功能广泛的模型,该模型可以适应许多(尽管不是全部)现有和新的分割任务。这种能力是任务泛化的一种形式。
请注意,这与之前关于多任务分割系统的工作不同:在多任务系统中,单个模型执行一组固定的任务,例如联合语义、实例和全景分割,他们的训练和测试任务是相同的。我们工作中的一个重要区别是,为可提示分割训练的模型可以在推理时通过充当更大系统中的组件来执行新的不同任务,例如,为了执行实例分割,将可提示分割模型与现有的目标检测器相结合。- 讨论。
提示和组合是功能强大的工具,使单个模型能够以可扩展的方式使用,有可能完成模型设计时未知的任务。这种方法类似于其他基础模型的使用方式,例如CLIP是DALL·E 图像生成系统的文本图像对齐组件。
我们预计,与专门为固定任务集训练的系统相比,以提示工程等技术为支持的可组合系统设计 将实现更广泛的应用程序。从组合的角度比较可提示分割和交互式分割也很有趣:虽然交互式分割模型是在考虑人类用户的情况下设计的,但对于可提示分割训练的模型也可以组成一个更大的算法系统,正如我们将要演示的那样。
3 Segment Anything Model
接下来介绍用于可提示分割的Segment Anything Model(SAM)。SAM有三个组件(如图4所示):图像编码器、灵活提示编码器和快速掩码解码器。我们建立在Transformer视觉模型的基础上,对(分摊的)实时性能进行了特定的权衡。我们在这里对这些组件进行了高层描述,详细信息见 §a。
图4:Segment Anything Model(SAM)概述。重量级图像编码器输出image embedding,然后可以通过各种输入提示有效地查询image embedding,以amortized实时速度生成对象掩码。对于与多个对象对应的模糊提示,SAM可以输出多个有效掩码和相关的置信度分数。
- 【图像编码器】
受可扩展性和强大的预训练方法的启发,我们使用了MAE 预训练的Vision Transformer (ViT),并进行了最小程度的适应以处理高分辨率输入。图像编码器每个图像仅运行一次,并且可以在提示模型之前应用。- 【提示编码器】
我们考虑两组提示:稀疏(点、框、文本)和密集(掩码)。我们通过位置编码 来表示点和框,这些位置编码与每个提示类型的image embedding相加,使用CLIP的现成文本编码器来表示自由格式文本。密集提示(掩码)使用卷积嵌入,并与图像嵌入逐元素求和。- 【掩码解码器】
掩码解码器有效地将image embedding、 prompt embeddings和output token映射到掩码。该设计受到[14,20]的启发,采用了对Transformer解码器块进行了修改,再接上个动态掩码预测头。我们修改后的解码器块在两个方向上(提示嵌入到图像嵌入、图像嵌入到提示嵌入)使用提示自注意和交叉注意,来更新所有embeddings。在运行两个块之后,我们对image embedding进行上采样,并使用一个多层感知机将output token映射到动态线性分类器,然后动态线性分类器计算每个图像位置的掩码前景概率。- 【解决歧义】
为了解决这个问题,我们修改了模型,以预测单个提示的多个输出掩码(见图3)。我们发现,3个掩码输出足以解决大多数常见情况(嵌套掩码通常最多有三个深度:整体、部分和子部分)。在训练过程中,我们只在掩码上反向传播最小的损失[15,45,64]。为了对掩码进行排序,该模型预测每个掩码的置信度得分(估计的IoU)。- 【效率】
整体模型设计在很大程度上是出于效率的考虑。给定预先计算的image embedding,提示编码器和掩码解码器 在网络浏览器中运行,在CPU上运行,时间约为50ms。这种运行时性能使我们的模型能够无缝、实时地进行交互式提示。- 【损失和训练】
我们使用[14]中使用的focal loss[65]和 dice loss[73]的线性组合来监督掩模预测。我们使用几何提示的混合来训练可提示的分割任务(文本提示见§7.5)。根据[92, 37]的方法,我们通过在每个掩码的11轮中随机采样提示来模拟交互式设置,使SAM能够无缝集成到我们的数据引擎中。
4 Segment Anything Data Engine
由于互联网上的分割掩码并不丰富,我们建立了一个数据引擎来收集我们的11亿掩码数据集SA-1B。数据引擎有三个阶段:
(1)手动注释阶段:模型辅助
(2)半自动阶段:混合了自动预测掩码和模型辅助注释
(3)全自动阶段:在该阶段中,我们的模型在没有注释器输入的情况下生成掩码。
我们将详细介绍下一步。
- 【辅助手动阶段】
- 标注者的操作:
1 该阶段,类似于经典的交互式分割,一组专业标注人员通过使用SAM提供的基于浏览器的交互式分割工具点击前景/背景对象点来标记掩码。掩码可以使用pixelprecise“画笔”和“橡皮擦”工具进行细化。我们的模型辅助标注直接在浏览器内实时运行(使用预先计算的image embedding),从而实现真正的交互式体验。
2 我们没有对标记对象施加语义约束,标注者可以自由地标记“东西”。我们建议标注者标记他们可以命名或描述的对象,但没有收集这些名称或描述。
3 标注者被要求按照突出的顺序标记对象,并鼓励在掩码需要30秒以上的时间进行标注下一张图像。- SAM的训练:
在这个阶段开始时,SAM是使用公共分割数据集进行训练的。在充分的数据标注之后,仅使用新标注的掩码对SAM进行再训练。随着更多掩码的收集,图像编码器从ViT-B扩展到ViT-H,其他架构细节也在发展;我们总共对模型进行了6次再训练。- 标注的速度和数量:
随着模型的改进,每个掩码的平均注释时间从34秒减少到14秒,比COCO[66]的掩码注释快6.5倍,仅比使用极值点的边界框标记慢2倍[76,71]。随着SAM的改进,每张图像的平均掩码数量从20个增加到44个。总的来说,我们在这个阶段从120k张图像中收集了430万个掩码。- 【半自动阶段】
- 该阶段的目标是增加掩码的多样性,以提高我们的模型分割任何东西的能力。
- 首先自动检测到有信心的掩码(为了将标注者的注意力集中在不太突出的对目标上),然后向标注者展示了预先填充了这些掩码的图像,并要求他们注释任何其他未注释的对象。
- 为了检测有信心的掩码,我们使用通用的“目标”类别在所有第一阶段掩码上训练了一个边界框检测器[84]。在此阶段,我们在180k张图像中额外收集了590万个掩码(总共1020万个掩码)。与第一阶段一样,我们定期根据新收集的数据对模型进行再训练(5次)。每个掩码的平均标注时间回到了34秒(不包括自动掩码),因为这些目标更难标记。每张图像的平均掩码数量从44个增加到72个(包括自动掩码)。
- 【全自动阶段】
在最后阶段,标注是完全自动的。可行性的原因是我们的模型有两个主要的增强。
- 首先,在这个阶段开始时,我们收集了足够的掩码,以大大改进模型,包括前一阶段的各种掩码。
- 其次,到了这个阶段,我们已经开发了模糊感知模型,它使我们能够预测有效的掩码,即使在模糊的情况下也是如此。具体来说:
- 我们用32×32的规则网格点,用于提示模型,并为每个点预测一组可能对应于有效对象的掩码。对于模糊感知模型,如果一个点位于部分或子部分上,我们的模型将返回子部分、部分和整个对象。
- 我们模型的IoU预测模块用于选择自信的掩码(这里自信的掩码,是指可信度更高的掩码);
此外,我们只识别和选择了稳定的掩码(如果在0.5−δ和0.5+δ处对概率图进行阈值处理会导致类似的掩码,则我们认为掩码是稳定的)。- 最后,在选择了自信和稳定的掩码后,我们应用非最大抑制(NMS)来过滤重复。为了进一步提高较小掩码的质量,我们还处理了多个重叠的放大图像裁剪。有关此阶段的更多详细信息,请参见§B。我们将全自动掩码生成应用于数据集中的所有1100万张图像,总共生成了11亿个高质量掩模。接下来,我们将描述并分析生成的数据集SA-1B。
5 Segment Anything Dataset
我们的数据集SA-1B,由1100万多样化、高分辨率、许可和隐私保护的图像,和使用我们的数据引擎收集的11亿高质量分割掩码组成。我们将SA-1B与现有数据集进行比较,并分析掩模质量和特性。我们正在发布SA-1B,以帮助未来计算机视觉基础模型的开发。SA-1B将在某些研究用途的有利许可协议下发布,并为研究人员提供保护。
- 【图像】
我们直接与摄影师合作的供应商那里获得了一组1100万张新图像的许可。这些图像具有高分辨率(平均3300×4950像素),由此产生的数据大小可能会带来可访问性和存储方面的挑战。因此,我们正在发布最短边设置为1500像素的下采样图像。即使在下采样之后,我们的图像的分辨率也明显高于许多现有的视觉数据集(例如,COCO图像的分辨率为~480×640像素)。请注意,目前大多数模型的输入分辨率要低得多。在公布的图像中,人脸和车牌被模糊了。- 【掩码】
我们的数据引擎产生了11亿个掩码,其中99.1%是完全自动生成的。因此,自动掩码的质量至关重要。我们将其直接与专业标注进行比较,并查看各种掩码质量与著名分割数据集的比较。正如下面的分析和 §7 中的实验所证实的那样,我们的自动掩码质量高,对训练模型有效。受这些发现的启发,SA-1B仅包括自动生成的掩码。- 【掩码质量】
为了估计掩码质量,我们随机采样了500张图像(~5万个掩模),并要求我们的专业标注人员提高这些图像中所有掩码的质量。标注人员使用我们的模型和像素精确的“画笔”和“橡皮擦”编辑工具来完成这项工作。这一过程产生了一对自动预测和专业校正的掩码。我们计算了每对之间的IoU,发现94%的对的IoU大于90%(97%的对的IoU大于75%)。为了进行比较,先前的研究估计 标注者之间的一致性为85-91%IoU。我们在 §7中的实验通过人工评分证实,相对于各种数据集,使用自动生成的掩码训练我们的模型,几乎与使用数据引擎生成的所有掩码一样好。- 【掩码特性】
在图5中,我们绘制了SA-1B 和 现有最大的分割数据集 中的对象中心的空间分布。所有数据集中都普遍存在摄影师的偏好。我们观察到,与分布最相似的两个数据集LVIS v1 和 ADE20K 相比,SA-1B对图像角落的覆盖范围更大,而COCO 和Open Images V5 具有更显著的中心偏差。在图6(图例)中,我们按大小比较了这些数据集。
SA-1B比第二大的Open images多了11倍的图像和400倍的掩码。平均而言,它每张图像的掩码比Open Images多36倍。在这方面最接近的数据集ADE20K,每张图像的掩码仍然减少了3.5倍。图6(左)绘制了掩码的周边图像分布。接下来,我们看看图6(中间)中的图像相对掩码大小(掩码面积除以图像面积的平方根)。正如预期的那样,由于我们的数据集每个图像有更多的掩码,因此它也倾向于包括更大比例的中小型相对大小掩码。
最后,为了分析形状复杂性,我们观察图中的掩模凹度(1减去掩码面积除以掩码凸包的面积)。第6(右)段。由于形状复杂度与掩码大小相关,我们通过从分层掩码尺寸中进行分层采样来控制数据集的掩码大小分布。我们观察到,我们的掩码的凹陷分布与其他数据集的凹陷分布大致相似。
6 Segment Anything RAI Analysis
接下来,我们通过调查使用SA-1B和SAM时潜在的公平问题和偏差,对我们的工作进行负责任的人工智能(RAI)分析。我们重点关注SA-1B的地理和收入的分布情况,以及SAM在受保护的人的属性中的公平性。我们还在 §F 中提供了数据集、数据注释和模型卡。
【地域和收入代表性】
- 我们使用标准方法推断了SA-1B中的国家图像是使用摄影技术拍摄的(见 §C)。在图7中,我们可视化了SA-1B(左)和图像最多的50个国家(右)中的每个国家的图像计数。我们注意到,排名前三的国家来自世界不同地区。接下来,在表1中,我们比较了SA-1B、COCO[66]和Open Images[60]的地理和收入代表。
表1:地理分布和收入分布的比较
SA-1B在欧洲、亚洲和大洋洲以及中等收入国家的图像比例要高得多。所有数据集都未能充分代表非洲和低收入国家。但在SA-1B中,包括非洲在内的所有地区都至少有2800万个掩码,比以前任何数据集的掩码总数都多10倍。
最后,每张图像(未显示)的平均掩码数量在区域和收入之间相当一致(每张图像94-108个)。
【对人们进行分割时的公平性】
- 我们通过测量SAM在群体之间的表现差异,调查了与外貌性别上、年龄和肤色上呈现相关的潜在公平问题。我们使用更具包容性的人群注释(MIAP)[87]数据集来进行性别表示和年龄,并使用专有的肤色数据集(见 §C)。我们的评估使用了1个和3个点的随机采样的模拟交互式分割(见 §D)。
- 表2(左上角)显示了性别表现的结果。我们注意到,女性在检测和分割数据集中的代表性不足[115],但观察到SAM在各个群体中的表现相似。
- 我们重复表2(左下)中对年龄的分析,注意到那些更年轻的人 在大规模数据集中的代表性不足[110]。SAM在那些被认为年龄较大的人身上表现最好(尽管置信区间很大)。
- 最后,我们重复表2(右)中对肤色的分析,注意到在大规模数据集中,表观肤色较浅的人被证明代表性过高,而肤色较深的人代表性不足[110]。由于MIAP不包含感知肤色标注,我们使用了感知Fitzpatrick皮肤类型的一个专有数据集,其范围从1(最浅肤色)到6(最深肤色)。虽然平均数有所不同,但我们没有发现不同群体之间的显著差异。我们相信我们的发现源于任务的性质,并承认当SAM被用作更大系统的组件时可能会出现偏差。
- 最后,在§C中,我们将分析扩展到服装分割,在那里我们发现了感知性别表现的偏见。
表2: SAM根据感知的性别表现、年龄组和肤色对人群进行细分的表现。显示了95%的置信区间。在每一组中,除了较老的置信区间与中等的置信区间外,所有置信区间都重叠。
7 Zero-Shot Transfer Experiments
【零样本迁移的任务和数据的选择】
在本节中,我们介绍了SAM的零样本迁移实验。
- 实验五个任务,其中四个任务与用于训练SAM的提示分割任务明显不同。
我们的实验从测试可提示分割的核心目标开始:从任何提示生成有效的掩码。我们强调单一前景点提示的这种挑战性场景,因为它比其他更具体的提示 更有可能是模糊的。接下来,我们介绍了一系列实验,这些实验横跨低、中、高级别的图像理解,并大致于该领域的历史发展相平行。具体而言,我们提示SAM执行以下任务:(1)进行边缘检测,(2)分割所有内容,即对象建议生成,(3)分割检测到的对象,即实例分割,(4)作为概念验证,从自由格式文本中分割对象。这四项任务与SAM接受训练的可提示分割任务有很大不同。我们的实验以消融研究结束。- 训练时未见过的数据集。
这些实验评估了训练过程中没有见过的数据集和任务(我们使用的“零样本迁移”遵循CLIP中的用法[82])。数据集可能包括新的图像分布,例如水下或以自我为中心的图像(例如图8),据我们所知,这些图像没有出现在SA-1B中。- 实施。
除非另有规定:(1)SAM使用MAE[47]预训练的ViT-H[33]图像编码器,(2)SAM在SA-1B上训练,注意该数据集仅包括数据引擎最后阶段自动生成的掩码。有关所有其他模型和训练细节,如超参数,请参阅 §A 。
7.1 在单点预测有效的掩码 上的零样本迁移
- 【任务】
我们评估从单个前景点分割目标。由于一个点可以引用多个目标,因此此任务不适定。大多数数据集中的真实标签掩码并没有枚举所有可能的掩码,这可能会使自动衡量指标变得不可靠。因此,我们用一项【人类研究】来补充标准的mIoU指标(即预测掩码和真实标签掩码之间的所有IoU的平均值),在该研究中,标注者对掩码质量的评分从1(无意义)到10(像素完美)。有关更多详细信息,请参见 §D.1、§E、 §G。
默认情况下,我们从真实标注掩码的“中心”采样点(掩码内部距离变换的最大值),按照交互式分割中的标准评估协议进行。由于SAM能够预测多个掩码,因此默认情况下,我们只评估模型中最有信心的掩码。基线都是单掩码方法。我们主要与RITM[92]进行比较。RITM是一种强大的交互式分割器,与其他强大的基线相比,它在我们的基准上表现最好[67,18]。- 【数据集】
我们使用了一套新构建的23个数据集,这些数据集具有不同的图像分布。图8列出了数据集,并显示了每个数据集的样本(更多细节请参见附录表7)。我们使用所有23个数据集进行mIoU评估。
对于【人类研究】,我们使用图9(b)中列出的子集(由于此类研究的资源需求)。这个子集包括自动指标下SAM优于和不及RITM的数据集。
- 【结果】
(图a) 使用mIoU对23个数据集的全套数据集进行自动评估。
我们比较了图9a中(下图)每个数据集的结果与RITM。SAM在其中16个数据集上产生了更高的结果,高达~47 IoU。我们还提出了一个"oracle"结果,即通过将SAM的3个掩码与标签进行比较 来选择最相关的掩码,而不是选择最有信心的掩码。这揭示了歧义对自动评估的影响。特别是,使用oracle来执行模糊性解决,SAM在所有数据集上都优于RITM。
(图b)【人类研究】的结果如图9b所示。误差条表示平均掩码评分的95%置信区间(所有差异都是显著的;详见 §E)。
标注者一致认为SAM掩码的质量大大高于最强基线RITM。
- 具有单个输出掩码的“模糊感知”SAM版本具有较低的评级,但仍高于RITM。
- SAM的平均评分在7到9之间,这对应于质量评估的指导方针:“高分(7-9):目标是可识别的,错误很小且少(例如,缺少一个小的、严重遮挡的断开组件,…)。”
这些结果表明SAM已经学会从一个点分割有效的掩码。注意,对于像DRAM和IBD这样的数据集,SAM在自动评估方面更差,但它在人类研究中得到的评分一直更较高。
(图9c) 显示了额外的基线,SimpleClick和FocalClick,它们获得的单点性能低于RITM和SAM。随着点数从1增加到9,我们观察到方法之间的差距减小。因为任务变得更容易,这是意料之中的事;此外,SAM并没有针对非常高的IoU状态进行优化。
(图9d),我们将默认的中心点采样替换为随机点采样。我们观察到SAM和基线之间的差距越来越大,并且SAM能够在任何一种采样方法下获得可比较的结果。
7.2 边缘检测上 的零样本迁移
- 【方法】
我们使用BSDS500数据集上评估SAM,这是一个用于边缘检测的经典低级任务。我们使用了一个简化版本的自动掩码生成流程。具体来说,我们用前景点的16×16规则网格提示SAM,得到768个预测掩码(每个点3个)。通过NMS移除冗余掩码。然后,使用未经阈值处理的掩码概率图进行Sobel滤波,并进行标准轻量级后处理(包括边缘NMS)来计算边缘图(详见 §D.2)。- 【结果】
我们在图10中可视化了具有代表性的边缘图(更多信息请参见图15)。定性地说,即使SAM没有经过边缘检测训练,它也能产生合理的边缘图。与基本事实相比,SAM预测了更多的边缘,包括BSDS500中未注释的合理边缘。这种偏差在表3中得到了定量反映:50%精度(R50)的召回率很高,但以精度为代价。SAM落后于学习BSDS500偏差的最先进方法,即要抑制哪些边缘。然而,与HED(也接受过BSDS500训练)等开创性深度学习方法相比,SAM表现良好,并且明显优于以前的零样本转移方法(尽管该方法已经过时)。
7.3 目标提议的 零样本迁移
- 【方法】
接下来,我们对SAM在 目标提议 生成中进行评估。这项任务在目标检测研究中发挥了重要作用,是开创性系统的中间步骤(例如[102,41,84])。为了生成目标提议,我们运行了一个稍微修改过的自动掩码生成流程版本,并将掩码作为提案输出(有关详细信息,请参见 §D.3)。
我们计算LVIS v1数据集上的标准平均召回指标。我们之所以关注LVIS,是因为它的类别众多,这是一个具有挑战性的测试。我们将其与作为ViTDet检测器(具有级联Mask R-CNN ViT-H)实现的强基线进行比较。我们注意到,这个“基线”对应于 “伪装为提议生成器的检测器”(DMP)方法[16],该方法被证明能够操作AR,这使其成为一个真正要求苛刻的比较。- 【结果】
在表4中,我们毫不奇怪地看到,使用来自ViTDet-H的检测作目标提议(即,游戏AR的DMP方法[16])总体上表现最好。然而,SAM在几个指标上做得非常好。值得注意的是,它在中型和大型对象以及稀有和常见对象上的性能优于ViTDet-H。事实上,SAM只在小对象和频繁目标上表现不佳,因为ViTDet-H可以很容易地学习LVIS特定的标注偏差,因为它是在LVIS上训练的,而SAM不是。我们还将SAM的一个消除了模糊性感知的版本(“single-out.”)进行了比较,后者在所有AR指标上的表现都比SAM差得多。
7.4 实例分割的 零样本迁移
- 【方法】
转到更高层次的视觉问题,我们使用SAM作为实例分割器的分割模块。实现很简单:我们运行一个对象检测器(之前使用的ViTDet),并用它的输出框提示SAM。这样可以将SAM嵌入到更大的系统中。- 【结果】
我们比较了表5中 SAM 和 ViTDet 对COCO和LVIS预测的掩码。从掩码AP指标来看,我们在两个数据集上都观察到了差距,其中SAM表现相对较好,尽管落后于ViTDet。通过可视化输出,我们观察到SAM掩码通常在质量上优于ViTDet的掩模,具有更清晰的边界(见 §D4 和图16)。为了调查这一观察结果,我们进行了一项额外的【人类研究】,要求标注者在之前使用的1到10质量等级上对ViTDet掩码和SAM掩码进行评分。在图11中,我们观察到SAM在研究中始终优于ViTDet
- 表5:实例分割结果。使用ViTDet框提示SAM进行零样本分段。全监督的ViTDet优于SAM,但在更高质量的LVIS掩码上差距缩小。有趣的是,人工评级中SAM优于ViTDet(见图11)
- 图16: LVIS v1上的零样本实例分割。SAM生成的掩码质量比ViTDet高。作为零样本模型,SAM没有学习特定的训练数据偏差;见右上角的例子(中间没有洞,也就是中间的物体没有标注)。
- 图11:我们对ViTDet和SAM的人体研究得出的掩码质量评级分布,均应用于LVIS真实标签框上。我们还报告了LVIS和COCO真实标签质量。图例显示了评级平均值和95%置信区间。尽管SAM的AP较低(表5),但其评级高于ViTDet,这表明ViTDet利用了COCO和LVIS训练数据中的偏差。
我们假设,在COCO上,掩码AP差距较大,标签质量相对较低(正如人类研究所证实的那样),ViTDet学习到COCO掩码的具体偏差。SAM是一种零样本方法,无法利用这些(通常不希望出现的)偏差。LVIS数据集具有更高质量的标签,但仍然存在特定的特性(例如,掩码不包含洞,它们是构造的简单多边形)和模态掩码和非模态掩码的偏差。同样,SAM没有接受过学习这些偏差的训练,而ViTDet会学习这些偏差。
7.5 文本到掩码的 零样本迁移
- 【方法】
最后,我们考虑一个更高层次的任务:从自由形式的文本中分割对象。这个实验证明了SAM处理文本提示的能力。虽然我们在之前的所有实验中都使用了完全相同的SAM,但对于这一次,SAM的训练过程被修改为具有文本意识,但不需要新的文本注释。具体地,对于每个面积大于 10 0 2 100^2 1002的手动收集的掩码,我们提取CLIP的image embedding。然后,在训练过程中,我们用提取的CLIP的image embedding作为SAM的第一次交互来提示SAM。这里的关键操作是,因为CLIP的image embedding被训练为与text embedding对齐,所以我们可以使用image embedding进行训练,但使用text embedding进行推理。也就是说,在推理时,我们通过CLIP的文本编码器运行文本,然后将生成的text embedding作为SAM的提示(详见 §D.5)。- 【结果】
我们在图12中显示了定性结果。SAM可以根据简单的文本提示(如“车轮”)以及短语(如“海狸齿格栅”)对目标进行分割。当SAM仅从文本提示中无法选择正确的目标时,通常可以通过额外的提示点会修复预测结果,类似于[31]。
7.6 Ablations
我们使用单中心点提示协议,对23个数据集上进行了多项消融实验。回想一下,单个点可能是模糊的,而这种模糊性可能不会在标签中表示,因为每个点只包含一个掩码。由于SAM的零样本迁移设置,SAM的得分最高的掩码与数据标注的掩码之间可能存在系统偏差。因此,我们还报告了关于标签的最佳掩码(“oracle”)。
图13:我们的数据引擎阶段、图像编码器缩减和训练数据缩减的消融研究。
- 图13(左)绘制了根据数据引擎阶段的累积数据进行训练时SAM的性能。我们观察到,每个阶段都会提升mIoU。在所有三个阶段的训练中,自动掩码的数量远远超过手动和半自动掩码。为了解决这个问题,我们发现在训练过程中对手动和半自动掩码进行10倍的过采样可以获得最佳效果。 这种设置使训练变得复杂。因此,我们测试了第四种设置,它只使用自动生成的掩码。这样的SAM的性能仅略低于使用所有数据(~0.5 mIoU)。因此,默认情况下,我们只使用自动生成的掩码来简化训练设置。
- 在图13(中间)中,我们观察了数据量的影响。完整的SA-1B包含11M图像,我们将其均匀地分为1M和0.1M进行消融。在0.1万张图像中,我们观察到在所有设置下mIoU都有很大的下降。然而, 对于1M张图像,约占完整数据集的10%,我们观察到的结果与使用完整数据集相当。 这个数据体系仍然包括大约1亿个掩码,对于许多用例来说可能是一个实用的设置。
- 图13(右)展示了使用ViT-B、ViT-L和ViT-H图像编码器的结果。ViT-H相比ViT-B有了显著的改进,但与ViT-L相比仅有微小的提升。目前看来,进一步扩大图像编码器的规模似乎并不具备明显的好处。
8 Discussion
- 【基础模型】
自机器学习的早期以来,预先训练的模型已经适应了下游任务[99]。近年来,随着对规模的日益重视,这种范式变得越来越重要,这类模型最近被(重新)称为“基础模型”:即“在大规模的广泛数据上训练并适应广泛下游任务的模型”[8]。我们的工作与这一定义有很好的相关性,尽管我们注意到图像分割的基础模型本质上是有限的,因为它代表了计算机视觉的一个重要但部分的子集。
我们还将我们的方法的一个方面与[8]进行了对比,后者强调了自我监督学习在基础模型中的作用。虽然我们的模型是用自监督技术(MAE[47])初始化的,但其绝大多数能力来自大规模的监督训练。在数据引擎可以扩大可用标注的情况下,监督训练提供了有效的解决方案- 【组合性】
经过预训练的模型可以提供新的能力,甚至超出训练时的想象。一个显著的例子是CLIP如何被用作更大系统(如DALL·E [83])的组成部分。我们的目标是通过SAM使这种组合变得简单。我们的目标通过要求SAM对各种分割提示 都预测出有效的掩码来实现这一点。其效果是在SAM和其他组件之间创建一个可靠的接口。例如,MCC[106]可以很容易地使用SAM来分割感兴趣的目标,并实现对看不见的目标的强泛化,以便从单个RGB-D图像进行3D重建。在另一个例子中,SAM可以通过可穿戴设备检测到的注视点来提示,从而启用新的应用程序。由于SAM能够推广到新领域(以自我为中心的图像等),因此此类系统无需额外训练即可工作。- 【局限性】
虽然SAM总体表现良好,但并不完美。它可能会错过精细的结构,有时会错觉出一些小的不相连的组件,并且不会像“放大”等计算密集型方法那样 得到清晰地边界。通常,当提供许多点时,我们预计专用的交互式分割方法会优于SAM,例如[67]。与这些方法不同,SAM是为通用性和使用广度而设计的,而不是高IoU交互式分割。此外,SAM可以实时处理提示,但当使用重型图像编码器时,SAM的总体性能不是实时的。我们对文本到掩码任务的尝试是探索性的,并不完全稳健,尽管我们相信可以通过更多的努力来改进。虽然SAM可以执行许多任务,但尚不清楚如何设计 实现语义和全景分割的简单提示。最后,还有一些特定领域的工具,如[7],我们预计它们在各自的领域中会优于SAM。- 【结论】
Segment Anything项目试图将图像分割提升到基础模型时代。我们的主要贡献是一项新任务(可提示分割)、模型(SAM)和数据集(SA-1B),使这一飞跃成为可能。SAM是否达到了基础模型的地位,还有待于它在社区中的使用方式,但无论我们对这项工作的前景如何,超过1B个掩码的发布和我们可推广的细分模型都将有助于为未来铺平道路。
A. Segment Anything Model and Task Details
【图像编码器】
- 一般来说,图像编码器可以是任何输出C×H×W图像嵌入的网络。基于不同规模的和强大的预训练,我们使用MAE 预训练视觉transformer(ViT),以最小的适应来处理高分辨率输入,特别是ViT-H/16,有14×14 的windowed attention和4个equally-spaced global attention blocks。图像编码器的输出是输入图像的16倍下采样的image embedding。由于我们的运行时目标是实时处理每个提示,因此我们可以提供大量的图像编码器片段,因为它们每幅图像只计算一次,而不是每个提示只计算一次。
根据标准的实践(例如,[40]),我们使用了1024×1024的输入分辨率,这是通过重新缩放图像和填充较短的边而获得的。因此,图像嵌入值为64×64。为了减少通道维度,在[62]之后,我们在256通道的3×3卷积之后,使用256通道的1×1卷积。每个卷积之后都是一个层的归一化[4]。
【提示编码器】
- 稀疏提示被映射到256维的向量嵌入如下。
- 一个点被表示为:该点的位置编码(positional encoding)+ 两个网络学习到的嵌入(learned embedding)之一(该点是在前景中还是在背景中)。
- box 由嵌入对表示: (1)其左上角的位置编码与表示“左上角”的learned embedding的和,(2)其右下角的位置编码与表示“右下角”的learned embedding的和。
- 为了表示自由形式的文本,我们使用了来自CLIP 的文本编码器(任何文本编码器通常都是可能的)。
- 密集的提示(即掩码)与图像具有空间对应关系。
相比与输入图片 输入的掩码为4X下采样,然后使用两个2×2,stride-2卷积进行下采样,输出通道分别为4和16。最后的1×1卷积将通道维度映射到256。每一层都会使用GELU激活[50]和层归一化。然后,将掩码与图像嵌入进行元素级相加。如果没有掩码提示,则在每个图像嵌入位置添加一个表示“无掩码”的学习嵌入。
【轻量级解码器】
- 该模块有效地将图像嵌入和一组提示嵌入映射到一个输出掩码。为了结合这些输入,我们从 Transformer segmentation models[14,20]中获得灵感,并修改了一个标准的 Transformer decoder。在应用我们的解码器之前,我们首先在提示嵌入集合中 嵌入一个学习到的输出token embedding,该嵌入将用于解码器的输出,类似于[33]中的[class]token。为简单起见,我们将这些嵌入(不包括图像嵌入)统称为“tokens”。
我们的解码器设计如图14所示。每个解码器层执行4个步骤:
- (1) 在 tokens 上进行自注意力(self-attention)
(2)从 tokens (作为查询)到 image embedding 上进行交叉注意力(cross-attention)
(3)点级MLP更新每个标记,
(4)从 image embedding(作为查询)到tokens上进行交叉注意到标记。- 最后一步是使用prompt information更新 image embedding。
在交叉注意过程中,将图像嵌入视为一组 6 4 2 64^2 642的 256维向量。每个自/交叉注意和MLP都有一个残差连接、层归一化和dropout=0.1。
下一个解码器层从上一层中获取更新的tokens和更新的图像嵌入。我们使用了一个两层解码器。
为了确保解码器能够访问关键的几何信息,当位置编码参与注意力层时,它们将被添加到图像嵌入中。此外,整个原始提示tokens(包括它们的位置编码)都会被重新添加到更新后的tokens中。这强烈地依赖于提示tokens的几何位置和类型。
在运行解码器后,我们用两个转置的卷积层对更新后的图像嵌入上采样4×(现在它相对于输入图像缩小了4×)。然后,tokens再次关注图像嵌入,我们将更新后的输出tokens嵌入传递给一个小的3层MLP,该MLP输出一个与放大的图像嵌入的通道维数相匹配的向量。最后,我们预测了一个具有空间点级乘积的掩码,在方法的图像嵌入和MLP的输出之间。
该transformer使用的嵌入尺寸为256。transformer MLP块有一个很大的内部尺寸为2048,但MLP只应用于有相对较少(基本小于20)的提示 tokens。然而,在交叉注意层中,我们有一个64×64的图像嵌入,为了提高计算效率,我们将查询、键和值的通道维数降低2×到128。所有的注意力层都使用8个头。
用于放大的输出图像嵌入的转置卷积为2×2,步幅为2,输出通道尺寸分别为64和32,并具有GELU激活。每层后跟着归一化。
【使模型模糊感知】
- 如前所述,单个输入提示符可能是模糊的,因为它对应于多个有效的掩码,并且模型学习到这些掩码的平均。我们通过一个简单的修改来消除这个问题:我们不是预测单个掩模,而是使用少量的输出tokens并同时预测多个掩模。默认情况下,我们预测三个掩码,因为我们观察到三个层(整个、部分和子部分)通常足以描述嵌套掩码。在训练过程中,我们计算标签和每个预测掩码之间的损失,但只对最小的损失反向传播。这是一种用于具有多个输出[15,45,64]的模型的常见技术。为了在应用程序中使用,我们希望对预测的掩码进行排序,因此我们添加一个小头(在一个额外的输出tokens上操作),它估计每个预测掩码和它所覆盖的对象之间的IoU。
- 有多个提示的模糊性比较罕见,而且三个输出掩码通常会变得相似。为了减少训练时退化损失的计算,并确保单个明确的掩码接收到一个规则的梯度信号,当给出多个提示时,我们只预测单个掩模。为了预测额外的掩码,是通过添加第四个输出tokens来实现的。单个提示不会返回第四个提示码,它是多个提示返回的唯一掩码。
【损失】
- 我们使用focal loss和dice loss的线性组合来监督掩码预测,其中focal loss和dice loss的比例为20:1,遵循[20,14]。与[20,14]不同,我们观察到在每个解码器层后的辅助深度监督是没有帮助的。[ IoU预测头输出]与[ 预测掩码和标签掩码的IOU ]的均方误差,作为损失。它被添加到掩码损失的一个恒定的比例因子为1.0。
【训练算法】
根据最近的方法[92,37],我们在训练期间模拟了一个交互式分割设置。
- 首先,以等概率随机选择前景点或边界框。点从标签掩码中均匀采样。将框作为真实掩码的边界框,在每个坐标中添加随机噪声,标准差等于框边长的10%,最大为20像素。这种噪声轮廓是实例分割等应用程序之间的合理设置,实例分割会在目标对象周围产生一个紧密的box,而在交互式分割中,用户可能会画一个松散的box。
- 在从第一个提示符进行预测后,从前一个掩码预测和标签掩码之间的误差区域中均匀地选择后续的点。如果误差区域是假阴性或假阳性,则每个新点分别是前景或背景。我们还提供了来自前一个迭代的掩码预测,作为我们的模型的附加提示。为了给下一次迭代提供最大的信息,我们提供了无阈值掩码日志,而不是二值化掩码。当返回多个掩码时,传递给下一个迭代并用于采样下一个点的掩码是预测有效值最高的掩码。
- 我们发现在8个迭代采样点(我们已经进行了测试到16个)后,收益递减。此外,为了鼓励模型从所提供的掩码中获益,我们还使用了另外两个迭代,其中没有额外的点被采样。其中一个迭代被随机插入到8个迭代采样点中,另一个总是在最后。这给出了11次迭代:一个采样的初始输入提示,8个迭代采样点,两个迭代没有新的外部信息,因此它可以学习改进自己的掩码预测。我们注意到,使用相对较多的迭代是可能的,因为我们的轻量级掩码解码器需要的计算量不到图像编码器的1%,因此,每次迭代只增加了很小的开销。这与以前的交互式方法不同,即每个优化器更新[70,9,37,92]只执行一个或几个交互式步骤。
【训练时设置】
- 优化器:使用AdamW(β1 = 0.9,β2 = 0.999)
- 预热学习率:线性学习速率进行250次迭代
- 学习速率的衰减:预热后的初始学习率(lr)为8e−4。会训练90k次迭代(∼2SA-1B轮次),并在60k次迭代和86666次迭代时将lr减少了10倍。
- batch size:256张图像。
- 权重衰减:为了规范SAM,我们将权重衰减(wd)设置为0.1,并以0.4的速率应用drop path [53]。
- 分层学习速率衰减[5](ld)为0.8。
- 不应用数据增强。
- 从MAE预训练的ViT-H初始化SAM。由于大图像编码器和1024×1024输入大小,我们将训练分布在256个gpu上。为了限制GPU内存的使用,我们训练每个GPU使用多达64个随机采样的掩码。
- 此外,我们发现,轻微过滤SA-1B掩码,丢弃任何覆盖90%以上图像的掩码,可以定性地改善结果。
对于消融实验和其他训练上的变化(例如,text到掩码D.5),我们和上面设置不一致的如下。当只使用来自第一和第二个数据引擎阶段的数据进行训练时,我们使用 input with large-scale jitter [40]增加输入,其尺度范围为[0.1,2.0]。直观地说,当训练数据更有限时,数据增强可能会有所帮助。为了训练ViT-B和ViT-L,我们使用了180k次迭代,批处理大小为128次,分布在128个gpu上。我们分别为ViT-B/L设置了lr=8e−4/4e−4、ld = 0.6/0.8、wd = 0.1和dp = 0.6/0.4。
B. Automatic Mask Generation Details
在这里,我们将讨论 用于生成已发布的SA-1B的数据引擎的全自动阶段的细节。
【裁剪】
- 掩码生成于完整图像上32×32常规采样点,和20个额外的缩放图像从裁剪中生成的,这些裁剪来自2x2和4x4部分重叠的窗口,分别使用16x16和8x8常规点网格。原始的高分辨率图像用作裁剪(这是我们唯一一次使用它们)。我们去掉了接触裁剪图内部的边界掩码。
我们在两个阶段应用了 standard greedy box-based NMS:第一阶段在每个裁剪图内,第二阶段在裁剪图之间。当在裁剪图内应用NMS时,我们使用模型预测的IoU来对掩码进行排序。当在裁剪图之间使用NMS时,我们根据掩码的来源裁剪,从最大缩放的(即4×4裁剪)到原始图像的对掩码进行排序。在这两种情况下,我们使用的NMS阈值均为0.7。
【过滤】
- 我们使用了三个过滤器来提高掩模的质量。首先,为了只保持可信的掩码,我们用阈值(88.0)过滤模型预测的IoU分数。其次,为了只保持稳定的掩码,我们通过在不同的值处 对其进行阈值处理,比较由相同的底层软掩码产生的两个二进制掩码。只有当其-1和+1阈值掩码对之间的IoU等于或大于95.0时,我们才将保留预测(即阈值处理logits为0得到的二进制掩码)。第三,我们注意到偶尔会有一个自动覆盖整个图像的掩码。这些掩码通常是无趣的,我们通过去除覆盖95%或更多图像的掩码来过滤它们。所有过滤阈值都被选择为既能获得大量掩码,又能获得高质量的掩码,这是通过专业标注人员使用第5节中描述的方法进行判断的。
【后处理】
- 我们观察到两种通过后处理很容易减轻的错误类型。首先,估计有4%的掩码含有小的假组件。为了解决这些问题,我们删除了面积小于100像素的连接组件(包括删除整个掩码,如果最大组件低于此阈值)。其次,估计还有4%的掩码上有小的假孔。为了解决这些问题,我们用小于100像素的面积填充了一些洞。孔洞被确定为反转掩码的组成部分。
【自动掩码生成模型】
- 我们训练了一个特殊版本的SAM,用于全自动掩码生成,它牺牲了一些推理速度,以改善掩码生成的性能。我们注意到我们的默认SAM和这里用于数据生成的区别:它仅在手动和半自动数据上进行了训练,它的训练时间更长(177656次迭代而不是90k),使用大规模抖动数据增强[40],模拟交互式训练仅使用点和掩码提示(没有框),并且在训练期间仅对每个掩码采样4个点(将我们的默认值从9减少到4加快了训练迭代,并且对1点性能没有影响,尽管如果使用更多点进行评估,它会损害mIoU),最后掩码解码器使用3层而不是2层。