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

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.mzph.cn/news/737108.shtml

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

相关文章

【Java EE】线程安全的集合类

目录 🌴多线程环境使用 ArrayList🎍多线程环境使⽤队列🍀多线程环境使⽤哈希表🌸 Hashtable🌸ConcurrentHashMap ⭕相关面试题🔥其他常⻅问题 原来的集合类, 大部分都不是线程安全的. Vector, Stack, HashT…

小波散射网络及其应用

1989 年,Mallat 首次提出将基于小波变换的特征提取方法用于模式识别分类中[40],若干 年后,Mallat 又提出了基于小波变换的小波散射网络这一新型网络结构,该网络主要是基于 小波变换的散射算子(Scattering operators)[41],能提取出原始信息在弹性形变、仿射变换中 的不变…

智慧城市的定义是什么?

智慧城市:就是运用信息和通信技术手段感测、分析、整合城市运行核心系统的各项关键信息,从而对包括民生、环保、公共安全、城市服务、工商业活动在内的各种需求做出智能响应。其实质是利用**的信息技术,实现城市智慧式管理和运行,…

【小白必看】永久提升代码/算法能力的6个编程习惯(推荐阅读)

前言 编程和算法能力是当代工程师的核心竞争力之一。想要快速提升自己的编程和算法能力,却苦于没有合适的方法?别担心,今天我将与你分享6个高效编程习惯,让你轻松提升编程和算法能力! 大家好,我是Erik&am…

使用脚本批量下载nuscens数据集

Nuscenes 完整版数据集批量下载 需求: 高速下载Nuscenes完整版数据集。采用google浏览器自带工具下载,速度慢,且容易断。 数据地址 官方地址:https://www.nuscenes.org/nuscenes 如何获取 Nuscenes 数据集的路径 安装插件 ch…

c语言之函数递归

函数递归就是函数不断引用自己&#xff0c;这样形成一个循环 比如下面代码 #include<stdio.h> int fun(int i) {printf("%d\n",i);return fun(i1);}int main() {int num;puts("请输入一个数字");scanf("%d",&num);fun(num);return 0…

力控软件与多台不同品牌的PLC之间如何实现无线通讯?

在现代化工厂中&#xff0c;除厂级PLC系统外&#xff0c;还存在很多独立的子系统。比如&#xff0c;各个生产车间的PLC系统、或同一生产车间的不同生产流程的PLC系统。对一个大型工厂&#xff0c;由于生产线的不断改造、新老流程的不断更新&#xff0c;这些PLC系统往往是由不同…

【C++庖丁解牛】STL之vector容器的介绍及使用 | vector迭代器的使用 | vector空间增长问题

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 目录 1.1 vector的介绍2 v…

navicat过期了,直接用idea连接mysql

1、我的是社区版&#xff0c;需要下载一个插件&#xff0c;直接搜索安装即可。 2、找到data source&#xff0c;点击mysql 3、你们熟悉的&#xff0c;输入账户密码&#xff0c;点击test Connection测试是否连接成功 4、这个本来是在右边&#xff0c;但是你可以把他挪到左边。 5…

三次握手,四次挥手基本概念及其抓包演示

目录 1.tcp三次握手 2.tcp四次挥手 3.思考问题(面试常考) 3.1 三次握手时可能出现什么攻击? 3.2 为什么是三次握手,可不可以是两次,为什么? ​编辑3.3 四次挥手的过程可以用三次完成吗? 4.抓包演示三次握手四次挥手 1.tcp三次握手 tcp协议特点:面向连接的,可靠的,流式…

【Python】一文详细介绍 plt.rcParamsDefault 在 Matplotlib 中的原理、作用、注意事项

【Python】一文详细介绍 plt.rcParamsDefault 在 Matplotlib 中的原理、作用、注意事项 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程…

OpenCV-环境搭建及基本IO接口

文章目录 使用conda安装OpenCV开发环境所有相关接口验证demo以上传至仓库窗口相关接口创建窗口&#xff1a;cv2.namedWindow调整窗口大小&#xff1a;cv2.resizeWindow显示图像&#xff1a;cv2.imshow等待输入&#xff1a;cv2.waitKey销毁所有窗口&#xff1a;cv2.destroyAllWi…

Linux第12章 - 网络管理

Linux系统配置及服务管理_第12章 网络管理 简介 Linux网络接口名称规则 Network interface names Traditionally, network interfaces in Linux are enumerated as eth0, eth1, eth2, and so on. However, the mechanism which sets these names can cause changes to which in…

【Android KOOM】KOOM Java层泄漏使用全解析

文章目录 前言初始化OOMMonitormake leak日志查看&堆快照输出源码分析篇 前言 要研究内存泄漏框架&#xff0c;KOOM是个不可忽略的优秀开源框架&#xff0c;由快手开源。这将是一个系列的文章。这篇文章作为开篇&#xff0c;来看看KOOM框架的demo是怎么制造Java层面的leak…

C++的类与对象(三):构造函数、析构函数、对象的销毁顺序

目录 类的6个默认成员函数 构造函数 语法 特性 析构函数 特性 对象的销毁顺序​​​​​​​​​​​​​​ 类的6个默认成员函数 问题&#xff1a;一个什么成员都没的类叫做空类&#xff0c;空类中真的什么都没有吗&#xff1f; 基本概念&#xff1a;任何类在什么都不…

软考73-上午题-【面向对象技术2-UML】-UML中的图4

一、构件图&#xff08;组件图&#xff09; 1-1、构件图的定义 展现了&#xff0c;一组构件之间的组织和依赖。 构件图专注于系统的静态实现图。 构件图与类图相关&#xff0c;通常把构件映射为一个、多个类、接口、协作。 【回顾】&#xff1a; 类图展示了一组对象、接口、…

题目 2146: 组合的输出

题目描述: 排列与组合是常用的数学方法&#xff0c;其中组合就是从n个元素中抽出r个元素(不分顺序且r≤n)&#xff0c;我们可以简单地将n个元素理解为自然数1&#xff0c;2&#xff0c;…&#xff0c;n&#xff0c;从中任取r个数。 现要求你用递归的方法输出所有组合。 例如n&…

SpringCloud-SpringBoot读取Nacos上的配置文件

在 Spring Boot 应用程序中&#xff0c;可以使用 Spring Cloud Nacos 来实现从 Nacos 服务注册中心和配置中心读取配置信息。以下是如何在 Spring Boot 中读取 Nacos 上的配置文件的步骤&#xff1a; 1. 引入依赖 首先&#xff0c;在 Spring Boot 项目的 pom.xml 文件中添加 …

深入探索Java设计模式:责任链模式解析与实践

目录 一、责任链模式的基础知识1. 模式结构2. 模式示例 二、责任链模式的实际应用1. 请求处理链2. 日志记录器 三、责任链模式的重要性和使用场景结语 欢迎阅读本篇博客&#xff0c;我们将深入探讨Java设计模式中的责任链模式&#xff0c;帮助初学者、初中级程序员和在校大学生…

Android Kotlin知识汇总(一)编程语言

在 2019 年 Google I/O 大会上宣布今后将优先采用 Kotlin 进行 Android 开发。Kotlin 是一种富有表现力且简洁的编程语言&#xff0c;不仅可以减少常见代码错误&#xff0c;还可以轻松集成到现有应用中。如果您想构建 Android 应用&#xff0c;建议您从 Kotlin 开始着手&#x…