ICCV2023:FLatten Transformer: Vision Transformer using Focused Linear Attention

news2024/11/16 2:50:02

文章目录

  • 摘要
  • 引言
  • Preliminary
    • Vision Transformer and Self-Attention
    • Linear Attention
  • Focused Linear Attention
    • 1.Focus ability
    • 2.Feature diversity
    • 3. Focused linear attention module
  • 实验
    • 推理时间
  • 总结

在这里插入图片描述

摘要

self-attention 的二次计算复杂度一直是将Transform模型应用于视觉任务时面临的一个持续挑战。另一方面,线性注意力通过精心设计的映射函数逼近Softmax操作,以其线性复杂性提供了一种更有效的替代方案。然而,当前的线性注意力方法要么遭受显着的性能下降,要么引入了映射函数的额外计算开销。在本文中,我们提出了一种新颖的聚焦线性注意力模块,以实现高效率和表现力。具体而言,我们首先从两个视角分析了导致线性注意力性能下降的因素:聚焦能力和特征多样性。为了克服这些限制,我们引入了一个简单而有效的映射函数和一个高效的秩恢复模型来增强自我注意力的表现力,同时保持较低的计算复杂度。广泛的实验表明,我们的线性注意力模块适用于各种高级视觉变压器,并在多个基准上实现了持续改进的性能。
代码:https://github.com/LeapLabTHU/FLatten-Transformer

引言

在这里插入图片描述

Preliminary

Vision Transformer and Self-Attention

在这里插入图片描述

Linear Attention

在这里插入图片描述
然而,目前的线性注意力方法也面临着模型复杂性和表达性之间的困境。一方面,简单的近似,例如使用ReLU激活[2],过于宽松,导致显着的性能下降。另一方面,精心设计的核函数[7]或矩阵分解方法[26,50]可能会产生额外的计算开销。总的来说,线性注意力的实际性能与Softmax注意力之间仍然存在差距。

Focused Linear Attention

虽然享受线性计算复杂性,但前人的各种工作也证明,简单地用线性注意力替换Softmax注意力通常会导致严重的性能下降[34,2,7,27]。在本节中,我们首先从聚焦能力和特征多样性两个角度详细分析了线性注意力的劣势性能。然后,我们介绍了我们的聚焦线性注意力,它充分解决了这些问题,并实现了高效率和表达能力。
在这里插入图片描述

1.Focus ability

Softmax注意力实际上提供了一种非线性重新加权机制,这使得人们很容易专注于重要特征[34,2,58]。如图3所示,Softmax注意力的注意力图分布在某些区域特别清晰,例如前景物体。相比之下,线性注意力的分布相对较快平滑,使其输出更接近所有特征的平均值,并且未能关注更多信息区域。作为补救措施,我们提出了一个简单而有效的解决方案,通过调整每个查询和关键特征的方向,推动相似的查询键对更接近,同时推开不相似的查询键对。具体来说,我们提出了一个简单的映射函数fp,称为聚焦函数:
在这里插入图片描述
我们遵循前面的线性注意力模块,首先使用ReLU函数来保证输入的非负性和分母在方程(4)中的有效性。一个直接的观察是,映射后特征的范数保持不变,即 ∣ ∣ x ∣ ∣ = ∣ ∣ f p ( x ) ∣ ∣ ||x||=||f_p(x)|| ∣∣x∣∣=∣∣fp(x)∣∣,表明只调整了特征方向。
在此基础上,我们证明了在温和假设下,所提出的映射函数 f p f_p fp实际上反映了注意力的分布。

s.t. 受限于
在这里插入图片描述
本文的注意力函数 f p ( ⋅ ) f_p(\cdot) fp(),公式7代表了更相似的 query-key pairs; 公式8代表了不相似的 query-key pairs;

在这里插入图片描述
如图4所示,可以看出fp实际上将每个向量“拉”到它最近的轴上,p决定了这种“拉”的程度。通过这样做,fp有助于根据特征最近的轴将特征分成几组,提高每组内的相似度,同时减少组之间的相似度。可视化符合我们上面的分析。

2.Feature diversity

线性注意力受限于 注意力的能力 和 特征的差异性;

注意力矩阵的秩可能是导致特征多样性限制的原因之一。举例来说,文章提到了来自DeiT-Tiny模型的一个Transformer层,该层的尺寸为N=14×14。在图5(a)中可以看到,这个注意力矩阵具有完整的秩(196/196),显示了从值(values)中聚合特征时的多样性。
在这里插入图片描述
然而,在线性注意力的情况下,这很难实现。事实上,线性注意力中注意力矩阵的秩受标记数量N和每个头的通道维度d的限制:
在这里插入图片描述
在这种情况下,注意力矩阵秩的上界被限制在较低的比率,这表明注意力图的许多行被严重均匀化。
而自注意力权重是同一组V的加权和,注意力权重的均匀化必然导致聚合特征之间的相似性。为了更好地说明,我们用线性注意力替换了DeiT-Tiny中最初的Softmax注意力,并在图5(b)中显示了注意力图的秩。可以观察到秩大大降低(196个中的54个),注意力矩阵的许多行是相似的。作为补救措施,我们提出了一个简单而有效的解决方案来解决线性注意力的这种限制。具体来说,在注意力矩阵中添加了一个深度卷积(DWC)模块,输出可以表述为
在这里插入图片描述
为了更好地理解这个DWC模块的效果,我们可以将其视为一种注意,其中每个查询将只关注空间中的几个相邻特征,而不是所有特征V。这种局部性保证了即使两个查询对应的线性注意值相同,我们仍然可以从不同的局部羽毛中得到不同的输出,从而保持特征多样性。DWC的效果也可以从矩阵秩的角度来解释。基于等式(10),我们有了
在这里插入图片描述
其中我们将 M D W C M_{DWC} MDWC表示为对应深度卷积函数的稀疏矩阵,并将 M e q M_{eq} Meq表示为等价的全注意力图。由于 M D W C M_{DWC} MDWC具有全秩矩阵的势,我们实际上增加了等价注意力矩阵秩的上界,这在极大地提高线性注意力性能的同时产生了极少的计算开销。
为了更好地说明,我们对DeiT-Tiny进行了类似的修改。通过额外的DWC模块,线性注意力中注意力图的等级可以恢复到满等级(196 out 196,如图5(c)所示),这保持了特征多样性作为原始Softmax注意力。

3. Focused linear attention module

基于上述分析,我们提出了一种新的线性注意力模块,称为聚焦线性注意力模块,它在保持表达能力的同时降低了计算复杂度。具体来说,我们首先设计了一个新颖的映射函数来模仿原始Softmax注意力的急剧分布。在此基础上,我们关注以前线性注意力模块中的低秩困境,并采用简单的深度卷积来重新存储特征多样性。这样,我们的新模块既可以享受线性复杂性又可以享受高表现力的好处。具体来说,我们的模块可以制定为:
在这里插入图片描述
总的来说,我们的模块具有以下优点:
1.作为线性注意力的计算复杂度低。通过改变自注意力的计算顺序,复杂度从 O ( N 2 d ) O(N^2d) O(N2d)转换为 O ( N d 2 ) O(Nd^2) O(Nd2)
2.如Softmax关注的高表达能力。正如我们上面所分析的,以前基于核的线性注意力设计在聚焦能力和特征多样性透视方面普遍不如Softmax同类。通过提出的聚焦函数fp和深度卷积,我们的聚焦线性注意力可以获得比Softmax注意力更好的性能。此外,我们的模块还具有适应更大的感受野和不同模型架构的潜力。
基于Softmax注意力的现代Transform模型主要使用有限数量的键/值对,因为对令牌数字的二次复杂度。尽管如此,我们模块的线性复杂度使我们能够将感受野扩展到更大的区域,同时保持相同的计算量,并享受建模远程依赖关系的先进。此外,我们的mod-ule可以作为插件模块,很容易被各种现代视觉变压器架构采用。我们在包括DeiT[39]、PVT[41]、PVT-v2[42]、Swin Trans-form[24]和CSwin Transform[10]在内的五个高级模型上经验性地实现了我们的模块。考虑到扩大感受野的优势,我们在视觉变压器的早期阶段采用聚焦线性注意力块,并保持其余块不变。详细的模型架构如附录所示
在这里插入图片描述

实验

推理时间

我们进一步评估了我们模型的实际效率,并将其与两个具有竞争力的基线进行了比较。结果如图7所示。我们在多个硬件平台上测试了推理延迟,包括桌面CPU(Intel i5-8265U)和两个服务器GPU(RTX2080Ti和RTX3090)。可以观察到,我们的模型在CPU和GPU上实现了运行时间和准确性之间的更好权衡,推理速度提高了2.1倍,性能相当甚至更好。

总结

在本文中,我们提出了一种新颖的聚焦线性注意力模块。通过从聚焦能力和特征多样性的角度解决以前线性注意力方法的局限性,我们的模块实现了高效和表达能力的令人印象深刻的结合。图像分类、目标检测和语义分割的广泛实验表明,我们的模块可以广泛应用于各种视觉转换器,并在计算效率和模型性能之间取得更好的权衡。

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

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

相关文章

打印100-200之间的素数

#include <stdio.h>int prime(int n){int i 1;for(i 2;i < n;i){if(n % i 0)return 0;}return 1; } //打印100-200之间的素数 int main() {int n 0;int j 100;for(j 100;j < 200;j){if(prime(j)){printf("%d是素数\n",j);n;}}printf("100-200…

在此处打开命令窗口 (Open command window here)

在此处打开命令窗口 [Open command window here] 1. 在此处打开命令窗口 (Open command window here)2. .exe 执行References 1. 在此处打开命令窗口 (Open command window here) Shift 鼠标右键 2. .exe 执行 ​​​ 在 .exe 文件所在的文件夹打开命令提示符窗口。如果使用…

【算法】二叉搜索树的插入、删除、转换操作

1 二叉搜索树的插入操作 给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和要插入树中的值 value &#xff0c;将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 &#xff0c;新值和原始二叉搜索树中的任意节点值都不同。 注意&#xff0c;可能…

ref和reactive用哪个?

ref和reactive用哪个? 1.&#x1f916;GPT&#x1f916;:ref和reactive用哪个根据数据类型而定 ref 用于将基本类型的数据&#xff08;如字符串、数字&#xff0c;布尔值等&#xff09;转换为响应式数据。使用 ref 定义的数据可以通过 .value 属性访问和修改。 reactive 用于…

每日一题——LeetCode1556.千位分隔符

方法一 个人方法&#xff1a; 把n转为字符串&#xff0c;逆序遍历n&#xff0c;把n的每个元素加入res&#xff0c;每三次加入.&#xff0c;最后将res翻转再转为字符串即为符合题目要求的结果 var thousandSeparator function(n) {nlet res[],lenn.length-1for(let ilen;i>…

1、jQuery介绍、css()、选择器、事件、动画

一、jQuery介绍&#xff1f; 1、什么是jQuery&#xff1f; 是一个JavaScript函数库 2、jQuery特点 写的少&#xff0c;做的多 3、jQuery的安装 直接下载引入 <script src"jquery-1.10.2.min.js"></script>通过cdn引入 <script src"https…

2369. 检查数组是否存在有效划分(动态规划)

2024-3-1 文章目录 [2369. 检查数组是否存在有效划分](https://leetcode.cn/problems/check-if-there-is-a-valid-partition-for-the-array/)思路&#xff1a;代码&#xff1a; 2369. 检查数组是否存在有效划分 思路&#xff1a; 1.状态定义:f[i]代表考虑将[0,i]是否能被有效划…

【buuctf-gakki】

binwalk 查看图片&#xff0c;发现有 rar 文件&#xff0c;提取后如上图所示&#xff08;flag.txt为已经解压后出来的&#xff09;其中这个 rar 需要用 archpr爆破一下 打开后一个 flag.txt 一堆杂乱无章的字符&#xff0c;需要用到 python 脚本进行词频统计&#xff0c;我们…

GPT4引领科研新时代:无限学习在AI领域的探索与实践

【最新增加谷歌Gemini模型讲解、自定义GPTs及AI领域中的集中大模型的最新技术】 2023年随着OpenAI开发者大会的召开&#xff0c;最重磅更新当属GPTs&#xff0c;多模态API&#xff0c;未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义&#xff0c;不亚…

canvas坐标系统 webgl坐标系统 uv纹理坐标系统 原点

一、canvas原点在左上角&#xff0c;x轴正方向向右&#xff0c;y轴正方向向下&#xff0c;一个点对应一个像素 二、webgl原点在正中间&#xff0c;x轴正方向向右&#xff0c;y轴正方向向上&#xff0c;数据显示范围在[-1,1]之间&#xff0c;超过此范围不显示数据 三、uv原点在左…

【C++】用文件流的put和get成员函数读写文件

题目 编写一个mycopy程序&#xff0c;实现文件复制的功能。用法是在控制台输入&#xff1a; mycooy 源文件名 目标文件名 参数介绍 m a i n main main 函数的参数有两个&#xff0c;一个int类型参数和一个指针数组。 a r g c argc argc 表示参数的个数。参数为void时 a r g …

Jquery操作DOM对象

文章目录 目录 文章目录 本章目标 一.DOM操作分类 二.JQuery中的DOM操作 内容操作 属性值操作 节点操作 节点属性操作 节点遍历 总结 本章目标 使用Jquery操作网页元素使用JQuery操作文本与属性值内容使用JQuery操作DOM节点使用Jquery遍历DOM节点使用JQuery操作CSS-DOM 一…

linux下cmake的使用

linux下cmake的使用 总体测试代码 cmake是一个项目构建工具&#xff0c;帮助编译代码&#xff0c;生成可执行文件。 源代码到可执行文件需要经历的步骤&#xff1a; 总体 要使用cmake来编译项目&#xff0c;最重要的就是CmakeLists.txt文件的编写&#xff1a; ①不用链接其它…

计算机网络之传输层 + 应用层

.1 UDP与TCP IP中的检验和只检验IP数据报的首部, 但UDP的检验和检验 伪首部 首部 数据TCP的交互单位是数据块, 但仍说TCP是面向字节流的, 因为TCP仅把应用层传下来的数据看成无结构的字节流, 根据当时的网络环境组装成大小不一的报文段.10秒内有1秒用于发送端发送数据, 信道…

【一】【算法分析与设计】基础测试

排列式 题目描述 7254是一个不寻常的数&#xff0c;因为它可以表示为7254 39 x 186&#xff0c;这个式子中1~9每个数字正好出现一次 输出所有这样的不同的式子&#xff08;乘数交换被认为是相同的式子&#xff09; 结果小的先输出&#xff1b;结果相同的&#xff0c;较小的乘…

rust学习(tokio协程分析二)

例子&#xff1a; 我们如果使用new_current_thread来创建tokio的协程运行runtime时&#xff0c; let rt tokio::runtime::Builder::new_current_thread().enable_all().build().unwrap(); 发现只有调用rt.block_on(...)才能触发。这里我们分析一下为何在new_current_thread…

【C++初识】语句

文章目录 1.注释 变量 常量 关键字 标识符命名规则 数据类型 sizeof关键字 数据的输入 运算符2.程序流程结构2.1选择结构2.2循环结构2.21while{循环条件}{循环语句}&#xff1b;//满足循环条件&#xff0c;执行循环语句2.22do{循环语句}while{循环条件}&#xff1b;//do....whi…

你不可不知的数据安全词汇都在这!

关注公众号&#xff0c;回复关键词 “数据安全”&#xff0c;即可获取报告完整版 随着数字化时代的快速发展&#xff0c;数据安全已成为全球企业和组织面临的一项重大挑战。在这一背景下&#xff0c;我们深感需要有一个统一的、全面的数据安全术语基础&#xff0c;以便行业从业…

c++函数指针 回调函数

目录 函数指针 ​编辑 实例 函数指针作为某个函数的参数 实例 std::function轻松实现回调函数 绑定一个函数 作为回调函数 作为函数入参 函数指针 函数指针是指向函数的指针变量。 通常我们说的指针变量是指向一个整型、字符型或数组等变量&#xff0c;而函数指针是指向…

基于SpringBoot的综合小区管理系统的设计与实现

文章目录 项目介绍主要功能截图&#xff1a;部分代码展示设计总结项目获取方式 &#x1f345; 作者主页&#xff1a;超级无敌暴龙战士塔塔开 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &…