文章汇总
问题
工程文本提示可以对新的视觉概念和数据分布进行零概率泛化。这种编码器还可以与其他模块有效组合,以实现下游任务,希望以此泛化到分隔任务
动机
使用带提示的工程解决新数据分布上的一系列下游分割问题。
解决办法
提出了提示分割任务,其目标是给定任何分割提示返回有效的分割掩码(见图1a)。
简单的设计满足所有三个约束:一个强大的图像编码器计算图像嵌入,一个提示编码器嵌入提示,然后将两个信息源组合在一个轻量级的掩码解码器中,该解码器预测分割掩码。
数据引擎与数据集
总之最终构造一个可被提示的分割任务。
注:本文的mask相当于标注,一个mask相当于一个标签,如标注了一个细胞,标注了一只猪,这就是分别的不同的标签,即mask
创新点
1.简单的结构
提出了一个简单的结构,而不是像传统的论文一样不断去堆复杂的结构。
作者认为,一般来说,encoder需要非常大,decoder可以非常少,而且即便decoder是一个非常简单的结果,只要encoder性能足够好,最终结果也非常好。更重要的是,encoder可以离线地去做,实时地去做的可以只有decoder(对应操作,在文章提供的平台Segment Anything | Meta AI中,每个demo需要2-4秒左右的加载,即2-4秒的encoder之后,decoder可以做得非常迅速,即“指哪标注哪”,而且一次encoder之后,即使进行多次decoder也不需要重新encoder)。
2.SAM有三个组件
SAM有三个组件,如图4所示:一个图像编码器,一个合适的提示编码器和一个快速mask解码器。
图像编码器
使用的是vit,所以涉及的参数量会非常大,这也是SAM中encoder为什么这么大的重要原因。
合适的提示编码器
点是一个坐标,可以通过普通全连接层转换成向量;文本通过clip转换成向量;mask往往是一堆点,可以通过卷积、拉长操作得到向量
一个快速的mask解码器
一些非常简单的结构
改进的解码器块在两个方向(图片特征)上使用提示自注意和交叉注意(提示到图像嵌入,反之亦然)来更新所有嵌入。
假设这里图片编码是vit,文本编码是clip
最终输出层算概率跟传统的没有区别
附录A解读(核心模块!!!)
这是本文的轻量级mask解码
image embedding是将图片经过vit最终得到256个小切片,每个切片大小为64x64
output tokens+prompt tokens(N_tokens x256)这块应该是vit输出的output tokens都加上相同的文本提示词的tokens(由clip得到),需要注意的是最终输出的是output tokens,用来做预测
self attn. 相当于沟通好大伙们决定找什么
token to image attn. 相当于output tokens与image embedding进行cross attention,从而output tokens得到更新。
image to token attn. 相当于image embedding与output tokens进行cross attention,从而image embedding得到更新。
x2代表这块block要进行两次
2x conv. trans. 为反卷积进行上采样,对图片大小进行放大,放大成原图一样的大小,因为图像分割一般encoder为压缩图片大小来进行下采样
dot product per mask 为每个output tokens与还原成原图大小的image embedding的每个块做dot product,得出的值达到预定的阈值就认为这是output tokens想找的图像块(与output tokens匹配的图像块)
由于output tokens与prompt tokens是相互学习过的,所以最终output tokens去找合适的图像块时会带着prompt tokens的意愿去找合适的像素点,即“div 自己的任务”
总结
由于后面两个组件本身已经非常轻便(能够实时交互),所以如果对SAM优化,只可能在编码器encoder上。
对数据的处理
步骤:
1:对公开的数据集(这些数据都是有标签的)进行初始化
2:对外部无标签的数据进行训练,由于没有标签,会训练得不准,所以人工会纠正一部分,当然,即使是纠正一部分也会费人工,之后再把人工纠正的数据给模型学习
3:此时模型已经具备了一定的模型分割能力了,从此之后,拿外部的数据让模型自己跟自己训练
总结
证明了一件事情,与其说不断地添加复杂的网络结构,不如就用最简单vit的结构给它喂更大的数据让他性能足够强;而decoder其实仅需一些简单的网络结构,再结合prompt就能够很好地div自己的任务。
摘要
我们介绍了任何片段(SA)项目:一个新的任务,模型和数据集的图像分割。在数据收集循环中使用我们的高效模型,我们建立了迄今为止(到目前为止)最大的分割数据集,在1100万张许可和尊重隐私的图像上拥有超过10亿个掩模(本文的mask相当于标注,一个mask相当于一个标签,如标注了一个细胞,标注了一只猪,这就是分别的不同的标签,即mask)。该模型被设计和训练为提示,因此它可以将零拍摄转移到新的图像分布和任务。我们评估了它在许多任务中的能力,发现它的零样本性能能令人印象深刻-通常与之前的完全监督任务的结果相竞争甚至优于。我们在Segment Anything | Meta AI上发布了包含1B个掩模和11M张图像的分段任意模型(SAM)和相应的数据集(SA-1B),以促进对计算机视觉基础模型的研究。
1. 介绍
在网络规模的数据集上预训练的大型语言模型具有强大的零样本和少样本泛化能力,正在彻底改变NLP[10]。这些“基础模型”[8]可以推广到训练期间看到的任务和数据分布之外的任务和数据分布。此功能通常通过提示工程实现,其中使用手工编写的文本来提示语言模型为手头的任务生成有效的文本响应。当使用来自网络的大量文本语料库进行缩放和训练时,这些模型的零和少镜头性能与微调模型(在某些情况下甚至匹配)相比惊人地好[10,21]。经验趋势表明,这种行为随着模型规模、数据集大小和总训练计算量的增加而改善[56,10,21,51]。
基础模型也在计算机视觉中进行了探索,尽管程度较低。也许最突出的插图是对齐来自网络的配对文本和图像。
例如,CLIP[82]和ALIGN[55]使用对比学习来训练对齐两种模式的文本和图像编码器。经过训练后,工程文本提示可以对新的视觉概念和数据分布进行零概率泛化。这种编码器还可以与其他模块有效组合,以实现下游任务,例如图像生成(例如DALL·E[83])。虽然在视觉和语言编码器方面已经取得了很大的进展,但计算机视觉包括超出这个范围的广泛问题,并且对于其中的许多问题,没有丰富的训练数据。
在这项工作中,我们的目标是建立一个图像分割的基础模型。也就是说,我们寻求开发一个提示模型,并使用一个能够实现强大泛化的任务在广泛的数据集上对其进行预训练。有了这个模型,我们的目标是使用带提示的工程解决新数据分布上的一系列下游分割问题。
该计划的成功取决于三个组成部分:任务、模型和数据。为了开发它们,我们解决了以下关于图像分割的问题:
1.什么任务可以实现零样本泛化?
2. 相应的模型体系结构是什么?
3. 哪些数据可以为这项任务和模型提供支持?
这些问题纠缠在一起,需要综合解决。我们首先定义一个提示的分割任务,它足够通用,可以提供一个强大的预训练目标,并支持广泛的下游应用程序。此任务需要一个支持灵活提示的模型,并且可以在提示时实时输出分段掩码以允许交互使用。为了训练我们的模型,我们需要一个多样化的、大规模的数据源。
不幸的是,没有网络规模的数据来源的分割;为了解决这个问题,我们构建了一个“数据引擎”,也就是说,我们在使用我们的高效模型来协助数据收集和使用新收集的数据来改进模型之间进行迭代。接下来我们介绍每个相互关联的组件,然后是我们创建的数据集和证明我们方法有效性的实验。
图1:我们的目标是通过引入三个相互关联的组件来构建分割的基础模型:一个可提示的分割任务,一个分割模型(SAM),它为数据注释提供动力,并通过提示工程实现零拍摄传输到一系列任务,以及一个用于收集SA-1B的数据引擎,我们的数据集超过10亿个掩码。
任务(§2)
在NLP和最近的计算机视觉中,基础模型是一个很有前途的发展,它可以通过使用“提示”技术对新的数据集和任务执行零射击和少射击学习。受这一行工作的启发,我们提出了提示分割任务,其目标是给定任何分割提示返回有效的分割掩码(见图1a)。提示符只是指定图像中要分割的内容,例如,提示符可以包括识别对象的空间或文本信息。有效输出掩码的要求意味着,即使提示是模糊的,并且可能引用多个对象(例如,衬衫上的一个点可能表示衬衫或穿着它的人),输出也应该是这些对象中至少一个对象的合理掩码。我们使用提示分割任务作为预训练目标,并通过提示工程解决一般的下游分割任务。
模型(§3)
可提示的分割任务和实际使用的目标对模型体系结构施加了约束。特别是,模型必须支持灵活的提示,需要在平摊实时中计算掩码以允许交互使用,并且必须具有歧义意识。令人惊讶的是,我们发现一个简单的设计满足所有三个约束:一个强大的图像编码器计算图像嵌入,一个提示编码器嵌入提示,然后将两个信息源组合在一个轻量级的掩码解码器中,该解码器预测分割掩码。我们将此模型称为分段任意模型(Segment Anything model,简称SAM)(见图1b)。通过将SAM分为图像编码器和快速提示编码器/掩码解码器,可以使用不同的提示重复使用相同的图像嵌入(并平摊其成本)。给定图像嵌入,提示编码器和掩码解码器在web浏览器中从提示符预测掩码,时间为~ 50ms。我们将重点放在点、框和掩码提示上,并使用自由格式的文本提示来呈现初始结果。为了使SAM能够感知歧义,我们将其设计为预测单个提示的多个掩码,从而允许SAM自然地处理歧义,例如衬衫与人的例子。
数据引擎(§4)
为了实现对新数据分布的强泛化,我们发现有必要在一个大而多样的掩码集上训练SAM,而不仅仅是已经存在的任何分割数据集。虽然基础模型的典型方法是在线获取数据[82],但掩模并不自然丰富,因此我们需要一种替代策略。我们的解决方案是建立一个“数据引擎”,也就是说,我们与模型在循环数据集注释共同开发我们的模型(见图1c)。我们的数据引擎有三个阶段:辅助手动、半自动和全自动。在第一阶段,SAM帮助注释者注释掩码,类似于经典的交互式分段设置。在第二阶段,SAM可以通过提示可能的对象位置来自动为对象子集生成掩码,而注释器则专注于注释剩余的对象,从而帮助增加掩码的多样性。在最后阶段,我们用前景点的规则网格提示SAM,平均每张图像产生约100个高质量掩模。
数据集(§5)
我们的最终数据集SA-1B包括来自11M张授权和隐私保护图像的超过1B个掩码(见图2)。SA-1B是使用我们数据引擎的最后阶段完全自动收集的,其掩码比任何现有的分割数据集都多400倍[66,44,117,60],并且经过我们的广泛验证,掩码具有高质量和多样性。除了将SA-1B用于训练SAM具有鲁棒性和通用性之外,我们希望SA-1B成为旨在建立新基础模型的研究的宝贵资源。
数据收集公平的人工智能(§6)
我们研究并报告了使用SA-1B和SAM时潜在的公平性问题和偏见。SA-1B中的图像跨越了地理和经济上不同的国家,我们发现SAM在不同人群中的表现相似。总之,我们希望这将使我们的工作对现实世界的用例更加公平。我们在附录中提供了模型和数据集卡。
实验(§7)
们广泛评估SAM。首先,使用23个不同的新分割数据集,我们发现SAM从单个前景点产生高质量的掩模,通常仅略低于手动注释的地面真值。其次,我们在零射击传输协议下使用即时工程的各种下游任务上发现了一致的强定量和定性结果,包括边缘检测,目标提案生成,实例分割以及文本到掩码预测的初步探索。这些结果表明,SAM可以使用开箱即用的快速工程来解决涉及SAM训练数据之外的对象和图像分布的各种任务。然而,改进的余地仍然存在,正如我们在§8中讨论的那样。
分布
我们正在发布SA-1B数据集用于研究目的,并在一个宽松的开放许可(Apache 2.0)下在Segment Anything | Meta AI上提供SAM。我们还通过在线演示展示了SAM的功能。
图片2
图2:来自我们新引入的数据集SA-1B的带有叠加掩码的示例图像。SA-1B包含11M不同的、高分辨率的、许可的和隐私保护的图像和1.1B高质量的分割蒙版。这些掩码是由SAM完全自动标注的,正如我们通过人工评分和大量实验验证的那样,它们具有高质量和多样性。我们根据每个图像的掩模数量对图像进行分组,以实现可视化(平均每个图像有~ 100个掩模)。
2. 分隔任何任务
我们从NLP中获得灵感,其中下一个令牌预测任务用于基础模型预训练,并通过提示工程[10]解决各种下游任务。为了建立分割的基础模型(由于是基础模型,后人可以对其进行改进,所以本文的模型结构并不复杂),我们的目标是定义一个具有类似功能的任务。
任务
我们首先将提示的概念从NLP翻译的思想转换到分割任务当中,其中视觉中提示可以是一组前景/背景点,一个粗略的框或mask(me:一些散点的集合),自由格式的文本,或者一般情况下,任何指示图像中要分割的信息。因此,提示分段任务是在给定任何提示的情况下返回一个有效的分段掩码。“有效”掩码的要求仅仅意味着,即使提示是模糊的,并且可以引用多个对象(例如,回想一下衬衫与人的例子,参见图3),输出也应该是这些对象中至少一个的合理掩码。这个需求类似于期望语言模型对不明确的提示输出一致的响应。我们之所以选择这个任务,是因为它带来了一种自然的预训练算法和一种通过提示将零样本任务转移到下游分割任务的通用方法。
图3:每列显示SAM从一个不明确的点提示(绿色圆圈)生成的3个有效掩码。
me:同样一个有可能需要回应多个分割物体,比如说图中的三个
训练
提示分割任务提出了一种自然的预训练算法,该算法为每个训练样本模拟一系列提示(例如,点、框、掩码),并将模型的掩码预测与基本事实进行比较。我们从交互式分割中采用了这种方法[109,70],尽管与交互式分割不同,交互式分割的目的是在足够的用户输入后最终预测一个有效的掩码,但我们的目标是始终预测任何提示的有效掩码,即使提示是模糊的。这确保了预训练模型在涉及歧义的用例中是有效的,包括我们的数据引擎§4所要求的自动注释。我们注意到,在这个任务中表现良好是具有挑战性的,需要专门的建模和训练损失选择,我们在§3中讨论过。
零样本样本转移
直观地说,我们的预训练任务赋予了模型在推理时对任何提示作出适当响应的能力,因此下游任务可以通过设计适当的提示来解决。例如,如果有一个猫的边界框检测器,猫实例分割可以通过提供检测器的框输出作为提示给我们的模型来解决。一般来说,许多实际的分割任务都可以作为提示。除了自动数据集标记,我们在§7的实验中探索了五个不同的示例任务
相关的任务
分割是一个很广阔的领域,有交互式分割[57,109]、边缘检测[3]、超像素化[85]、目标建议生成[2]、前景分割[94]、语义分割[90]、实例分割[66]、全视分割[59]等。
我们的提示分割任务的目标是产生一个功能广泛的模型,可以通过快速工程适应许多(尽管不是全部)现有的和新的分割任务。这种能力是任务泛化的一种形式[26]。请注意,这与之前在多任务分割系统上的工作不同。在多任务系统中,单个模型执行一组固定的任务,例如联合语义分割、实例分割和全视分割[114,19,54],但训练和测试任务是相同的。我们工作中的一个重要区别是,训练用于提示分割的模型可以作为更大系统中的组件在推理时间执行新的不同任务,例如,执行实例分割,提示分割模型与现有的对象检测器相结合。
讨论
提示和组合是功能强大的工具,可以以可扩展的方式使用单个模型,从而潜在地完成模型设计时未知的任务。这种方法类似于其他基础模型的使用方式,例如CLIP[82]是DALL·E[83]图像生成系统的文本-图像对齐组件。我们预计,可组合的系统设计,由提示工程等技术提供动力,将比专门为固定任务集训练的系统实现更广泛的应用。通过组合的镜头来比较提示式和交互式分割也是很有趣的:虽然交互式分割模型是为人类用户设计的,但正如我们将演示的那样,为提示式分割训练的模型也可以组成一个更大的算法系统。
3. 模型细述
接下来,我们描述了分段任意模型(SAM),用于提示分段。SAM有三个组件,如图4所示:一个图像编码器,一个灵活的提示编码器和一个快速掩码解码器。我们建立在Transformer视觉模型[14,33,20,62]的基础上,对(平摊)实时性能进行了特定的权衡。我们在这里高层次地描述这些组件,细节见§a。
图4:分隔任何模型(SAM)概述。重量级图像编码器输出图像嵌入,然后可以通过各种输入提示有效地查询,以平摊实时速度生成对象掩码。对于对应于多个对象的模糊提示,SAM可以输出多个有效掩码和相关的置信度分数。
图像编码器
在可扩展性和强大的预训练方法的激励下,我们使用了MAE[47]预训练的视觉变压器(ViT)[33],以最小程度适应处理高分辨率输入[62]。图像编码器每个图像运行一次,可以在提示模型之前应用。
提示编码器
我们考虑两组提示:稀疏(点、框、文本)和密集(掩码)。我们通过位置编码[95]来表示点和框,并对每个提示类型和使用CLIP[82]的现成文本编码器的自由格式文本进行学习嵌入求和。密集提示(即掩码,多个点组成的标注)使用卷积嵌入,并在图像嵌入中按元素求和。
掩码译码器
掩码解码器有效地将图像嵌入、提示嵌入和输出令牌映射到掩码。该设计受到[14,20]的启发,采用了对Transformer解码器块[103]的修改,然后是动态掩码预测头。我们改进的解码器块在两个方向上使用提示自注意和交叉注意(提示到图像嵌入,反之亦然)来更新所有嵌入。在运行两个块之后,我们对图像嵌入进行上采样,MLP将输出标记映射到动态线性分类器,然后该分类器计算每个图像位置的掩码前景概率。
解决歧义
对于一个输出,如果给出一个模糊的提示,该模型将平均多个有效掩码。为了解决这个问题,我们修改了模型,以预测单个提示符的多个输出掩码(见图3)。我们发现3个掩码输出足以解决大多数常见情况(嵌套掩码通常最多有三个深度:整体、部分和子部分)。在训练中,我们只需在掩模上反向支撑最小损失[15,45,64]。为了对掩码进行排序,该模型预测每个掩码的置信度分数(即估计的借据)。
效率
整体模型设计很大程度上是由效率驱动的。给定预先计算的图像嵌入,提示编码器和掩码解码器在web浏览器中运行,在CPU上,大约50ms。这种运行时性能支持模型的无缝、实时交互式提示。
损失和训练
我们使用[14]中使用的焦损失[65]和骰子损失[73]的线性组合来监督掩模预测。我们使用几何提示的混合来训练可提示的分割任务(文本提示见§7.5)。接下来[92,37],我们通过在每个掩码中随机抽取11轮提示来模拟交互式设置,从而使SAM无缝地集成到我们的数据引擎中。
8. 讨论
基础模型
自机器学习的早期以来,预训练模型已经适应了下游任务[99]。近年来,随着对规模的日益重视,这种范式变得越来越重要,这种模型最近被(重新)称为“基础模型”:即“在大规模的广泛数据上训练,并适应广泛的下游任务”的模型[8]。我们的工作与这个定义很好地相关,尽管我们注意到图像分割的基础模型本质上是一个有限的范围,因为它代表了计算机视觉的一个重要但部分的子集。我们还将我们的方法的一个方面与[8]进行了对比,后者强调自监督学习在基础模型中的作用。虽然我们的模型是用自监督技术(MAE[47])初始化的,但它的绝大多数能力来自大规模的监督训练。在数据引擎可以扩展可用注释的情况下,就像我们这样,监督训练提供了一个有效的解决方案。
组合性
预先训练的模型可以提供新的能力,甚至超出了训练时的想象。一个突出的例子是CLIP[82]如何在DALL·E[83]等大型系统中作为组件使用。
我们的目标是使用SAM使这种组合更加简单。我们的目标是通过要求SAM为广泛的分割提示预测有效的掩码来实现这一目标。其效果是在SAM和其他组件之间创建一个可靠的接口。例如,MCC[106]可以很容易地使用SAM来分割感兴趣的物体,并从单个RGB-D图像中实现对未见物体的强泛化以进行3D重建。在另一个例子中,SAM可以通过可穿戴设备检测到的凝视点来提示,从而启用新的应用程序。由于SAM能够推广到新的领域,比如以自我为中心的图像,这样的系统不需要额外的训练就可以工作。
局限性
虽然SAM总体上表现良好,但它并不完美。它可能会错过精细的结构,有时会产生小的不连接的组件,并且不会像“放大”的计算密集型方法那样清晰地产生边界,例如[18]。一般来说,我们期望专用的交互式分割方法在提供多个点时优于SAM,例如[67]。与这些方法不同的是,SAM是为通用性和使用广度而设计的,而不是为高IoU交互式分割而设计的。此外,SAM可以实时处理提示,但是当使用重型图像编码器时,SAM的总体性能不是实时的。我们对文本到掩码任务的尝试是探索性的,并不是完全健壮的,尽管我们相信它可以通过更多的努力得到改进。虽然SAM可以执行许多任务,但尚不清楚如何设计实现语义和全景分割的简单提示。最后,还有一些特定于领域的工具,如[7],我们期望它们在各自的领域中优于SAM。
结论
“任意分割”项目是将图像分割提升到基础模型时代的一次尝试。我们的主要贡献是一个新的任务(提示分割),模型(SAM)和数据集(SA-1B),使这一飞跃成为可能。SAM是否达到基础模型的地位还有待观察,因为它在社区中的使用情况如何,但无论我们期望这项工作的前景如何,超过1B个掩模的发布以及我们带提示的分割模型将有助于铺平前进的道路。
附录
A.分割一切的模型和任务细节
图14:轻量级掩码解码器的细节。双层解码器通过交叉注意更新图像嵌入和提示令牌。然后对图像嵌入进行放大,利用更新后的输出标记动态预测掩码。(为了图形清晰,没有说明:在每个注意层,将位置编码添加到图像嵌入中,并将整个原始提示令牌(包括位置编码)重新添加到令牌查询和键中。)
图像编码器
通常,图像编码器可以是输出C×H×W图像嵌入的任何网络。受可扩展性和获得强预训练的激励,我们使用MAE[47]预训练的视觉转换器(ViT)[33]进行最小的调整来处理高分辨率输入,特别是具有14×14窗口注意力和四个等间隔全局注意力块的ViT- h /16,如下[62]。图像编码器的输出是输入图像的16倍缩小嵌入。由于我们的运行时目标是实时处理每个提示,因此我们可以负担得起大量的图像编码器flop,因为它们只计算每个图像一次,而不是每个提示一次。
按照标准做法(例如,[40]),我们使用通过重新缩放图像并填充较短的一侧获得的输入分辨率1024×1024。因此,图像嵌入是64×64。为了降低通道维度,在[62]之后,我们使用1×1卷积得到256个通道,然后使用3×3卷积得到256个通道。每个卷积之后是一个层归一化[4]。
提示编码器
稀疏提示被映射到256维向量嵌入,如下所示。一个点被表示为位置编码[95]和两个学习嵌入中的一个的总和,这两个嵌入表明该点是在前景还是背景中。
用一个嵌入对来表示一个盒子:(1)其左上角的位置编码用表示“左上角”的学习嵌入求和;(2)相同的结构,但使用表示“右下角”的学习嵌入。最后,为了表示自由格式的文本,我们使用CLIP[82]中的文本编码器(通常任何文本编码器都是可能的)。我们将在本节的其余部分集中讨论几何提示,并在§D.5中深入讨论文本提示。
密集提示(即掩码)与图像具有空间对应关系。我们以比输入图像低4倍的分辨率输入掩模,然后分别使用输出通道4和16的两次2×2, stride-2卷积将其缩小4倍。最后的1×1卷积将通道维度映射到256。每一层通过GELU激活[50]和层归一化进行分离。然后添加图像和mask嵌入元素。如果没有mask提示,则在每个图像嵌入位置添加一个表示“无蒙版”的学习嵌入。
轻量级掩码解码器
该模块有效地将图像嵌入和一组提示嵌入映射到输出掩码。为了结合这些输入,我们从Transformer分割模型[14,20]中获得灵感,并修改了标准Transformer解码器[103]。在应用我们的解码器之前,我们首先在提示嵌入集合中插入一个学习过的输出令牌嵌入,它将用于解码器的输出,类似于[33]中的[class]令牌。为简单起见,我们将这些嵌入(不包括图像嵌入)统称为“令牌”。
我们的解码器设计如图14所示。
每个解码器层执行4个步骤:
(1)对tokens的自关注,
(2)从令牌(作为查询)到图像嵌入的交叉关注,
(3)逐点MLP更新每个tokens,
(4)从图像嵌入(作为查询)到令牌的交叉关注。最后一步用提示信息更新图像嵌入。在交叉关注过程中,图像嵌入被视为642个256维向量的集合。
每个自/交叉注意和MLP在训练时具有残差连接[49]、层归一化和0.1的dropout[93]。下一个解码器层从上一层获取更新的令牌和更新的图像嵌入。我们使用双层解码器。为了确保解码器能够访问关键的几何信息,每当位置编码参与注意层时,都会将其添加到图像嵌入中。此外,每当它们参与到注意层时,整个原始提示令牌(包括它们的位置编码)都会被重新添加到更新的令牌中。这允许对提示令牌的几何位置和类型有很强的依赖性。
参考资料
论文下载(2023 CVPR)
https://arxiv.org/abs/2304.02643