本文主要是介绍GLID: Pre-training a Generalist Encoder-Decoder Vision Model,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1 研究目的
现在存在的问题是:
目前,尽管自监督预训练方法(如Masked Autoencoder)在迁移学习中取得了成功,但对于不同的下游任务,仍需要附加任务特定的子架构,这些特定于任务的子架构很复杂,需要在下游任务上从头开始训练,这使得大规模预训练的好处无法得到充分利用,制了预训练模型的通用性和效率。
为了解决这个问题,论文提出了:
GLID预训练方法,该方法通过统一预训练和微调阶段的架构,使得预训练模型能够更好地适应各种下游任务。
具体来说,GLID将预训练的前置任务和其他下游任务都建模为“查询-回答”问题,每个查询都与一个掩码补丁位置相关联,并将其设置为其位置嵌入。每个查询的“答案”或学习目标是相应掩码补丁的像素值。从而实现了任务无关的编码器-解码器的预训练。
在微调阶段,GLID保持预训练的编码器-解码器和查询不变,只需对最顶层的线性变换层进行替换,以输出每个任务的所需目标。这样,所提出的GLID尽可能地保持预先训练的权重,这最小化了预训练与微调之间的架构不一致性,并使预训练模型能够更好地适应下游任务。
特别是,编码器和解码器可以通过重建前置任务联合训练。
2 方法
自监督预训练方法MAE(Masked Autoencoder) 仅主干预训练与 GLID 预训练。
GLID 预训练允许预训练的编码器-解码器在各种视觉任务上进行微调,而无需特定于任务的解码器设计,并且优于仅 MAE 主干的预训练。
- 掩模图像建模(MIM)是一种流行的视觉表示学习的借口任务,旨在从损坏的输入中重建被屏蔽的标记。
- MAE方法提出了一种非对称编码器-解码器架构,并使用编码器处理部分可见的标记,并使用轻量级解码器在掩码位置预测相应的像素值。
2.1 通用编码器-解码器预训练
- 给定一个输入掩码图像imagex∈RH×W ×3,其中H, W为图像的高度和宽度,将其划分为图像块并将其转换为图像标记,并应用随机掩码 M 来屏蔽一部分输入标记。
- 图像编码器Enc用于提取视觉特征,视觉编码器来生成多尺度特征图,视觉编码器遵循MAE,仅用于处理可见标记。Bi-FPN用于更好的使不同特征图尺度之间的交互
- 基于查询Q的变压器解码器Dec解码最终特征(将多个尺度特征图输入到L个交叉注意力和自注意力块的解码器中产生最终预测)
针对第3步:
引入了许多掩码标记 [M] 作为解码器的输入查询,这些查询被添加到不同的位置嵌入中,以表示唯一的掩码位置。
此外,在第 0 个位置附加一个额外的 [CLS] 标记查询,它与特定的掩码位置无关,但用于捕获全局表示。所以在预训练期间,我们可以将 Q 表示为 Q = [CLS, M1, M2,..., MN] 其中 N 表示掩码标记的数量。
4.通过最顶层的线性变换层替换,以输出每个任务的所需目标,在掩码位置使用像素值 P t 作 为重建目标。
5.对于下游任务的微调,将预训练的最顶层的线性变换层替换为特定于任务的线性层,通过这 种方式最小化了预训练-微调差距,并使预训练的架构更好的适应下游任务
6.使用不同的 Q-P 对在不同的任务之间切换
- 在预训练期间,通过掩码图像建模(MIM)预训练与任务无关的编码器-解码器转换器架构。
- 对于下游任务的微调,将最顶层的线性变换层替换为特定于任务的线性头。通过这种方式,所提出的 GLID 最小化了预训练-微调差距,并使预训练的架构能够更好地适应下游任务。
- 将解码器架构与下游任务中使用的解码器对齐,将MIM前置任务重新表述为“查询到答案”问题,并使用基于查询的变压器解码器 解码 掩码标记 进行预训练。
上图中编码器中的Backbone和BiFPN是什么意思?
- Backbone:在计算机视觉任务中,Backbone通常指的是预训练的基础网络模型,用于提取输入图像的基本特征。这些特征随后可以被用于各种下游任务,如目标检测、图像分割等。Backbone网络结构多样,常见的包括ResNet、VGG等。
- BiFPN:BiFPN是Bidirectional Feature Pyramid Network的缩写,是一种用于目标检测等任务的特征融合方法。它旨在融合不同尺度的特征信息,以提高目标检测的精度。通过自顶向下和自底向上的方式,BiFPN能够有效地融合低层次和高层次特征,使得网络能够同时捕获到细节信息和全局信息。
上图为GLID预训练的流程
2.2 下游任务的微调
基于通用设计,可以将预训练的GLID模型应用于各种下游任务,包括目标检测、图像分割、姿态估计和深度估计。
所有这些任务也被建模为新的“查询-答案”问题,可以通过用特定于任务的线性层替换预训练中使用的最顶层线性层并将不同的学习目标分配给查询-答案对来无缝地将GLID微调到这些任务。
2.2.1 目标检测
对于目标检测任务,每个查询都用于表示对象实例,基于DETR。使用两个线性层将解码的隐藏特征分别转换为边界框和类概率
2.2.2 图像分割
用 Mask2Former 的方法,每个查询用于预测 C-维度 掩码嵌入及其类别。因此,我们可以通过掩码嵌入和主干的 1/4 尺度特征图之间的点积来获得二进制掩码预测,然后是 sigmoid 激活
2.2.3 深度估计
用 AdaBins 和 BinsFormer 的方法,深度回归任务被表述为“分类回归”问题,其中连续预测是通过 bin 中心的线性组合获得的。具体来说,查询的隐藏特征通过深度头转换为 bin 长度和 bin 嵌入, 然后我们可以通过 bin 嵌入和主干的 1/4 尺度特征图之间的点积来获得概率分布图 ,然后是 softmax 函数
2.2.4 姿态估计
利用基于热图的ViTPose姿态估计方法。特别是,每个查询都用于输出关键点的热图。采用位姿预测头将查询特征转换为c维特征向量,表示不同关键点的热图P,位姿热图就可以得到。
综上,在获得查询的预测后,遵循现有技术使用预测和基本事实之间的任务损失进行微调。特别是,计算对象检测和图像分割任务的二部匹配损失,对于这两个任务,预测的数量通常大于基本事实的数量。对于深度估计和姿态估计任务,分别使用尺度不变(SI)回归损失和平滑L1损失。在微调 GLID 时,继承了大多数预训练的架构权重,以充分利用大规模数据集上的自我监督预训练。
3 评估
3.1 定量评估
该表显示了作者的方法与其他特定和通用方法的比较。作者的通用方法可以通过最少的架构修改来解决所研究的任务,并在这些任务上取得了强大的性能。
将预训练的编码器-解码器微调到各种下游任务,包括
- COCO上的目标检测/姿态估计,
- ADE20K上的语义/实例/全景分割,
- NYUDepth-v2上的深度估计,
- “数据”表示预训练数据。
- “w/ Labels”预训练阶段不仅利用了无标签数据进行自监督学习,还结合了带标签的数据进行有监督学习。
- “”表示模型可以执行此类任务,但没有报告结果。
- “-”表示模型无法执行此类任务。
- † 表示我们使用官方代码的实现。
Swin-B、Swin-L代表的是Swin Transformer的不同版本或大小
- Swin-B通常代表较小的模型版本,适用于资源有限或需要快速推理的场景。
- Swin-L则代表较大的模型版本,通常具有更多的参数和更强的性能,适用于需要更高精度的任务或场景。
该表将作者的预训练方法 GLID 与之前的预训练方法进行比较,以证明其在各种视觉任务上的有效性,使用相同架构的预训练主干,在研究的下游任务上微调它们。
3.2 消融实验
表3的内容:
- 除了在各种任务上单独微调预训练模型外,作者还探索了多任务微调。
- ADE20K 上的多任务与单任务微调,因为它的注释可用于三种类型的分割任务。我们在具有不同任务组合的数据集上微调预训练的 Swin-B。
- 发现多任务模型不如单任务模型(训练语义、训练实例、全景任务)
表4的内容:
- 为了性能比较,加载部分预训练权重的消融。对于未加载的架构,用随机权重初始化它。
- 然后,在两个下游任务上微调模型,并将它们与完整的预训练模型进行了比较。第 1 行的结果是从头开始训练的。随着加载更多预训练的权重,性能会逐渐提高。
- 此外,加载 BiFPN 部分也可以优于仅加载主干权重的选择。所有结果证明了通才编码器-解码器预训练的重要性。
表5,为了研究解码器深度对我们的模型的影响,测试了改变模型中解码器层的数量。
具体来说,使用 3、6 和 9 个解码器层预训练模型,并在下游任务上微调它们。请注意,对预训练和微调使用相同的解码器层数。如表中所示,使用更多的解码器层并不能带来显着的性能提升,而是引入了额外的计算成本。
表6,为了研究预训练 epoch 的数量对模型的性能的影响,改变了预训练 epoch 的数量。
使用不同数量的 epoch 进行预训练,并在下游任务上微调预训练模型。
发现如果预训练 900 个 epoch,性能逐渐饱和并且没有太大改善。
表7,掩码策略和掩码比率。研究了掩码策略和掩码比率的影响
发现使用随机掩码在其他掩码策略中表现最好。此外,使用较大的掩码比率,即 0.75,会导致最佳结果。
表8,使用有限数据进行微调,研究了有限数据在微调期间的影响。
主要原因是对于有监督的预训练方法,需要在下游任务中从头开始训练特定于任务的解码器,相比之下,GLID统一预训练方法可以同时预训练并保持预训练的编码器-解码器即使在没有太多特定于任务的数据的情况下也实现了强大的性能。
3.3 定性评估
查询在不同任务上的交叉注意映射。每列显示特定任务上的三个尺度注意力图。特定于任务的查询用于可视化。
观察到查询可以专注于不同任务的不同语义部分。
- 对于预训练前置任务,查询学习关注局部区域进行重建。
- 对于目标检测和姿态估计任务,查询关注一些极值点,例如对象的边界或特定的关键点位置。
- 对于分割或深度估计任务,注意图对不同的语义区域有明显的分离。
比较了部分加载预先训练的权重在语义分割和深度估计任务上的收敛曲线,和表4是一样的
4优点
-
通用性强:GLID方法通过设计一种通用的编码器-解码器结构,使得预训练模型能够处理多种不同的下游计算机视觉任务,而不需要为每一个任务都设计特定的子架构。这种通用性使得GLID在多种任务上都能取得良好的性能。
-
适应性好:GLID预训练方案将预训练任务和下游任务都建模为“查询-回答”问题,这种设计使得预训练模型能够更好地适应不同的任务需求。在微调阶段,GLID仅替换最顶层的线性变换层为任务特定的线性头,从而最小化了预训练与微调阶段架构的不一致性,使得预训练模型能够更好地适应下游任务。
-
性能优越:GLID在多种视觉任务上展现出竞争性的性能,包括目标检测、图像分割、姿态估计和深度估计等。与专业的模型如Mask2Former、DETR、ViTPose和BinsFormer相比,GLID要么性能更好,要么性能相当。
5 限制
-
可能受限于预训练任务:虽然GLID设计了一个通用的编码器-解码器结构,但预训练任务的设计对于模型性能仍然至关重要。如果预训练任务不能很好地涵盖下游任务的需求,那么模型在下游任务上的性能可能会受到影响。
-
计算资源需求大:由于GLID方法涉及到大规模的预训练,因此可能需要大量的计算资源和时间。这对于资源有限的研究机构或个人来说可能是一个挑战。
-
任务特定头的设计:虽然GLID在微调阶段只需要替换顶层的线性变换层,但对于某些复杂的任务,可能还需要更精细的任务特定头设计,以进一步提高性能。这增加了在特定任务上应用GLID的复杂性。
这篇关于GLID: Pre-training a Generalist Encoder-Decoder Vision Model的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!