学习记录——BiFormer

news2025/1/25 9:25:03

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

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

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

相关文章

通过Vue自定义指令实现前端埋点

在营销活动中,通过埋点可以获取用户的喜好及交互习惯,从而优化流程,进一步提升用户体验,提高转化率。 在之前的埋点方案实现中,都是在具体的按钮或者图片被点击或者被曝光时主动通过事件去上报埋点。这种方法在项目中…

[MySQL] MySQL中的事物

本片文章对MySQL中的事物进行了详解。其中包含了事物的特性、为什么要有事物、查看事物版本支持、事物常见操作、事物的隔离界别等等内容进行详细举例解释。同时还深入讲解了事物的隔离性,模拟实现MVCC多版本并发控制,也讲解了RR和RC的本质区别。希望本篇…

【Java开发岗面试】八股文—操作系统

声明: 背景:本人为24届双非硕校招生,已经完整经历了一次秋招,拿到了三个offer。本专题旨在分享自己的一些Java开发岗面试经验(主要是校招),包括我自己总结的八股文、算法、项目、HR面和面试技巧…

2024新年快乐

前言 2023年马上就要过去,希望2024年会越来越好,根据自己学的内容来实现一些我的idea。 单片机 思路 最开始的构思是这样的,“2024”用数码管来输出然后中文的“新年快乐”用点阵来实现,但是点阵是动态的截图不好看&#xff0…

uni-app js语法

锋哥原创的uni-app视频教程: 2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中...共计23条视频,包括:第1讲 uni…

微信小程序-父子页面传值

父子页面传值 父页面向子页面传值 方法一&#xff1a; 父页面&#xff1a; 1. /page/xxx/xxx?id1子页面&#xff1a; onLoad:function(option){ }方法二 <bindtap“func” data-xxx””> 子页面向父页面传值 定义父子页面 父页面&#xff1a;hotspot 子页面&a…

Python中matplotlib库的使用2

在Python中matplotlib库的使用1-CSDN博客中提到了使用折线图来表示1-5的平方值。除了折线图之外&#xff0c;还可以使用条形图来表示这些数据。条形图表示一组分类数据&#xff0c;例如刚刚提到的1-5的平方值。 1 基本的条形图 通过以下代码可以将分类数据用基本的条形图表示…

C语言——扫雷

扫雷是一款经典的小游戏&#xff0c;那如何使用C语言实现一个扫雷游戏呢&#xff1f; 一、全部源码 直接把全部源码放在开头&#xff0c;如有需要&#xff0c;直接拿走。 源码分为三个文件&#xff1a; test.cpp/c 主函数的位置 #include "game.h"int main() {…

Springcloud Alibaba使用Canal将Mysql数据实时同步到Redis保证缓存的一致性

目录 1. 背景 2. Windows系统安装canal 3.Mysql准备工作 4. 公共依赖包 5. Redis缓存设计 6. mall-canal-service 1. 背景 canal [kənl] &#xff0c;译意为水道/管道/沟渠&#xff0c;主要用途是基于 MySQL 数据库增量日志解析&#xff0c;提供增量数据订阅和消费。其诞…

微服务应用配置解决方案介绍

目录 一、传统服务配置面临的问题 1.1 本地静态配置 1.2 配置格式不统一 1.3 生产事故 1.4 配置修改困难 1.5 缺少安全审计和版本控制能⼒ 二、应用配置的使用场景 2.1 动态调整日志级别 2.2 配置项组合更新 2.3 开关驱动开发 2.4 金丝雀(灰度)发布 三、应用配置解决…

【Redis-08】Redis主从复制的实现原理

在Redis中&#xff0c;可以通过slaveof命令或者设置slaveof选项实现两台Redis服务器的主从复制&#xff0c;比如我们有两个Redis机器&#xff0c;地址分别是 127.0.0.1:6379 和 127.0.0.1:6380&#xff0c;现在我们在前者上面执行&#xff1a; 127.0.0.1:6379 > SLAVEOF 12…

Docker九 | Swarm mode

目录 Swarm基本概念 节点 服务和任务 创建Swarm集群 创建管理节点 增加工作节点 查看集群 部署服务 新建服务 查看服务 服务伸缩 增加服务 减少服务 删除服务 Swarm基本概念 节点 节点分为管理节点(manager)和工作节点(worker) 管理节点 管理节点用于Swarm集群的…

使用 GPT4V+AI Agent 做自动 UI 测试的探索

一、背景 从 Web 诞生之日起&#xff0c;UI 自动化就成了测试的难点&#xff0c;到现在近 30 年&#xff0c;一直没有有效的手段解决Web UI测试的问题&#xff0c;尽管发展了很多的 webdriver 驱动&#xff0c;图片 diff 驱动的工具&#xff0c;但是这些工具的投入产出比一直被…

windows go环境安装 swag

windows 下载依赖包 go get github.com/swaggo/swag/cmd/swag编译swag cd $GOPATH\pkg\mod\github.com\swaggo\swagv1.16.2\cmd\swagps: go env 获取 GOPATH位置 go installps: 此时 $GOPATH\bin下出现了 swag.exe 项目根目录下执行swag 初始化 swag init生成结果

【Java基础系列】body参数前后端不一致

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

动态规划 | 鸡蛋问题 | 元旦假期来点“蛋”题

文章目录 鸡蛋掉落 - 两枚鸡蛋题目描述动态规划解法问题分析程序代码 鸡蛋掉落题目描述问题分析程序代码复杂度分析 鸡蛋掉落 - 两枚鸡蛋 题目描述 原题链接 给你 2 枚相同 的鸡蛋&#xff0c;和一栋从第 1 层到第 n 层共有 n 层楼的建筑。 已知存在楼层 f &#xff0c;满足 …

微信小程序开发系列-10组件间通信01

微信小程序开发系列目录 《微信小程序开发系列-01创建一个最小的小程序项目》 《微信小程序开发系列-02注册小程序》 《微信小程序开发系列-03全局配置中的“window”和“tabBar”》 《微信小程序开发系列-04获取用户图像和昵称》 《微信小程序开发系列-05登录小程序》 《…

图文证明 泰勒公式展开

泰勒公式 泰勒公式简单来说就是,可以用一个N次多项式来表示出一个连续可导的函数 f(x) 是一个用函数在某点的信息描述其附近取值的公式 第一步 思考 这是一个sin(x)的图像 用函数在原点的信息描述其附近取值 用一阶导数贴合: 直接用切线来贴合就好 画一个点(0,sin(0)除的切…

内网常规攻击路径

点击星标&#xff0c;即时接收最新推文 随着网络技术的发展&#xff0c;企业内部网络架构的变化&#xff0c;网络设备多样性的增加&#xff0c;面对内网攻击&#xff0c;防御体系逐渐阶梯化&#xff0c;通过不同维度的防御联动&#xff0c;将攻击拒之门外。对于突破网络边界后进…

docker 私有仓库搭建,将镜像上传至私有仓库,从私有仓库拉取镜像

Docker 私有仓库 一、私有仓库搭建 # 1、拉取私有仓库镜像 docker pull registry # 2、启动私有仓库容器 docker run -id --nameregistry -p 5000:5000 registry # 3、打开浏览器 输入地址http://私有仓库服务器ip:5000/v2/_catalog&#xff0c;看到{"repositories&quo…