ICLR 2024 | Meta AI提出ViT寄存器结构,巧妙消除大型ViT中的伪影以提高性能

news2024/12/23 22:14:02

9a5215cc415d49a0bddc2dd80e2f72bd.png

论文题目:Vision Transformers Need Registers
论文链接:https://arxiv.org/abs/2309.16588

视觉Transformer(ViT)目前已替代CNN成为研究者们首选的视觉表示backbone,尤其是一些基于监督学习或自监督学习预训练的ViT,可以在诸多下游视觉任务上表现出卓越的性能。但目前针对ViT中间特征图的可解释研究相对较少,本文介绍一篇Meta与INRIA(法国国家信息与自动化研究院)合作完成的论文,目前该文已被国际表征学习顶级会议ICLR 2024录用。本文的研究人员们对ViT网络特征图中出现的伪影进行了研究,并且认为这些伪影对应于模型表征图像背景区域中的高范数token,模型在推理阶段时丢弃了这些token中包含的局部信息。为此,本文提出了一个简单有效的寄存器方法(Registers)来将这些伪影token进一步送入到模型中进行内部运算以提高性能。作者通过一系列实验证明,Registers可以解决监督或自监督ViT丢失局部信息的问题,提高其在密集型下游视觉任务上的综合性能,同时产生更加平滑的特征图和注意力图。

01. 引言

本文的动机从目前流行的DINO[1],DINOv2[2]等ViT模型的内部表征出发。DINO算法目前已被证明可以生成包含图像语义布局的特征图,尤其是其最后一个注意力层可以生成可解释的注意力图。基于这些特性,目前已有研究通过收集注意力图中的语义信息在缺少明确监督的情况下检测目标。DINOv2是DINO的后续升级版本,提供了处理密集型预测任务的能力,但DINOv2在生成注意力方面的效果却不尽如人意。下图左侧第三列展示了DINOv2模型生成的注意力图,可以看到,其中出现了大量的噪声伪影。

4b96bc4b9f5b48febb467e2cb56fc16c.png

此外,作者也在其他监督学习训练的ViT中发现了类似的伪影现象,如下图中的DeiT、CLIP等,本文对这些伪影的出现原因和固有性质进行了研究,通过测量发现,这些伪影相比其他token的范数大约高10倍,并且其数量仅占token总序列的一小部分(2%)

cc2ced152bbb44bdb37f8a964f6601b7.png

随后作者使用简单的线性模型对这些伪影token进行评估,作者观察到,这些token保留其在图像中的原始位置的信息较少,这表明模型在推理过程中丢弃了这些token中包含的局部信息。此外,在这些伪影token上学习图像分类器比在其他token上学习图像分类器的准确性要高得多,这表明它们可能也包含有关图像的全局信息。因而作者引入了一种寄存器方法(Registers)来将这些token附加到ViT的输入序列中,而独立于输入图像。经过Registers优化后的ViT模型,其产生的token序列中,伪影token已经完全消失,同时模型在下游密集预测任务中的性能得到提高,并且生成的特征图明显更加平滑。

02. 本文方法

2.1 DINOv2局部特征中伪影

为了分析DINOv2特征图中的伪影,作者首先从定量分析的角度对伪影token进行测量,如下图所示,作者观察到,伪影token与其他token之间的一个重要区别是它们的特征范数值(norms)差异很大。下图右侧分别展示了给定参考图像的DINO和DINOv2 模型的局部特征范数情况。可以看到,伪影token的范数值远高于其他token,且伪影token特征范数的分布是双峰的,因而作者在文章的后续部分将范数值超过150的token均认定为伪影token。

c70f1de7078649b284abfdad7958ca57.png

c70f1de7078649b284abfdad7958ca57.png

2.2 伪影通常出现在大型ViT模型的训练过程中

除了定量分析,作者还对DINOv2训练期间出现伪影token的条件进行了观察,分析结果如下图所示。这些token主要出现在ViT的40层左右(下图a),此外,当观察训练过程中token范数的分布时,作者发现这些伪影token仅在训练的后期出现(下图b)。当作者更进一步分析模型不同参数规模(Tiny、Small、Base、Large、Huge 和 Giant)对伪影token的影响时发现,只有较大的三个模型才会出现伪影(下图c)

ad7d4ef2ef794871b1e7a74a42879e09.png

2.3 伪影token包含的局部信息和全局信息

为了探索伪影token中所含信息的性质,作者设计了两个不同的实验任务:位置预测和像素重建。对于每一个任务,作者将token嵌入作为输入训练一个线性模型,并测量该模型的性能。

c8e97ef2b5b64ba2926ed1e3b30b900f.png

(1)位置预测

作者首先训练了一个线性模型来预测图像中每个token的位置,并测量其准确性。作者观察到伪影token的准确度比其他token低得多(如上表所示),这表明它们包含的有关其在图像中位置的局部信息较少

(2)像素重建

对于像素重建任务,作者训练了一个线性模型来根据token嵌入预测图像的像素值,并测量该模型的准确性。从上表的实验结果可以观察到,伪影token的准确率同样比其他token低得多。这表明伪影token比其他token包含更少的像素信息

除了伪影token的局部信息情况,作者还在标准图像表示基准上对其进行了评估,用于分析其中的全局信息。对于分类数据集中的每个图像,作者都直接提取DINOv2的token嵌入,并送入到一个逻辑回归分类器中预测图像类别,结果如下表所示。可以观察到伪影token比其他token具有更高的准确度。这表明伪影token相比其他token包含更多的全局信息

9dc65f7da78b4e709ab0c20541cee55d.png

2.4 寄存器Registers设计

经过以上分析,作者认为,出现在大型ViT训练过程中的伪影token实际上包含了输入图像的一部分信息。将其直接丢弃可能会导致模型在密集预测任务上的性能下降。因此作者提出了一个简洁的寄存器(Registers)模块,通过明确地将伪影token添加到序列中,这些token被设计为可学习性的参数,类似于[CLS]token。实际操作过程如下图所示,这些伪影token被标记为[REG]token,随后附加在图像patch和[CLS]token之后一起送入到transformer中进行后续的运算。

b16af4d46e7a4ebf9694d05520716409.png

03. 实验效果

本文的实验部分选取了三种不同的ViT架构:DeiT-III、OpenCLIP和DINOv2,由于Registers本质上只是一个简单的架构修改方案,因此其可以灵活的应用在多种ViT模型上。其中DeiT-III是监督学习训练的代表模型,使用ImageNet-1k 和 ImageNet-22k进行预训练。OpenCLIP是一种文本监督学习模型,其遵循原始的CLIP模型,仅在文本-图像对齐数据集上进行训练。DINOv2是本文研究的重点模型,该模型是一种基于自监督学习的视觉特征表示模型

下图展示了Registers应用在上述三种模型上的效果,对于每个模型,作者测量了起输出token的特征范数,可以看到,当加入Registers进行训练时,模型输出的伪影token数量将会大幅度减少。

f59b724b7f4944e0996b8a2af713e45f.png

此外,作者还对Registers进行了消融研究,即检查Registers的使用不会影响原始特征的表示质量,作者选择了ImageNet分类、ADE20k图像分割和NYUd单目深度估计三个常规视觉任务进行实验,结果如下表(a)所示。可以发现,当使用Registers进行训练时,模型并不会损失性能,甚至还可以提高性能。为了完整起见,作者还进一步提供了 OpenCLIP 在 ImageNet 上的零样本分类性能,如下表(b)所示,该性能保持不变。

9364608c46ee4aa6a61197650edc6d97.png

Registers结构的一个关键超参数是加入到原始序列中的token数量,作者对该数量对模型局部特征和下游性能的影响进行了研究,结果如下图所示。作者分别使用数量为0、1、2、4、8 和 16 的寄存器训练DINOv2模型。下图上半部分的结果表明,随着Registers数量的增加,模型注意力图中的伪影区域逐渐减小。图中下半部分展示了Registers数量改变对下游任务性能的影响情况,对于密集型预测任务(图像分割和单目深度估计)而言,Registers的数量并不是越多越好。而对于图像分类任务来说,使用更多的Registers,模型的性能会一直提升。

81775e28c86740bcbbbca3f45e13899d.png

04. 总结

在这项工作中,作者对 DINOv2 模型特征图中的伪影进行了详尽的研究,并发现这种现象存在于多个现有的流行ViT模型中。作者提供了一种简单的检测伪影的方法,即通过测量token的特征范数来实现。通过研究这些token的局部位置和全局特征信息,作者发现,这些token对于模型性能损失存在一定的影响,并提出了一种简单的寄存器方案(Registers)来将这些token附加到输入序列中。通过实验表明,这种方法完全消除了ViT特征图中的伪影,并且提高了模型在下游密集预测等任务上的性能。

参考

[1] Mathilde Caron, Hugo Touvron, Ishan Misra, Herv´e J´egou, Julien Mairal, Piotr Bojanowski, and Armand Joulin. Emerging properties in self-supervised vision transformers. In ICCV, 2021.

[2] Maxime Oquab, Timoth´ee Darcet, Th´eo Moutakanni, Huy Vo, Marc Szafraniec, Vasil Khalidov, Pierre Fernandez, Daniel Haziza, Francisco Massa, Alaaeldin El-Nouby, et al. Dinov2: Learning robust visual features without supervision. arXiv preprint arXiv:2304.07193, 2023.


  关于TechBeat人工智能社区

TechBeat(www.techbeat.net)隶属于将门创投,是一个荟聚全球华人AI精英的成长社区。

我们希望为AI人才打造更专业的服务和体验,加速并陪伴其学习成长。

期待这里可以成为你学习AI前沿知识的高地,分享自己最新工作的沃土,在AI进阶之路上的升级打怪的根据地!

更多详细介绍>>TechBeat,一个荟聚全球华人AI精英的学习成长社区 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端实现生成图片并批量下载,下载成果物是zip包

简介 项目上有个需求,需要根据表单填写一些信息,来生成定制的二维码图片,并且支持批量下载二维码图片。 之前的实现方式是直接后端生成二维码图片,点击下载时后端直接返回一个zip包即可。但是项目经理说后端实现方式每次改个东西…

elasticsearch(学习笔记)(分布式搜索引擎)(黑马)(kibana操作)

一、索引库操作 索引库就类似数据库表,mapping映射就类似表的结构。 我们要向es中存储数据,必须先创建“库”和“表”。 1、mapping映射属性 mapping是对索引库中文档的约束,常见的mapping属性包括: type:字段数据类型…

树莓派安装Nginx服务搭建web网站结合内网穿透实现公网访问本地站点

文章目录 1. Nginx安装2. 安装cpolar3.配置域名访问Nginx4. 固定域名访问5. 配置静态站点 安装 Nginx(发音为“engine-x”)可以将您的树莓派变成一个强大的 Web 服务器,可以用于托管网站或 Web 应用程序。相比其他 Web 服务器,Ngi…

龙迅#LT8711UXE1 适用于Type-C/DP1.2/EDP转HDMI2.0方案,支持音频剥离和HDCP功能。

1. 描述 LT8711UXE1是一款高性能的 Type-C/DP1.2 转 HDMI2.0 转换器,设计用于将 USB Type-C 源或 DP1.2 源连接到 HDMI2.0 接收器。该LT8711UXE1集成了符合 DP1.2 标准的接收器和符合 HDMI2.0 标准的发射器。此外,还包括两个用于 CC 通信的 CC 控制器&a…

Python——读写属性

采用读写属性的目的就是把录入的数据控制在合理区间。 如:学生的年龄(age),学生的身高(height)... 方法一:利用实例方法来控制 class Student:def __init__(self,name"",age0):self.…

MySQL技能树学习

MySQL三大范式: 第一范式主要是确保数据表中每个字段的值必须具有原子性,也就是说数据表中每个字段的值为不可再次拆分的最小数据单元。 第二范式是指在第一范式的基础上,确保数据表中除了主键之外的每个字段都必须依赖主键。 第三范式是在…

SQL 中: 索引的建立和删除

目录 实验过程创建索引修改索引删除索引查询索引查看索引信息分析索引待续、更新中 实验过程 1 在STUDENT表的sno列上创建一个非聚簇索引,索引名为“student_sno_idx”。 CREATE INDEX student_sno_idx ON STUDENT (sno);2.在STUDENT表上按sno的升序,…

Project_Euler-10 题解

Project_Euler-10 题解 题目 思路 没有思路,一个线性筛秒了,只不过最近没发博客有点手生哈哈哈哈哈。 代码 /*************************************************************************> Author: Royi > Mail: royi990001gmail.com > From: > Lan…

ipad电容笔哪个牌子好?五款年度实力派电容笔推荐,小白必看

在数字化时代,电容笔已经成为了许多人日常生活和工作中不可或缺的工具。但是,市场上琳琅满目的电容笔品牌和型号让选择变得有些困难。作为一名资深的数码爱好者,我在选购电容笔上也有一定的经验,下面我来给大家分享一下2024电容笔…

基于RK3588+Codesys+Xenomai的ARM+LINUX实时硬件平台的软PLC解决方案

产品概述 公司推出基于瑞芯微RK3588架构的AI边缘计算主板,RK3588是新一代国产旗舰高性能64位八核处理器,采用8nm工艺,具有高算力、低功耗、超强多媒体、丰富数据接口等特点。搭载四核A76四核A55的八核CPU和ARM G610MP4 GPU,内置6…

Python中starmap有什么用的?

目录 前言 starmap函数的作用 starmap函数的用法 starmap函数的示例 1. 对每个元组元素进行求和 2. 对每个元组元素进行乘积 实际应用场景 1. 批量处理函数参数 2. 并行处理任务 3. 批量更新数据库 总结 前言 在Python中, starmap 是一个非常有用的函数&…

【2024泰迪杯】B 题:基于多模态特征融合的图像文本检索Python代码实现

【2024泰迪杯】B 题:基于多模态特征融合的图像文本检索Python代码实现 1 题目 2024 年(第 12 届)“泰迪杯”数据挖掘挑战赛—B 题:基于多模态特征融合的图像文本检索 一、问题背景 随着近年来智能终端设备和多媒体社交网络平台…

U盘启动盘 制作Linux Ubuntu CentOS系统启动盘 系统安装

U盘启动盘 制作Linux Ubuntu CentOS系统启动盘 系统安装 准备条件 准备一个U盘,建议容量至少为8GB,以便存放系统镜像文件 一台已经安装好操作系统的计算机,用于制作U盘启动盘 Ubuntu和CentOS的Linux ISO镜像文件。可以从官方网站或相关资源…

Linux -- 线程概念和控制

一 什么是线程 1.1 线程的引出 我们开始理解一下Linux中的线程。我们以前说过,一个进程被创建出来,要有自己对应的进程PCB的,也就是 task_struct,也要有自己的地址空间、页表,经过页表映射到物理内存中。所以在进程角…

JMeter 简介及安装详细教程(全网独家)

JMeter 简介 全名为 Apache JMeter JMeter 是一个软件,使负载测试或业绩为导向的业务(功能)测试不同的协议或技术。 它是 Apache 软件基金会的Stefano Mazzocchi JMeter 最初开发的。 它主要对 Apache JServ(现在称为如 Apache T…

吴恩达机器学习笔记十六 如何debug一个学习算法 模型评估 模型选择和训练 交叉验证测试集

如果算法预测出的结果不太好,可以考虑以下几个方面: 获得更多的训练样本 采用更少的特征 尝试获取更多的特征 增加多项式特征 增大或减小 λ 模型评估(evaluate model) 例如房价预测,用五个数据训练出的模型能很好的拟合这几个数据&am…

虚拟机(KVM)克隆

当需要批量部署虚拟机时,可以使用克隆虚拟机的方式来进行。 使用图形界面来克隆虚拟机。 [rootzhoujunru_node1 zhou]# virsh list --allId Name State ------------------------------ vm01 shut off- vm01-clone shut off克隆完成。

【axios】你的进度条准确吗

1、axios监听进度 上传和下载操作在前端中是非常常见的,当我们想知道上传或下载的进度时也不难,axios已经实现了监听进度的方法 import axios from axios// 上传请求 axios.post(/api/v1/upload, {data: xxx},{// onUploadProgress回调可以获取进度onU…

网络基础aaa

三次握手 四次挥手 网络模型 TCP or UDP 的特点 如何理解 TCP 的5层协议 TCP的5层协议是指计算机网络体系结构中,与TCP(传输控制协议)相关的五个层次。这五个层次从高到低依次是:应用层、传输层、网络层、数据链路层和物理层。每…

多线程多进程

秋招面试的java八股文知识点补充以及iot 这里有一点阅读补充 线程和进程区别 什么是进程? 进程 (Process) 是计算机中的一个独立执行单元,是操作系统资源分配的基本单位。每个进程有各自独立的内存空间和资源,它们之间相互独立,相互之间…