论文阅读笔记:VMamba: Visual State Space Model

论文阅读笔记:VMamba: Visual State Space Model

  • 1 背景
  • 2 创新点
  • 3 方法
  • 4 模块
    • 4.1 2D选择性扫描模块(SS2D)
    • 4.2 加速VMamba
  • 5 效果
    • 5.1 和SOTA方法对比
    • 5.2 SS2D和自注意力
    • 5.3 有效感受野
    • 5.4 扫描模式

论文:https://arxiv.org/pdf/2401.10166

代码:https://github.com/MzeroMiko/VMamba

1 背景

视觉表征学习作为计算机视觉领域的一个基础研究方向,在深度学习时代取得了令人瞩目的进展。为了表示视觉数据中的复杂模式,卷积神经网络和视觉Transformer这两类主干网络被提出广泛应用于各种视觉任务中。相比于卷积神经网络,ViT由于融合了自注意力机制,在大规模数据集通常表现出更强大的学习能力。然而,自注意力的二次复杂度在设计大空间分辨率的下游任务重带来了巨大的计算开销。

为了应对这一挑战,大部分工作都在提高注意力计算的效率。然而,现有的方法要么限制了有效感受野的大小,要么在各种任务上都有显著的性能下降。这促使需要开发出一种新颖的视觉数据架构,同时保持普通自注意力机制的固有优势,即全局感受野和动态加权参数。

最近,在自然语言处理领域,Mamba提出了一种新的状态空间模型SSM,为具有线性复杂度的长序列建模提供了一种有前途的方法。从这一工作中,本文引入了VMamba,一个集成了基于SSM快的视觉主干,以实现高效的视觉表示学习。然而,Mamba的核心算法——并行化的选择性扫描操作,本质上是为处理一维序列数据而设计的。这在将其用于处理视觉数据是提出了挑战。缺乏视觉组件的固有顺序安排。为了解决这个问题,本文提出了2D Selective Scan(SS2D),一种用于空间域遍历的四路扫描机制。与注意力机制相比,SS2D保证了每个图像块经过沿其对应扫描路径设计的压缩隐藏状态来获取上下文知识,从而将时间复杂度从二次降低到线性。
在这里插入图片描述
在提出的视觉状态空间(VSS)块的基础上,本文开发了一系列VMamba结构(Tiny/Small/Base),并通过架构改进和实现优化来提高他们的性能。

2 创新点

  • 提出了VMamba,一个基于SSM的视觉主干,用于具有线性时间复杂度的视觉表示学习。为了提高VMamba的推理速度,对VMamba进行了一系列的结构和实现上的改进。

  • 引入2D选择性扫描( SS2D )来桥接1D阵列扫描和2D平面遍历,从而扩展选择性SSM来处理视觉数据。

  • VMamba在图像分类、目标检测和语义分割等视觉任务中取得了良好的性能。它对输入序列的长度也表现出显著的适应性,表现为计算复杂度的线性增长。

3 方法

在这里插入图片描述

本文在三个尺度上开发VMamba:Tiny,Small和Base。在图3(a)中对VMamba-T的结构进行了概述(附录中提供了详细的配置)。输入图像 I ∈ R H × W × 3 I∈R^{H×W×3} IRH×W×3 首先被划分成 patch,从而得到空间维度为 H 4 × W 4 \frac{H}{4}×\frac{W}{4} 4H×4W 的2D特征图,在不引入额外位置嵌入的情况下,使用多个网络阶段创建分辨率为 H 8 × W 8 \frac{H}{8}×\frac{W}{8} 8H×8W H 16 × W 16 \frac{H}{16}×\frac{W}{16} 16H×16W H 32 × W 32 \frac{H}{32}×\frac{W}{32} 32H×32W 的表示。具体来说,每个阶段包括一个下采样层(除第一阶段外),后面是一个堆叠的视觉状态空间(VSS)块。

VSS块作为Mamba块的视觉对应模块用于表示学习。通过替换S6模块制定了VSS模块的初始架构(图3©的普通VSS块)。S6是Mamba的核心,实现了全局感受野,动态权重(即选择性)和线性复杂度。本文提出用新的2D选择性扫描(SS2D)模块来代替它。为了进一步提高计算效率,作者去掉了整个乘法分支,因为门控机制的作用已经通过SS2D的选择性来实现。因此,改进后的VSS块(如图3(d))由单个网络分支和两个残差模块组成,模仿了普通Transformer模块的架构。本文所有的结构均是在该架构下使用VSS块构建的VMamba模型得到的。

4 模块

4.1 2D选择性扫描模块(SS2D)

虽然S6中扫描操作的顺序性与设计时间数据的NLP任务很好的吻合,但应用于视觉数据是一个重大的挑战,因为图像本质上是非序列的,它包含了空间信息(如局部纹理和全局结构)。为了解决这个问题,本文提出了SS2D模块,以适应视觉数据而不损害其优势。
在这里插入图片描述
如图2所示,SS2D中的数据前向过程包括3个步骤:

  • 交叉扫描。SS2D先沿着四条不同的遍历路径将收入块展开成序列。

  • 使用S6块对每个patch序列进行并行处理。

  • 交叉合并。对结果序列重新整理和合并,形成输出图(从代码看就是将对应patch直接相加)。

通过使用互补的1D遍历路径,SS2D允许图像中的每个像素在不同的方向上集成来自所有其他像素的信息。这种整合有利于2D空间中建立全局感受野。

4.2 加速VMamba

如图3(e)所示,采用普通VSS快的VMamba-T模型(包含22.9M个参数和5.6G FLOPs)实现了每秒426帧图像的吞吐率。尽管取得了82.2%的最高分类准确率(比Swin-T高出0.9%),但低吞吐量和高内存开销给VMamba的实际部署带来了巨大的挑战。

在这一部分,作者通过实现细节和架构设计两方面的改进提升其推理速度:

  • Step a(+0.0%, +41 img/s):通过在Triton中重新实现交叉扫描和交叉合并。

  • Step b(+0.0%, -3 img/s):通过调整CUDA实现选择性扫描,以适应float16和float32输出,这显著的提高了训练效率,尽管在测试时速度略有波动。

  • Step c(+0.0%, +174 img/s):将选择性扫描中相对慢的 einsum 用线性变换(即 torch.nn.functional.linear)代替。同时还采用(B,C,H,W)的张量步距,以消除不必要的数据置换。

  • Step d(+0.0%, +175 img/s):在VMamba中引入MLP。丢弃DWConv深度可分离卷积层,并将层配置从 [ 2 , 2 , 9 , 2 ] [2,2,9,2] [2,2,9,2] 改为 [ 2 , 2 , 2 , 2 ] [2,2,2,2] [2,2,2,2] 以降低FLOPs。

  • Step e(+0.6%, +366 img/s):将参数 ssm-ratio(特征扩展因子)从2.0减少到1.0,将层数增加到 [ 2 , 2 , 5 , 2 ] [2,2,5,2] [2,2,5,2],并丢弃图3© 中的整个乘法分支。

  • Step f(+0.3%, +161 img/s):通过引入DWConv层,并将参数 d_state(SSM状态维数)从16.0降低到1.0,同时将 ssm-ratio 提高到2.0。

  • Step g(+0.1%, +346 img/s):将 ssm-ratio减少到1.0,同时将层数配置从 [ 2 , 2 , 5 , 2 ] [2,2,5,2] [2,2,5,2] 改为 [ 2 , 2 , 8 , 2 ] [2,2,8,2] [2,2,8,2]

5 效果

5.1 和SOTA方法对比

分类任务上的效果对比。
在这里插入图片描述

检测任务上的效果对比。
在这里插入图片描述

对下游任务(4a)和输入尺寸(4b)的泛化性。
在这里插入图片描述

随着输入尺寸增加的计算量、吞吐量和内存占用对比。
在这里插入图片描述

5.2 SS2D和自注意力

为了表示长度为 T T T 的时间区间 [ a , b ] [a,b] [a,b] 内的响应 Y Y Y,作者将相应的SSM相关变量 $u_i⊙\Delta_i∈R{1×D_v},B_i∈R{1×D_k} $ 和 C i ∈ R T × D v C_i∈R^{T×D_v} CiRT×Dv 分别视为 V ∈ R T × D v , K ∈ R T × D k V∈R^{T×D_v},K∈R^{T×D_k} VRT×Dv,KRT×Dk Q ∈ R T × D k Q∈R^{T×D_k} QRT×Dk。那么,沿着 y b y_b yb D v D_v Dv 维度方向的第 j j j 个切片,记为 y b ( j ) ∈ R y_b^{(j)}∈R yb(j)R 可以表示为:
在这里插入图片描述

其中 h a ∈ R D k h_a∈R^{D_k} haRDk 是第a步的隐藏状态, ⊙ ⊙ 表示元素乘积, V i ( j ) V_i^{(j)} Vi(j) 是一个标量, w : = [ w 1 ; … ; w T ] ∈ R T × D K × D v w:=[w_1;…;w_T]∈R^{T×D_K×D_v} w:=[w1;;wT]RT×DK×Dv,其中 w i ∈ R D k × D v w_i∈R^{D_k×D_v} wiRDk×Dv中的每个元素的表达式可以写成 w i = ∏ j = 1 i e A Δ a − 1 + j T w_i=\prod_{j=1}^ie^{A\Delta^T_{a-1+j}} wi=j=1ieAΔa1+jT,表示沿着扫描路径在第 i i i 步计算的累积注意力权重。

因此, Y Y Y 的第 j j j 个维度,即 Y ( j ) ∈ R T × 1 Y^{(j)}∈R^{T×1} Y(j)RT×1 可以表示为:
在这里插入图片描述

其中 M M M 表示 T × T T×T T×T 的时间掩码矩阵,下三角部分为1,其余部分为0。

作者可视化了SS2D中的 Q K T QK^T QKT ( Q ⊙ w ) ( K / w ) T (Q⊙w)(K/w)^T (Qw)(K/w)T。如图6 ( b )所示, Q K T QK^T QKT 的激活图证明了SS2D在捕获和保留遍历信息方面的有效性,所有先前扫描到前景区域的token都被激活。此外, w w w 的加入使得激活图更加集中在查询块(图6 ( c )) )的邻域内,这与 w w w 的提法所固有的时间加权效应是一致的。尽管如此,选择性扫描机制允许VMamba沿着扫描路径积累历史,有利于建立图像块之间的长期依赖关系。这在红色方框(图6 ( d )) )包围的子图中表现得很明显,在该子图中,距离左侧(在早期的步骤中扫描)较远的绵羊patch仍然处于激活状态。
在这里插入图片描述

将6(d)中每一行的结果加起来可以得到6©中每一行的结果。

5.3 有效感受野

有效感受野ERF是指输入空间中有助于激活特定输出单元的区域。作者对比了训练前后各视觉backbone上的ERF,如图7,在所有研究的模型中,只有DeiT,HiViT,Vim和VMamba显示了全局ERF,其他模型虽然具有全局覆盖的理论潜力,但也只显示了局部ERF,同时与DeiT和HiViT相比,VMamba的线性复杂度提高了其计算效率。与Vim相比,虽然两者均是基于Mamba架构,但VMamba的ERF比Vim更均匀。
在这里插入图片描述

5.4 扫描模式

作者对比了提出的交叉扫描和单项扫描,双向扫描以及级联扫描(依次扫描行和列)的效果,如图8所示。在这里插入图片描述

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

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

相关文章

技术总结:FPGA基于GTX+RIFFA架构实现多功能SDI视频转PCIE采集卡设计方案

目录 1、前言工程概述免责声明 3、详细设计方案设计框图SDI 输入设备Gv8601a 均衡器GTX 解串与串化SMPTE SD/HD/3G SDI IP核BT1120转RGBFDMA图像缓存RIFFA用户数据控制RIFFA架构详解Xilinx 7 Series Integrated Block for PCI ExpressRIFFA驱动及其安装QT上位机HDMI输出RGB转BT…

03:Heap代码的分析

Heap代码的分析 1、内存对齐2、Heap_1.c文件代码分析3、Heap_2.c文件代码分析4、Heap_4.c文件代码分析5、Heap_5.c文件代码分析 1、内存对齐 内存对齐的作用是为了CPU更快的读取数据。对齐存储与不对齐存储的情况如下: 计算机读取内存中的数据时是一组一组的读取的…

自动驾驶---苏箐对智驾产品的思考

1 前言 对于更高级别的自动驾驶,很多人都有不同的思考,方案也好,产品也罢。最近在圈内一位知名的自动驾驶专家苏箐发表了他自己对于自动驾驶未来的思考。 苏箐是地平线的副总裁兼首席架构师,同时也是高阶智能驾驶解决方案SuperDri…

Android BitmapShader简洁实现马赛克/高斯模糊(毛玻璃),Kotlin(三)

Android BitmapShader简洁实现马赛克/高斯模糊(毛玻璃),Kotlin(三) 发现,如果把(二) Android BitmapShader简洁实现马赛克,Kotlin(二)-CSDN博客 …

【数据结构】 并查集 + 路径压缩与按秩合并 python

目录 前言模板朴素实现路径压缩按秩合并按树高为秩按节点数为秩 总结 前言 并查集的基本实现通常使用森林来表示不同的集合,每个集合用一棵树表示,树的每个节点有一个指向其父节点的指针。 如果一个节点是它自己的父节点,那么它就是该集合的代…

【深度学习入门_机器学习理论】K近邻法(KNN)

本部分主要为机器学习理论入门_K近邻法(KNN),书籍参考 “ 统计学习方法(第二版)”。 学习目标: 了解k近邻算法的基本概念、原理、应用;熟悉k近邻算法重要影响要素;熟悉kd树原理与优化应用。 开始本算法之…

深入理解 SQL 中的子查询

文章目录 一、什么是子查询二、子查询的基本语法三、数据准备四、子查询的分类4.1 标量子查询4.2 单行子查询4.3 多行子查询4.4 关联子查询 五、子查询的应用场景5.1 子查询与 WHERE 子句5.2 子查询与 SELECT 子句5.3 子查询与 FROM 子句 六、性能优化与注意事项 本文将深入探讨…

Zookeeper入门部署(单点与集群)

本篇文章基于docker方式部署zookeeper集群,请先安装docker 目录 1. docker初期准备 2.启动zookeeper 2.1 单点部署 2.2 集群部署 3. Linux脚本实现快速切换启动关闭 1. docker初期准备 拉取zookeeper镜像 docker pull zookeeper:3.5.6 如果拉取时间过长&#xf…

【SpringBoot教程】Spring Boot + MySQL + HikariCP 连接池整合教程

🙋大家好!我是毛毛张! 🌈个人首页: 神马都会亿点点的毛毛张 在前面一篇文章中毛毛张介绍了SpringBoot中数据源与数据库连接池相关概念,今天毛毛张要分享的是关于SpringBoot整合HicariCP连接池相关知识点以及底层源码…

SCRM在企业私域流量与客户管理中的变革之路探索

内容概要 在当今数字化高速发展的时代,SCRM(社交客户关系管理)作为一种新的管理工具,正逐渐成为企业私域流量管理和客户关系维护的重要基石。它不仅仅是一种软件工具,更是一种整合客户数据和关系管理的全新思维方式。…

实战 | 域环境下通过anydesk进入生产网

视频教程在我主页简介或专栏里 目录: 前言 外网突破 资产扫描与常规漏洞 经典的MS17010漏洞利用: 网络通信设备弱口令: 安全防护设备集群: 域环境渗透 核心生产网渗透 总结 教程下载链接:zkanzz 话不多说&#x…

卡特兰数学习

1,概念 卡特兰数(英语:Catalan number),又称卡塔兰数,明安图数。是组合数学中一种常出现于各种计数问题中的数列。它在不同的计数问题中频繁出现。 2,公式 卡特兰数的递推公式为:f(…

算法刷题Day28:BM66 最长公共子串

题目链接,点击跳转 题目描述: 解题思路: 方法一:暴力枚举 遍历str1的每个字符x,并在str2中寻找以相同元素x为起始的最长字符串。记录最长的公共子串及其长度。 代码实现: def LCS(self, str1: str, st…

Open FPV VTX开源之ardupilot双OSD配置摄像头

Open FPV VTX开源之ardupilot双OSD配置 1 源由2. 分析3. 配置4. 解决办法5. 参考资料 1 源由 鉴于笔者这台Mark4 Copter已经具备一定的历史,目前机载了两个FPV摄像头: 模拟摄像头数字摄像头(OpenIPC) 测试场景: 从稳定性的角度&#xff1…

【Super Tilemap Editor使用详解】(十六):高级主题:深入理解 Super Tilemap Editor

在本节中,我们将深入探讨 Super Tilemap Editor 的工作原理,特别是图块地图(Tilemap)的渲染机制以及如何优化性能。这些知识将帮助你更好地理解工具的内部机制,并在开发中做出更明智的决策。 一、图块地图与图块渲染 图块地图是 Super Tilemap Editor 的核心组件之一。它由…

01学习预热篇(D6_正式踏入JVM深入学习前的铺垫)

目录 学习前言 一、虚拟机的结构 1. Java虚拟机参数设置 2. java 堆 3. 出入栈 4. 局部变量表 1> 局部变量的剖析 2> 局部变量的回收 5. 操作数栈 1> 常量入栈指令 2> 局部变量值转载到栈中指令 3> 将栈顶值保存到局部变量中指令 6. 帧数据区 7. 栈…

Node.js下载安装及环境配置教程 (详细版)

Node.js:是一个基于 Chrome V8 引擎的 JavaScript 运行时,用于构建可扩展的网络应用程序。Node.js 使用事件驱动、非阻塞 I/O 模型,使其非常适合构建实时应用程序。 Node.js 提供了一种轻量、高效、可扩展的方式来构建网络应用程序&#xff0…

SimpleFOC STM32教程10|基于STM32F103+CubeMX,速度闭环控制(有电流环)

导言 SimpleFOC STM32教程09|基于STM32F103CubeMX,ADC采样相电流 如上图所示, 增加了电流环. 效果如下: 20250123-200906 RTT 如上图所示,三相占空比依然是马鞍波。当我用手去给电机施加阻力时,PID要维持目标转速&am…

【超详细】ELK实现日志采集(日志文件、springboot服务项目)进行实时日志采集上报

本文章介绍,Logstash进行自动采集服务器日志文件,并手把手教你如何在springboot项目中配置logstash进行日志自动上报与日志自定义格式输出给logstash。kibana如何进行配置索引模式,可以在kibana中看到采集到的日志 日志流程 logfile-> l…