(2024,Vision-LSTM,ViL,xLSTM,ViT,ViM,双向扫描)xLSTM 作为通用视觉骨干

news2024/11/28 0:47:40

Vision-LSTM: xLSTM as Generic Vision Backbone

公和众与号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群)

目录

0. 摘要

2 方法

3 实验

3.1 分类设计

4 结论


0. 摘要

Transformer 被广泛用作计算机视觉中的通用骨干网络,尽管它最初是为自然语言处理引入的。最近,长短期记忆网络(LSTM)被扩展为一种可扩展且高性能的架构——xLSTM,通过指数门控和可并行的矩阵存储结构克服了长期存在的 LSTM 局限性。在这份报告中,我们介绍了视觉 LSTM(Vision-LSTM,ViL),这是 xLSTM 构建模块在计算机视觉中的一种改编。ViL 由一堆 xLSTM 模块组成,奇数模块从上到下处理补丁标记序列,而偶数模块则从下到上处理。实验表明,ViL 有望进一步作为新的计算机视觉架构通用骨干网络进行部署。

项目页面:https://nx-ai.github.io/vision-lstm/

2 方法

Vision-LSTM(ViL)是一个用于计算机视觉任务的通用骨干网络,它是由 xLSTM 模块构建而成的,如图 1 所示。按照 ViT [13] 的方法,ViL 首先通过共享的线性投影将图像分割成不重叠的补丁(patch),然后为每个补丁标记(token)添加可学习的位置嵌入。ViL 的核心是交替的 mLSTM 模块,这些模块是完全可并行化的,并配备了矩阵存储和协方差更新规则。奇数 mLSTM 模块从左上角到右下角处理补丁标记,而偶数模块则从右下角处理到左上角。

(2024,LSTM,Transformer,指数门控,归一化器状态,多头内存混合)xLSTM:扩展的 LSTM

3 实验

我们在 ImageNet-1K [12] 上进行实验,该数据集包含 130 万张训练图像和 5 万张验证图像,每张图像属于 1000 个类别之一。我们的比较主要集中在使用序列建模骨干网络并且参数数量大致相当的模型上。

我们在 224x224 分辨率下训练 ViL 模型 800 个 epochs(tiny, tiny+)或 400 个 epochs(small, small+, base),学习率为 1e-3,使用余弦衰减调度。详细的超参数可以在附录 5 中找到。

(2024,ViM,双向 SSM 骨干,序列建模)利用双向状态空间模型进行高效视觉表示学习

为了与 Vision Mamba (Vim) [44] 进行公平比较,我们在模型中添加了额外的模块,以匹配 tiny 和 small 变体的参数数量(分别记为 ViL-T+ 和 ViL-S+)。需要注意的是,ViL 所需的计算量显著少于 Vim,因为 ViL 以交替方式遍历序列,而 Vim 每个模块遍历序列两次。这一点即使在 Vim 使用优化的 CUDA 内核的情况下依然成立,目前 mLSTM 尚无优化的 CUDA 内核(可进一步加速 ViL)。我们在附录 A.1 中比较了运行时间,ViL 比 Vim 快达 69%。

由于 ViT 在视觉领域已得到广泛应用,经过多年的多次优化循环 [13, 34, 36, 35, 37, 19]。作为首次将 xLSTM 应用于计算机视觉的工作,我们不期望在所有情况下都能超越多年超参数调优的ViT。然而,表 1 中的结果显示,ViL 在较小规模上显示出比经过大量优化的 ViT 协议(DeiT, DeiT-II, DeiT-III)更好的结果,只有经过双倍训练的 DeiT-III-S 略优于 ViL-S。在 “base” 规模上,ViL 表现优于初始 ViT [13] 模型,并且与 DeiT [34] 取得了可比的结果。需要注意的是,由于在这种规模上训练模型的成本很高,ViL-B 的超参数远未达到最佳。参考,训练 ViL-B 大约需要 600 A100 GPU 小时,或者在 32 个 A100 GPU 上约 19 小时。

通过在 “长序列微调” 设置中微调模型可以进一步提高性能 [44],该设置通过在连续补丁标记之间使用 50% 的重叠,增加序列长度到 729,并微调模型 30 个 epoches。

ViL 在与基于 CNN 的模型(如 ConvNeXt [24])的竞争中也表现出色,尽管没有利用卷积固有的归纳偏差。

块设计。我们在表 2 中研究了不同的 ViL 模块设计方法。简单的单向 xLSTM 模块未能达到竞争性能,因为 xLSTM 的自回归特性不适合图像分类。以双向方式遍历模块,即在每个模块中引入一个反向遍历序列的第二个 mLSTM 层(类似于 Vim [44]),可以提高性能,但也需要更多的参数和 FLOPS。共享前向和后向 mLSTM 的参数使模型更具参数效率,但仍需要更多的计算资源,并且会导致这些参数过载,从而导致性能下降。使用交替模块可以提高性能,同时保持计算和参数效率。我们还探索了四向设计(类似于 [23]),即行方向(双向)和列方向(双向)遍历序列。双向仅在行方向(双向)上遍历序列。图 2 可视化了不同的遍历路径。

由于双向和四向模块的成本增加,这项研究是在大幅减少的设置中进行的。我们在 ImageNet-1K 的一个子集上训练,该子集仅包含 100 个类别的样本,分辨率为 128x128,训练 400 个周期。这尤其必要,因为我们的四向实现不兼容 torch.compile(PyTorch [29] 的一种通用速度优化方法),这导致运行时间更长,如表 2 最后一列所示。由于这一技术限制,我们选择交替双向模块作为我们的核心设计。

3.1 分类设计

为了使用 ViT 进行分类,通常将标记序列池化为单个标记,然后用作分类头的输入。最常见的池化方法是:(i)在序列开始处添加一个可学习的 [CLS] 标记,或(ii)对所有补丁标记取平均值生成一个 [AVG] 标记。是否使用 [CLS] 或 [AVG] 标记通常是一个超参数,两种变体的性能大致相当。而自回归模型通常需要专门的分类设计。例如,Vim [44] 需要将 [CLS] 标记放在序列中间,如果使用其他分类设计(如 [AVG] 标记或在序列开始和结束处分别放置两个 [CLS] 标记),性能会大幅下降。由于其自回归特性,我们在表 3 中探索了不同的 ViL 分类设计。[AVG] 对所有补丁标记取平均值,“Middle Patch” 使用中间补丁标记,“Middle [CLS]” 在序列中间使用一个 [CLS] 标记,“Bilateral [AVG]” 使用第一个和最后一个补丁标记的平均值。我们发现,ViL 对分类设计相对鲁棒,所有性能差异都在 0.6% 以内。我们选择 “Bilateral [AVG]” 而不是 “Middle [CLS]”,因为 ImageNet-1K 已知具有中心偏差,即物体通常位于图片中央。通过使用 “Bilateral [AVG]”,我们避免了利用这种偏差,使我们的模型更具普适性。

为了与使用单一标记作为分类头输入的先前架构保持可比性,我们对第一个和最后一个补丁取平均值。为了实现最佳性能,我们建议将这两个标记连接起来(“Bilateral Concat”)而不是取平均值。这类似于自监督视 ViT 中的常见做法,如 DINOv2 [28],它们通过在 [CLS] 和 [AVG] 标记处分别附加两个目标进行训练,因此通过连接 [CLS] 和 [AVG] 标记的表示受益。这一方向也已在视觉 SSM 模型 [40] 中进行了探索,在序列中散布多个 [CLS] 标记并用作分类器的输入。类似的方法也可以提高 ViL 的性能。

4 结论

受 xLSTM 在语言建模中成功的启发,我们介绍了 ViL,这是一种将 xLSTM 架构改编到视觉任务中的方法。ViL 以交替方式处理补丁标记序列。奇数模块按行从左上角处理到右下角,而偶数模块从右下角处理到左上角。我们的新架构在 ImageNet-1K 分类中优于基于 SSM 的视觉架构和优化后的 ViT 模型。值得注意的是,ViL 在公平比较中能够超越经过多年超参数调优和改进的 ViT 训练管道。

未来,我们看到在需要高分辨率图像以获得最佳性能的场景中应用 ViL 的潜力,例如语义分割或医学成像。在这些设置中,transofrmer 由于自注意力的二次复杂性而面临高计算成本,而 ViL 由于其线性复杂性则不然。此外,改进预训练方案(如通过自监督学习),探索更好的超参数设置或迁移 transformer 中的技术(如 LayerScale [35])都是 ViL 的有前景的方向。

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

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

相关文章

FM148R,FM147A和利时卡件

FM148R,FM147A和利时卡件。软件组成及各部分功能软件组成---各组件功能注意事项:仿真功能:仿真系统可以用于在单机上对组态完成的工程内容进行模拟运行。FM148R,FM147A和利时卡件。便于对这些组态内容的正确性和合理性进行初步调试。二、FM148R,FM147A和…

【Vue】面经基础版-案例效果分析

面经效果演示 功能分析 通过演示效果发现,主要的功能页面有两个,一个是列表页,一个是详情页,并且在列表页点击时可以跳转到详情页底部导航可以来回切换,并且切换时,只有上面的主题内容在动态渲染 实现思路…

C++基础四:C++模板编程

目录 一:函数模板 二:类模板 空间配置器allocator 一:函数模板 模板代码只能同一实现,不能先声明,再在另一文件实现,模板代码都是放在头文件当中的,在头文件中直接实现 二:类模板 template<typename T=int> class SeqStack // 模板名称+类型参数列表 = 类名称…

8.3 Go 包的组织结构

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

list模拟与实现(附源码)

文章目录 声明list的简单介绍list的简单使用list中sort效率测试list的简单模拟封装迭代器insert模拟erase模拟头插、尾插、头删、尾删模拟自定义类型迭代器遍历const迭代器clear和析构函数拷贝构造&#xff08;传统写法&#xff09;拷贝构造&#xff08;现代写法&#xff09; 源…

LabVIEW控制PLC的实现方式

LabVIEW与PLC的结合可以充分发挥两者的优点&#xff0c;实现更高效、灵活和可靠的自动化控制系统。本文将详细介绍LabVIEW控制PLC的实现方式&#xff0c;包括通信接口、数据交换、编程方法及实际应用案例&#xff0c;帮助用户理解并应用这一技术。 通信接口 常见通信协议 La…

Swift 序列(Sequence)排序面面俱到 - 从过去到现在(二)

概览 在上篇 Swift 序列(Sequence)排序面面俱到 - 从过去到现在(一)博文中,我们讨论了 Swift 语言中序列和集合元素排序的一些基本知识,我们还给出了以自定义类型中任意属性排序的“康庄大道”。 不过在实际的撸码场景中,我们往往需要的是“多属性”同时参与到排序的考…

Unity HDRP水系统

1.开启水系统 Script Interactions启用后&#xff0c;HDRP会为CPU上的水模拟分配内存。这允许您在水面上启用CPU模拟来查询高度信息。 2.Sky and Fog Volume中添加Water Rendering并勾选State 3.点击GameObject选择WaterSurface&#xff0c;选择要添加的水类型&#xff08;海…

【Vue】vuex 的使用 - 创建仓库

通用的地方我们一般会称之为仓库 1.安装 vuex 安装vuex与vue-router类似&#xff0c;vuex是一个独立存在的插件&#xff0c;如果脚手架初始化没有选 vuex&#xff0c;就需要额外安装。 yarn add vuex3 或者 npm i vuex32.新建 store/index.js 专门存放 vuex ​ 为了维护项目…

基于协调过滤算法商品推荐系统的设计#计算机毕业设计

基于协调过滤算法商品推荐系统的设计#计算机毕业设计 管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;商品管理&#xff0c;论坛管理&#xff0c;商品资讯管理 前台账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;论坛&#xf…

HIP的应用可移植性

Application portability with HIP — ROCm Blogs (amd.com) 许多科学应用程序在配备AMD的计算平台和超级计算机上运行&#xff0c;包括Frontier&#xff0c;这是世界上第一台Exascale系统。这些来自不同科学领域的应用程序通过使用Heterogeneous-compute Interface for Portab…

Electron qt开发教程

模块安装打包 npm install -g electron-forge electron-forge init my-project --templatevue npm start //进入目录启动 //打包成一个目录到out目录下&#xff0c;注意这种打包一般用于调试&#xff0c;并不是用于分发 npm run package //打出真正的分发包&#xff0c;放在o…

FJSP:烟花算法(FWA)求解柔性作业车间调度问题(FJSP),提供MATLAB代码

一、烟花算法介绍 参考文献&#xff1a; Tan, Y. and Y. Zhu. Fireworks Algorithm for Optimization. in Advances in Swarm Intelligence. 2010. Berlin, Heidelberg: Springer Berlin Heidelberg. 二、烟花算法求解FJSP 2.1FJSP模型介绍 柔性作业车间调度问题(Flexible …

在VMware虚拟机上安装win10 跳过 通过microsoft登录

在VMware虚拟机上安装win10 跳过 “通过microsoft登录” 配置虚拟机&#xff0c;将网卡断开&#xff0c; 具体操作&#xff1a; 虚拟机/设置/硬件/网络适配器/设备状态&#xff0c;取消已连接和启动时连接的两个对号&#xff0c; 再把虚拟机重启&#xff0c;然后就可以跳过这个…

Type-C转音频(C/3.5mm接口USB2.0数据传输)带PD充电低成本解决方案

LDR6500&#xff1a;领先市场的USB-C DRP接口USB PD通信芯片 产品介绍 LDR6500&#xff0c;由乐得瑞科技精心研发&#xff0c;是一款针对USB Type-C标准中Bridge设备而优化的USB-C DRP&#xff08;Dual Role Port&#xff0c;双角色端口&#xff09;接口USB PD&#xff08;Po…

【原创】springboot+mysql农业园区管理系统设计与实现

个人主页&#xff1a;程序猿小小杨 个人简介&#xff1a;从事开发多年&#xff0c;Java、Php、Python、前端开发均有涉猎 博客内容&#xff1a;Java项目实战、项目演示、技术分享 文末有作者名片&#xff0c;希望和大家一起共同进步&#xff0c;你只管努力&#xff0c;剩下的交…

Redis进阶知识个人汇总

持久化 三种方式实现它的持久化&#xff1a; RDB持久化 全称Redis数据备份文件&#xff0c;又称Redis数据快照 这种就是将Redis内存中所有数据记录到磁盘中&#xff0c;当实例出故障后&#xff0c;从磁盘中读快照文件进行恢复数据。 一般使用bgsave指令实现 复制主线程得到一…

五分钟上手IoT小程序

五分钟上手IoT小程序 IoT小程序框架搭建开发环境首先安装NodeJs安装NodeJs验证安装成功 安装cnpm 安装VSCode 开发IDE下载开发IDE安装开发IDE安装框架脚手架 下载模拟器创建工程项目应用编译(打包构建) VSCode 开发IDE安装插件通过开发插件创建工程编译工程debug编译编译太慢问…

01Linux的安装,时区,固定IP的配置

Linux系统的简介与安装 Linux简介 计算机是由硬件和软件所组成 硬件&#xff1a;计算机系统中由电子,机械和光电元件等组成的各种物理装置的总称软件&#xff1a;是用户和计算机硬件之间的接口和桥梁&#xff0c;用户通过软件与计算机进行交流(操作系统) 操作系统作为用户和…

记一次源码部分丢失后补救过程

起因 最近植物大战僵尸杂交版玩的入迷&#xff0c;写了一个“神奇”小工具&#xff0c;来辅助游戏。用Git新建一个库&#xff0c;想把代码备份到GitHub&#xff0c;结果push错库了&#xff0c;无奈reset&#xff0c;结果把本地项目一起reset了&#xff0c;结果就是源代码丢失。…