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 通用编码器-解码器预训练

  1. 给定一个输入掩码图像imagex∈RH×W ×3,其中H, W为图像的高度和宽度,将其划分为图像块并将其转换为图像标记,并应用随机掩码 M 来屏蔽一部分输入标记。
  2. 图像编码器Enc用于提取视觉特征,视觉编码器来生成多尺度特征图,视觉编码器遵循MAE,仅用于处理可见标记。Bi-FPN用于更好的使不同特征图尺度之间的交互
  3. 基于查询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”预训练阶段不仅利用了无标签数据进行自监督学习,还结合了带标签的数据进行有监督学习。
  • \bigstar”表示模型可以执行此类任务,但没有报告结果。
  • “-”表示模型无法执行此类任务。
  • † 表示我们使用官方代码的实现。

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优点

  1. 通用性强:GLID方法通过设计一种通用的编码器-解码器结构,使得预训练模型能够处理多种不同的下游计算机视觉任务,而不需要为每一个任务都设计特定的子架构。这种通用性使得GLID在多种任务上都能取得良好的性能。

  2. 适应性好:GLID预训练方案将预训练任务和下游任务都建模为“查询-回答”问题,这种设计使得预训练模型能够更好地适应不同的任务需求。在微调阶段,GLID仅替换最顶层的线性变换层为任务特定的线性头,从而最小化了预训练与微调阶段架构的不一致性,使得预训练模型能够更好地适应下游任务。

  3. 性能优越:GLID在多种视觉任务上展现出竞争性的性能,包括目标检测、图像分割、姿态估计和深度估计等。与专业的模型如Mask2Former、DETR、ViTPose和BinsFormer相比,GLID要么性能更好,要么性能相当。

5 限制

  1. 可能受限于预训练任务:虽然GLID设计了一个通用的编码器-解码器结构,但预训练任务的设计对于模型性能仍然至关重要。如果预训练任务不能很好地涵盖下游任务的需求,那么模型在下游任务上的性能可能会受到影响。

  2. 计算资源需求大:由于GLID方法涉及到大规模的预训练,因此可能需要大量的计算资源和时间。这对于资源有限的研究机构或个人来说可能是一个挑战。

  3. 任务特定头的设计:虽然GLID在微调阶段只需要替换顶层的线性变换层,但对于某些复杂的任务,可能还需要更精细的任务特定头设计,以进一步提高性能。这增加了在特定任务上应用GLID的复杂性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/565055.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux使用Docker部署DashDot访问本地服务器面板

文章目录 1. 本地环境检查1.1 安装docker1.2 下载Dashdot镜像 2. 部署DashDot应用 本篇文章我们将使用Docker在本地部署DashDot服务器仪表盘,并且结合cpolar内网穿透工具可以实现公网实时监测服务器系统、处理器、内存、存储、网络、显卡等,并且拥有API接…

前端开发攻略---拖动归类,将元素拖拽到相应位置

1、演示 2、代码 <!DOCTYPE html><html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content"widthdevice-…

我在本地部署通义千问Qwen1.5大模型,并实现简单的对话和RAG

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学&#xff0c;针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总…

什么是防抖和节流?有什么区别? 如何实现?

防抖&#xff08;Debounce&#xff09;和节流&#xff08;Throttle&#xff09;是两种常用的技术手段&#xff0c;主要用于控制某个函数在一定时间内触发的次数&#xff0c;以减少触发频率&#xff0c;提高性能并避免资源浪费。 防抖&#xff08;Debounce&#xff09;的工作原…

掉落回弹问题(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;float b 100;float sum 0;int i 0;//运算&#xff1b;for (i 1; i < 10; i){//运算&…

【oceanbase】安装ocp,ocp部署oceanbase

https://www.oceanbase.com/docs/common-ocp-1000000000584989 资源 iphostnamecpumem组件192.168.0.71obnode-000-071816oceanbase-ce192.168.0.72obnode-000-072816oceanbase-ce192.168.0.73obnode-000-073816oceanbase-ce192.168.0.74obproxy-000-07424obproxy-ce192.168.0…

【北京迅为】《iTOP-3588开发板系统编程手册》-第16章 串口应用编程

RK3588是一款低功耗、高性能的处理器&#xff0c;适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用&#xff0c;RK3588支持8K视频编解码&#xff0c;内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…

291个地级市资源错配指数、劳动和资本相对扭曲指数(2006-2021年)

01、数据介绍 资源错配指数&#xff08;Misallocation Index&#xff09;是一个用于衡量资源配置效率的指标&#xff0c;它衡量的是生产要素的配置是否合理&#xff0c;是否达到了最优的状态。资源错配指数越高&#xff0c;资源的利用效率越低。资源错配指数主要用于衡量各种生…

学习STM32第十七天

备份域详解 一、简介 在参考手册的电源控制章节&#xff0c;提到了备份域&#xff0c;BKPR是在RTC外设中用到&#xff0c;包含20个备份数据寄存器&#xff08;80字节&#xff09;&#xff0c;备份域包括4KB的备份SRAM&#xff0c;以32位、16位或8位模式寻址&#xff0c;在VBAT…

SpringCloud系列(9)--将服务消费者Consumer注册进Eureka Server

前言&#xff1a;上一章节我们介绍了如何将服务提供者注册进Eureka服务里&#xff0c;本章节则介绍如何将服务消费者Consumer注册进Eureka服务里 Eureka架构原理图 1、修改consumer-order80子模块的pom.xml文件&#xff0c;引入Eureka Clinet的依赖&#xff0c;然后reolad一下&…

SVD奇异值分解原理及应用

-------------------------------------------------------------------------------------------------------------------------------- 首先说明&#xff1a;本文的内容来自百家号“人工智能遇见磐创”大佬的整理&#xff0c;感谢原作者&#xff08;本文在原作者的基础上按…

找不到msvcp140dll,无法继续执行代码的详细解决方法

在我们日常使用计算机进行各类工作任务的过程中&#xff0c;时常会遭遇一些突发的技术问题。比如&#xff0c;有时在运行某个重要程序或应用软件时&#xff0c;系统会突然弹出一个令人困扰的错误提示&#xff1a;“电脑提示找不到msvcp140.dll文件&#xff0c;因此无法继续执行…

Mysql基础(二)数据类型和约束

一 数据类型 讲解主要的数据类型,不面面俱到,后续遇到具体问题再查询补充扩展&#xff1a; 知识点的深度和广度以工作为导向 ① int float M : 表示显示宽度&#xff0c;M的取值范围是(0, 255)例如: int(5),当数据宽度小于5位的时候在数字前面需要用字符填满宽度说明&…

双击复制elementui表格某个单元格的数据

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、代码前言 在使用elementui的表格将数据展示出来时,我们想复制该表格区域对应的内容,但因为想复制的列不想太宽而数据太长导致数据省略,无法使用鼠标选择来全部复制到,所以想能不能实现一个双击该内容达到复制效果;…

VSCode 配置 C/C++ 环境

1 安装 VSCode 直接去官网(https://code.visualstudio.com/)下载并安装即可。 2 配置C/C编译环境 方案一 如果是在Windows&#xff0c;需要安装 MingW&#xff0c;可以去官网(https://sourceforge.net/projects/mingw-w64/)下载安装包。 注意安装路径不要出现中文。 打开 w…

声明式事务

文章目录 1.事务分类1.传统方式解决事务2.声明式事务 2.声明式事务案例1.需求分析2.解决方案分析3.数据表创建4.编写GoodsDao.java1.编写配置文件JdbcTemplate_ioc.xml2.单元测试 5.编写GoodsService.java6.配置事务管理器JdbcTemplate_ioc.xml7.进行测试 3.debug事务管理器Dat…

HubSpot流量转化:从访客到客户的转化策略

在当今数字化时代&#xff0c;企业营销获客的关键在于如何将网站访客转化为实际客户。作为HubSpot的合作伙伴&#xff0c;我们深知HubSpot软件在流量转化方面的强大功能。今天运营坛将带领大家深入探讨HubSpot流量转化的核心原理&#xff0c;并介绍如何利用个性化营销策略、构建…

实验2 NFS部署和配置

一、实训目的 1.了解NFS基本概念 2.实现NFS的配置和部署 二、实训准备 1.准备一台能够安装OpenStack的实验用计算机&#xff0c;建议使用VMware虚拟机。 2.该计算机应安装CentOS 7&#xff0c;建议采用CentOS 7.8版本。 3.准备两台虚拟机机&#xff08;客户机和服务器机&…

在React Router 6中使用useRouteLoaderData钩子获取自定义路由信息

在 React Router 6 中怎么像vueRouter一样&#xff0c;可以在配置路由的时候&#xff0c;定义路由的元信息(附加信息)&#xff1f;答案是可以的。稍有些复杂。核心是通过为每个路由定义了一个 loader 函数,用于返回自定义的路由信息&#xff0c;然后通过useRouteLoaderData 钩子…

机器人实验室LAAS-CNRS介绍

一、LAAS-CNRS介绍 1、缩写介绍 同样的&#xff0c;给出英文缩写的全称&#xff0c;以便理解。这里的LAAS&#xff08;Laboratory for Analysis and Architecture of Systems&#xff09;指法国的系统分析与架构实验室&#xff0c;CNRS&#xff08;Centre National de la Rec…