学习记录——BiFormer

BiFormer Vision Transformer with Bi-Level Routing Attention

BiFormer:具有双电平路由注意的视觉变压器

  摘要作为视觉转换器的核心组成部分,注意力是捕捉长期依赖关系的有力工具。然而,这样的能力是有代价的:当计算跨所有空间位置的成对令牌交互时,它会产生巨大的计算负担和沉重的内存占用。一系列的作品试图通过引入手工制作和内容不可知的注意力稀疏性来缓解这个问题,例如将注意力操作限制在局部窗口,轴向条纹或扩展窗口内。与这些方法相比,我们提出了一种新的动态稀疏注意,通过双层路由实现更灵活的内容感知计算分配。具体来说,对于查询,首先在粗区域级别过滤掉不相关的键值对,然后在剩余候选区域(即路由区域)的联合中应用细粒度的令牌到令牌注意。我们提供了一个简单而有效的实现所提出的双层路由注意,它利用稀疏性来节省计算和内存,同时只涉及gpu友好的密集矩阵乘法。在此基础上,提出了一种新的通用视觉变压器——BiFormer。由于BiFormer以查询自适应的方式处理一小部分相关令牌,而不会分散其他不相关的令牌,因此它具有良好的性能和较高的计算效率,特别是在密集的预测任务中。多个计算机视觉任务(如图像分类、目标检测和语义分割)的经验结果验证了我们设计的有效性。代码可从https://github.com/rayleizhu/BiFormer获得。

引言

  Transformer有许多适合于构建强大的数据驱动模型的属性。首先,它能够捕获数据中的远程依赖关系[29,42]。第二,它几乎没有诱导偏差,从而使模型更灵活地拟合大量数据[15]。最后但并非最不重要的是,它具有高并行性,这有利于大型模型的训练和推理[13,33,36,42]。因此,transformer不仅彻底改变了自然语言处理,而且在计算机视觉方面也显示出非常有希望的进展。
  在过去的两年里,计算机视觉社区见证了视觉变压器的爆炸式增长[1,14,15,29,44,46]。在这些工作中,一个热门的话题是提高核心构件,即注意力。卷积本质上是一个局部算子,与之相反,注意力的一个关键属性是全局接受场,它使视觉转换器能够捕获远程依赖[42]。然而,这样的属性是有代价的:当注意力跨所有空间位置成对地计算令牌关联时,它具有很高的计算复杂性,并导致大量内存占用。
  为了缓解这个问题,一个有希望的方向是将稀疏关注[6]引入到视觉转换中,这样每个查询只关注一小部分键值对,而不是全部。以这种方式,研究人员探索了几种手工制作的稀疏图案,例如将注意力限制在局部窗口[29]、扩展窗口[41,46]或轴向条纹[46]。另一方面,也有人试图使稀疏度适应数据[5,48]。然而,虽然它们使用不同的策略来合并或选择键/值令牌,但这些令牌是查询无关的,也就是说,它们由所有查询共享。然而,根据预训练的ViT 1[15]和DETR 2[1]的可视化,不同语义区域的查询实际上关注的键值对是完全不同的。因此,强制所有查询处理同一组令牌可能不是最优的。
  在本文中,我们寻求一种具有动态、查询感知稀疏性的注意机制。基本上,我们的目标是让每个查询都关注语义上最相关的键值对的一小部分。第一个问题是如何解决查找要参加的这些键值对。例如,如果我们像[17]中那样以每个查询的方式选择键值对,它仍然需要评估所有查询和键之间的配对亲和力,因此具有相同的香草注意复杂性。另一种可能性是基于每个查询的本地上下文来预测注意力偏移量[10,48],因此可以避免两两关联计算。然而,通过这种方式,对远程依赖关系进行建模是有问题的[48]。
在这里插入图片描述

  为了高效地定位有价值的键值对,我们提出了一种区域到区域路由方法。我们的核心思想是在粗粒度的区域级别过滤掉最不相关的键值对,而不是直接在细粒度的令牌级别。这是通过首先构造一个区域级关联图,然后对其进行修剪,使每个节点只保留top-k连接来实现的。因此,每个区域只需要关注top-k路由区域。确定了参与区域后,下一步是应用令牌到令牌的注意,这是非常重要的,因为现在假定键值对在空间上是分散的。对于这种情况,虽然稀疏矩阵乘法是适用的,但它在现代gpu中是低效的,它依赖于合并内存操作,即一次访问数十个连续字节的块[31]。相反,我们提出一个简单的通过收集键/值令牌来解决,其中只涉及硬件友好的密集矩阵乘法。我们将这种方法称为双级路由注意(BRA),因为它包含一个区域级路由步骤和一个令牌级注意步骤。
  通过使用BRA作为核心构建块,我们提出了BiFormer,这是一个通用的视觉变压器骨干,可用于许多应用,如分类,目标检测和语义分割。由于BRA使BiFormer能够以内容感知的方式为每个查询处理最相关的键/值令牌的一小部分,因此我们的模型实现了更好的计算性能权衡。例如,在4.6G FLOPs的计算下,BiFormer-T在ImageNet-1

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

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

相关文章

【c语言】飞机大战(1)

提前准备好游戏要的素材,可以到爱给网去找,飞机大战我们需要的是一个我方战机图片,一个背景图,三个敌方战机的图,我方战机的图片,敌方战机的图片,并且将图片和.cpp放在同一文件夹下. 这里创建.…

【qt】解决qt里编辑qss后失效问题(qt编码问题)

1、先创建qss文本stylesheet.qss 以按钮为例 QPushButton {background-color:rgb(240,255,255);color: rgb(0, 0, 2);border-style: outset;border-color: beige;border-radius: 10px; }/* hover按钮悬浮,鼠标悬浮在按钮上的状态,按钮颜色 */QPushButto…

数据结构之树 --- 二叉树

目录 定义二叉树的结构体 二叉树的遍历 递归遍历 非递归遍历 链式二叉树的实现 二叉树的功能接口 先序遍历创建二叉树 后序遍历销毁二叉树 先序遍历查找树中值为x的节点 层序遍历 上篇我们对二叉树的顺序存储堆进行了讲述,本文我们来看链式二叉树。 定…

高斯泼溅的全面概述

一、说明 高斯泼溅是一种用于表示 3D 场景和渲染新颖视图的方法,在“实时辐射场渲染的 3D 高斯泼溅”中引入。它可以被认为是 NeRF 类模型的替代品,就像当年的 NeRF 一样,高斯分布导致了许多新的研究工作,这些工作选择将其用作各种…

线上隐私保护的未来:分布式身份DID的潜力

在日益数字化的世界中,人们的生活越来越多地依赖于互联网,数字身份也因而变得越来越重要。根据法律规定,互联网应用需要确认用户的真实身份才能提供各种服务,而用户则希望在进行身份认证的同时能够尽量保护他们的个人隐私&#xf…

OpenHarmony 应用通用签名

一.背景 由于hap包需要经过签名才能安装到设备上,在DevEco Studio可以进行自动签名,但是自动签名只能安装在当前的设备上,在其他设备上不能安装,所以我们需要进行通用的手动签名,手动签名HarmonyOS和OpenHarmony流程是…

Windows Sockets 2 笔记

文章目录 一、Winsock简介二、Windows中Winsock对网络协议支持的情况三、使用Winsock3.1 关于服务器和客户端3.2 创建基本Winsock应用程序3.3 初始化Winscok3.3.1 初始化步骤3.3.2 初始化的核心代码3.3.3 WSAStartup函数的协调3.3.4 WSACleanup函数3.3.5 初始化的完整代码 3.4 …

Python基础进阶3:函数和方法不是一回事

你好,我是kelly,今天分享的是Python的函数与方法的不同点。 对于Python的函数和方法是不一样的,这一点需要注意下。 一、结论 1、不存在隐式传参,所有参数都是显式传递的是函数。 2、存在隐式传参的是方法,一般指隐式…

懒加载的el-tree中没有了子节点之后还是有前面icon箭头的展示,如何取消没有子节点之后的箭头显示

没有特别多的数据 <template><el-tree:props"props":load"loadNode"lazyshow-checkbox></el-tree></template><script>export default {data() {return {props: {label: name,children: zones,isLeaf:"leaf",//关…

Matlab:BP神经网络算法,二叉决策树

1、BP神经网络算法 (1)步骤 1.准备训练数据和目标值 2.创建并配置BP神经网络模型 3.训练BP神经网络模型 4.用BP神经网络模型预测数据 例&#xff1a;某企业第一年度营业额为132468&#xff0c;第二年度为158948&#xff0c;第三年度为183737&#xff0c;预测第四年度的营…

VSCode Python开发环境配置

目录 1 插件安装2 Debug和测试配置常见问题 1 插件安装 1.1 基础编译插件&#xff0c;Python、Pylance 1.2 修改语言服务器类型&#xff0c;进入用户配置页面搜索Python: Language Server&#xff0c;选择Pylance&#xff08;一定要修改可以提供很多语法提示&#xff09; 1…

4.21 构建onnx结构模型-Resize

前言 构建onnx方式通常有两种&#xff1a; 1、通过代码转换成onnx结构&#xff0c;比如pytorch —> onnx 2、通过onnx 自定义结点&#xff0c;图&#xff0c;生成onnx结构 本文主要是简单学习和使用两种不同onnx结构&#xff0c; 下面以 Resize 结点进行分析 方式 方法一…

如何编译代码,把RustDesk主页面背景白色改成自己想要的图片

环境&#xff1a; RustDesk1.1.9自建服务器 问题描述&#xff1a; 如何编译代码&#xff0c;把RustDesk主页面背景白色改成自己想要的图片 解决方案&#xff1a; 详细方案&#xff0c;有需要私聊

启动springboot时报错 APPLICATION FAILED TO START 包冲突

启动springboot时报错 APPLICATION FAILED TO START 包冲突 problem 具体日志如下 *************************** APPLICATION FAILED TO START ***************************Description:An attempt was made to call a method that does not exist. The attempt was made fr…

【Java 进阶篇】Redis 缓存优化:提升应用性能的不二选择

在现代的软件开发中&#xff0c;性能一直是开发者们追求的目标之一。对于数据库访问频繁、数据读取较慢的场景&#xff0c;使用缓存是提升性能的有效手段之一。而 Redis 作为一款高性能的内存数据库&#xff0c;被广泛用作缓存工具。本文将围绕 Redis 缓存优化进行详解&#xf…

JMX使用详解

JMX简介JMX优缺点JMX的功能JMX的用法JMX和Activiti的区别JMX使用案例JMX架构JMX支持的协议JMX工作原理JMX主要方法JMX中的MBean的注册JMX拓展SNMP网络管理协议TMN网络管理协议CIM网络管理协议Activiti JMX简介 JMX&#xff08;Java Management Extensions&#xff0c;即Java管…

拍照就能建模!手机就能访问! 这个技术正成为宣传新手段!

随着人工智能技术的不断进步&#xff0c;现在可以通过拍摄照片结合AI技术来实现3D模型生成。这种技术的出现&#xff0c; 不仅能更加方便快捷地创建3D模型&#xff0c;而且还能真实复原现实中物件的质感、纹理等。同时&#xff0c;极大地降低了各行业对3D技术的应用门槛&#x…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置相机的固定帧率(C#)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置相机的固定帧率&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机的固定帧率功能的技术背景CameraExplorer如何查看相机固定帧率功能在NEOAPI SDK里通过函数设置相机固定帧率 Baumer工业相机通过NEOAPI SDK设置相机固…

Scrapy使用案例——爬取豆瓣Top 250电影数据

文章目录 什么是Scrapy&#xff1f;创建Scrapy项目编写Scrapy Spider创建Item类配置数据存储运行Scrapy爬虫处理常见问题结论Python技术资源分享1、Python所有方向的学习路线2、学习软件3、入门学习视频4、实战案例5、清华编程大佬出品《漫画看学Python》6、Python副业兼职与全…

用通俗易懂的方式讲解大模型:使用 FastChat 部署 LLM 的体验太爽了

之前介绍了Langchain-Chatchat 项目的部署&#xff0c;该项目底层改用了 FastChat 来提供 LLM(大语言模型)的 API 服务。 出于好奇又研究了一下 FastChat&#xff0c;发现它的功能很强大&#xff0c;可以用来部署市面上大部分的 LLM 模型&#xff0c;可以将 LLM 部署为带有标准…