Vision-LSTM: xLSTM 作为通用视觉主干

摘要

尽管Transformer最初是为自然语言处理引入的,但它现在已经被广泛用作计算机视觉中的通用主干结构。最近,长短期记忆(LSTM)已被扩展为一种可扩展且性能优越的架构——xLSTM,它通过指数门控和可并行化的矩阵内存结构克服了LSTM长期以来存在的限制。在本报告中,我们介绍了Vision-LSTM(ViL),它是将xLSTM构建块应用于计算机视觉的一种适配。ViL由一系列xLSTM块组成,其中奇数块从上到下处理补丁标记的序列,而偶数块则从下到上处理。实验表明,ViL有望作为计算机视觉架构的新通用主干进一步部署。

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

1、引言

语言建模架构,如Transformer [39,1,33] 或最近的状态空间模型(State Space Models) [16, 17] 如Mamba [15],通常被适应到计算机视觉领域,以利用其强大的建模能力。然而,在自然语言处理中,输入句子通常通过离散词汇表编码为表示单词或常见子词的标记(tokens)。为了将图像编码为一组标记,Vision Transformer(ViT) [13] 提出将输入图像划分为非重叠的块(例如16x16像素),将它们线性投影为所谓的块标记的序列,并向这些标记添加位置信息。然后,这个序列可以被语言建模架构处理。

Extended Long Short-Term Memory(xLSTM)家族 [4] 最近被引入为一种新的语言建模架构。它展示了LSTM在大型语言模型(LLM)时代的复兴,在性能上与Transformer和状态空间模型(SSMs)等架构相媲美。与现有的Transformers或状态空间模型的视觉版本(如ViT [13] 或Vision Mamba [44])类似,这些视觉版本在各种计算机视觉任务中取得了显著成果 [31, 22, 28, 30, 3],我们引入了Vision LSTM(ViL)——一个使用xLSTM块作为其核心组件的通用计算机视觉主干。为了调整xLSTM(一个自回归模型)以适应计算机视觉(一个通常不是自回归的领域),我们采用了一个交替堆叠的mLSTM块 [4],其中奇数块从左上角到右下角逐行处理块,偶数块从右下角到左上角处理块。这种简单的交替设计允许ViL有效地处理非序列输入,如图像,而不会引入额外的计算量。

与状态空间模型(SSM)的视觉适应类似[23, 44],Vision-LSTM(ViL)在计算和内存复杂性方面相对于序列长度展现出线性关系,这使得它对于受益于高分辨率图像的任务具有吸引力,如医学影像[8,18,38,41]、分割[22,9]或物理模拟[5,27,6,2]。相比之下,由于自注意力机制,ViT的计算复杂性呈二次方增长,这使得将它们应用于高分辨率任务成本高昂。

2、方法

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

3、实验

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

我们在224x224分辨率下对ViL模型进行了800个周期(tiny, tiny+)或400个周期(small, small+, base)的训练,学习率设置为1e-3,并使用余弦衰减计划。详细的超参数可以在附录5中找到。

为了与Vision Mamba(Vim)[44]进行公平的比较,我们向我们的模型添加了额外的块,以匹配tiny和small变种的参数数量(分别表示为ViL-T+和ViL-S+)。请注意, V i L L \mathrm{ViL}_{\mathrm{L}} ViLL所需的计算量显著少于 V i m \mathrm{Vim} Vim,因为 V i L \mathrm{ViL} ViL以交替的方式遍历序列,而Vim在每个块中遍历序列两次。这一点在Vim使用优化的CUDA内核时仍然成立,而目前mLSTM还没有这样的优化内核,这将会使ViL的速度更快。我们在附录A.1中比较了运行时间,其中ViL的速度比Vim快高达69%。
在这里插入图片描述

由于ViT在视觉社区中已经被广泛接受,它们多年来经历了多次优化迭代[13,34,36,35,37,19]。由于这项工作是首次将xLSTM应用于计算机视觉,我们并不期望在所有情况下都能超越ViT多年来的超参数调优结果。尽管如此,表1中的结果显示,在较小的规模上,ViL相对于经过大量优化的ViT协议(DeiT、DeiT-II、DeiT-III)表现出更有利的结果,只有训练时间是ViL-S两倍的DeiT-III-S稍微表现得更好。在“base”规模上,ViL超越了最初的ViT[13]模型,并达到了与DeiT[34]相当的结果。请注意,由于在这个规模上训练模型的成本很高,ViL-B的超参数远非最优。作为参考,训练ViL-B大约需要600个A100 GPU小时,或在32个A100 GPU上需要19小时。

通过在“长序列微调”设置下对模型进行微调[44],可以进一步提高性能,该设置使用729的序列长度对模型进行30个周期的微调,并通过在连续的块标记之间使用 50 % 50\% 50%的重叠来实现。

尽管没有利用卷积固有的归纳偏差,ViL也展示了与基于 C N N \mathrm{CNN} CNN的模型(如ConvNeXt[24])相竞争的性能。

在这里插入图片描述

块设计。我们在表2中研究了设计ViL块的不同方式。简单的单向 x L S T M \mathrm{xLSTM} xLSTM块无法达到竞争性的性能,因为xLSTM的自回归性质不适合图像分类。以双向方式遍历块,即在每个块中引入第二个mLSTM层,该层以反向方式遍历序列(类似于Vim[44]),可以提高性能,但也需要更多的参数和浮点运算(FLOPS)。共享前向和反向mLSTM的参数可以使模型更加参数高效,但仍然需要更多的计算量,并且这些参数的过载会导致性能下降。使用交替块可以在保持计算和参数效率的同时提高性能。我们还探索了四向设计(类似于[23]),它指的是按行(两个方向)和按列(两个方向)遍历序列。双向遍历仅按行(两个方向)遍历序列。图2展示了不同的遍历路径。
在这里插入图片描述

由于双向和四向块的成本增加,这项研究是在一个严重减少的设置中进行的。我们在ImageNet-1K的一个子集上进行训练,该子集仅包含100个类别的样本,在 128 × 128 128 \times 128 128×128分辨率下训练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”)而不是取平均值。这与自监督视觉变换器(如DINOv2[28])中的常见做法相似,这些变换器使用两个分别附加在[CLS]和[AVG]令牌上的目标进行训练,因此从连接[CLS]和[AVG]令牌的表示中受益。这一方向也在视觉SSM模型[40]中得到了探索,其中多个[CLS]令牌分布在序列中,然后用作分类器的输入。类似的方向也可能提高ViL的性能。

4、结论

受到xLSTM在语言建模中成功的启发,我们介绍了ViL,这是一种将xLSTM架构适应于视觉任务的架构。ViL以交替的方式处理一系列块令牌。奇数块从左上角到右下角逐行处理图像块,偶数块则从右下角到左上角处理。我们的新架构在ImageNet-1K分类任务上优于基于SSM的视觉架构,也优于经过优化的ViT模型。值得注意的是,ViL在公平比较中能够超越ViT训练流程,这些流程是多年超参数调整和变换器改进的结果。

在未来,我们看到在高分辨率图像需要最佳性能时应用ViL的潜力,如语义分割或医学成像。在这些设置中,由于自注意力的二次复杂性,变换器会受到高计算成本的困扰,而ViL由于其线性复杂性则不存在这个问题。此外,改进预训练方案(例如通过自监督学习)、探索更好的超参数设置或借鉴变换器的技术(例如LayerScale[35])是ViL的有希望的发展方向。

致谢

我们感谢欧洲高性能计算联合企业(EuroHPC Joint Undertaking)授予我们访问捷克IT4Innovations的Karolina、卢森堡LuxProvide的MeluXina、意大利CINECA的Leonardo以及芬兰CSC的LUMI的权限。

埃利斯林茨单位、LIT人工智能实验室和机器学习研究所得到了上奥地利州联邦政府的支持。我们感谢以下项目的支持:医学认知计算中心(MC3)、INCONTROL-RL(FFG-881064)、PRIMAL(FFG-873979)、S3AI(FFG-872172)、DL for GranularFlow(FFG-871302)、EPILEPSIA(FFG-892171)、AIRI FG 9-N(FWF-36284、FWF36235)、AI4GreenHeatingGrids(FFG-899943)、INTEGRATE(FFG-892418)、ELISE(H2020-ICT-2019-3 ID:951847)、Stars4Waters(HORIZON-CL6-2021-CLIMATE-01-01)。我们感谢Audi.JKU深度学习中心、TGW LOGISTICS GROUP GMBH、Silicon Austria Labs (SAL)、FILL Gesellschaft mbH、Anyline GmbH、Google、ZF Friedrichshafen AG、Robert Bosch GmbH、UCB Biopharma SRL、Merck Healthcare KGaA、Verbund AG、GLS(滑铁卢大学)、Software Competence Center Hagenberg GmbH、 Borealis AG、TÜV Austria、Frauscher Sensonic、TRUMPF和NVIDIA公司。

A. 扩展结果

A.1 ViL与Vim的运行时间比较

在表4中,我们比较了ViL和Vim[44]在ImageNet-1K数据集上训练单个epoch所需的时间。我们遵循ViTs的缩放程序,使用192(T)、384(S)、768(B)、1024(L)作为潜在维度,其中大规模模型还会将块的数量加倍。
在这里插入图片描述

A.2 更长训练时间的影响

我们研究了ViL-T+进行更长时间训练的效果,并按照表5中的超参数设置训练了400和800个epoch。经过400个epoch后,ViL-T+达到了77.2%的准确率,而当训练时长翻倍后,模型达到了78.1%的准确率。

我们使用表6中的超参数设置,对DeiT-III-T进行了实现,它在400个epoch后达到了75.6%的准确率,并在800个epoch后达到了76.2%的准确率。

B. 实现细节

B.1 硬件

我们在混合的自定义硬件服务器(主要是A100和A40 GPU)和配备8个A100或4个A100节点的公共研究集群上训练模型。

我们估计本项目使用的A100 GPU小时数总计为25,000小时。这一估计包括从初步探索、方法开发、分析到评估的所有工作。

B. 2 FLOPS 计算

我们使用fvcore库来计算表2中的浮点运算次数(FLOPS)[1]。由于fvcore并不支持ViL的所有操作,因此计算出的FLOPS并非100%准确,但它仍然是一个很好的参考点,用于比较不同块设计之间的相对计算量。

B.3 ViL 超参数

在这里插入图片描述

B.4、DeiT-III 重新实现的超参数

在这里插入图片描述

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

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

相关文章

综合数据分析及可视化实战

【实验目的】 1、掌握数据分析常用的几种扩展库: numpy、pandas、matplotlib。 2、理解数据分析的几种方法,即描述性数据分析,探索性数据分析 和验证性数据分析。 3、理解数据分析的基本步骤:数据准备、数据导入、数据预处理、数 据分析和数据可视化…

机器学习笔记 - 用于3D数据分类、分割的Point Net的网络实现

上一篇,我们大致了解了Point Net的原理,这里我们要进行一下实现。 机器学习笔记 - 用于3D数据分类、分割的Point Net简述-CSDN博客文章浏览阅读3次。在本文中,我们将了解Point Net,目前,处理图像数据的方法有很多。从传统的计算机视觉方法到使用卷积神经网络到Transforme…

【MySQL】MySQL45讲-读书笔记

1、基础架构:一条SQL查询语句是如何执行的? 1.1 连接器 连接器负责跟客户端建立连接、获取权限、维持和管理连接。 mysql -h$ip -P$port -u$user -p输完命令之后,输入密码。 1.2 查询缓存 MySQL 拿到一个查询请求后,会先到查询缓…

透明屏幕的显示效果如何

透明屏幕的显示效果可以从以下几个方面进行评估和描述: 透明度:透明屏幕的透光率通常在50-90%左右,具体取决于屏幕的设计和用途。这种高透明度使得屏幕在不用时可以像普通玻璃一样透明,保持视野的清晰。 色彩表现:透明…

PDF格式分析(八十六)——修订注释(Redaction)

修订注释(PDF 1.7及其以上版本),该注释的做用是标识要从文档中删除的内容。 修订注释启用的步骤如下: 1、内容标识。PDF编辑器可指定应删除的文档内容片段或区域,在执行下一个步骤前,用户可以看到、移动和重新定义这些注释。 2、内容移除。PDF阅读器应删除修订注释指…

SAP MMRV/MMPV 物料账期月结月底月初开关

公告:周一至周五每日一更,周六日存稿,请您点“关注”和“在看”,后续推送的时候不至于看不到每日更新内容,感谢。 这是一条刮刮乐,按住全部选中:点关注的人最帅最美,欢迎&#xff1…

######## golang各章节终篇索引 ########

slice、map #### golang 切片及append操作 ####_golang切片线程 append 和下表操作-CSDN博客 #### go map 底层结构(详细) ####-CSDN博客 并发安全问题、syncmap ###### golang sync.map 原理和使用 ######_go sync.map删除原理-CSDN博客 #### 并发读…

spring 常用注解

Component:这将 java 类标记为 bean。它是任何 Spring 管理组件的通用 构造型。spring 的组件扫描机制现在可以将其拾取并将其拉入应用程序环境 中。 Controller:这将一个类标记为 Spring Web MVC 控制器。标有它的 Bean 会自动导入到 IoC 容器中。 Se…

多商家抽奖管理系统介绍和小程序APP演示

阿基米德多商家抽奖管理系统,采用Thinkphp8.0vue3.0uniapp技术栈开发,前后端分离,客户端支持小程序、H5、APP一键打包,功能完善、成熟稳定,使用简单易上手,是一套可以直接商业化运营的好系统,其…

JavaScript快速入门系列-2(JavaScript语言基础)

第二章:JavaScript语言基础 2.1 变量声明:let, const, var2.1.1 变量是什么?2.1.2 var2.1.3 let与const2.1.4 选择哪个关键字? 2.2 数据类型2.2.1 基本数据类型2.2.2 复杂数据类型2.2.3 示例与类型检测 2.3 运算符2.3.1 算术运算符…

CATIA P3 V5-6R 中文版软件下载安装 达索CATIA三维设计软件获取

CATIA的建模和装配能力堪称业界翘楚。其强大的建模工具能够轻松应对各种复杂的几何形状和结构,帮助设计师们快速构建出精准的产品模型。同时,装配模块则能够实现零部件的快速装配,大大提高了设计效率。 在分析和仿真方面,CATIA同样…

代码随想录算法训练营第八天| 344. 反转字符串|541. 反转字符串 II

344. 反转字符串 文档讲解:代码随想录 视频讲解:字符串基础操作! | LeetCode:344.反转字符串_哔哩哔哩_bilibili 1. 感觉需要用到指针,但不知道咋做。 2. 倒序就是一个交换left,right指针对应指针值的过程。 3. 纠结…

tkinter文本对齐方式

tkinter文本对齐方式 文本对齐方式效果代码 文本对齐方式 左对齐(left):默认对齐方式,文本从左边界开始。右对齐(right):文本从右边界开始。居中对齐(center)&#xff1…

IO多路复用简介和代码实例(select函数)

接上篇 阻塞IO、非阻塞IO、IO多路复用和信号驱动IO简介-CSDN博客文章浏览阅读95次。阻塞IO、非阻塞IO、IO多路复用和信号驱动IO简介https://blog.csdn.net/CSDN_DU666666/article/details/139598410?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%2…

JS中find的用法

在JavaScript中,Array.prototype.find() 是一个数组方法,用于测试数组中的每个元素是否通过由提供的函数实现的测试。一旦找到一个满足条件的元素,该方法会立即返回该元素的值。如果找不到任何元素满足提供的测试函数,则返回undef…

maven引入依赖时莫名报错

一般跟依赖的版本无关,会报出 Cannot resolve xxx 的错误。 这种情况下去IDEA的setting中找maven的仓库位置 在仓库中顺着包路径下寻找,可能会找到.lastUpdated 的文件,这样的文件一般是下载失败了,而且在一段时间内不再下载&…

Python实战:分析产品价格波动的数据探索

在本次数据分析中,我们将使用Python的Pandas、Matplotlib和Seaborn库对产品价格波动进行深入探索。我们将从加载数据开始,一步步进行数据处理和可视化分析。 1. 加载数据 首先,我们从给定的URL加载数据集,并查看数据的前几行,以便了解数据的结构和内容。 import pandas…

windows环境下配置git环境变量

路由当前目录 vim 打开 .bash_profile PATH$PATH:/d/phpstudy_pro/Extensions/php/php7.4.3nts PATH$PATH:/d/phpstudy_pro/Extensions/php8/php8.2.9nts PATH$PATH:/d/phpstudy_pro/Extensions/composer2.5.8 …

单链表 c语言

不一定对&#xff0c;仅供参考 在单链表中开始理解错误的地方 这两个并不等价&#xff0c;前者用于后移&#xff0c;后者会破坏链表结构 list list->next; list->next list->next->next; #include <stdio.h> #include <stdlib.h> typedef st…

Downie for Mac v4.7.17 在线视频下载软件 安装(简单易学,小白轻松搞定)

Mac分享吧 文章目录 效果一、准备工作二、开始安装1、双击运行软件&#xff0c;将其从左侧拖入右侧文件夹中&#xff0c;等待安装完毕2、应用程序显示软件图标&#xff0c;表示安装成功 三、运行测试1、打开软件&#xff0c;进行设置2、下载视频&#xff0c;测试3、根据需要选…