论文阅读笔记: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.mzph.cn/pingmian/68379.shtml

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

相关文章

【文星索引】搜索引擎项目测试报告

目录 一、项目背景二、 项目功能2.1 数据收集与索引2.2 API搜索功能2.3 用户体验与界面设计2.4 性能优化与维护 三、测试报告3.1 功能测试3.2 界面测试3.3 性能测试3.4 兼容性测试3.5 自动化测试 四、测试总结4.1 功能测试方面4.2 性能测试方面4.3 用户界面测试方面 一、项目背…

DBO-高斯回归预测matlab

蜣螂优化算法(Dung Beetle Optimizer, DBO)是一种新型的群智能优化算法,在2022年底提出,主要是受蜣螂的的滚球、跳舞、觅食、偷窃和繁殖行为的启发。 本次研究使用的是 Excel 格式的股票预测数据。数据集按照 8:1:1 的比例&#x…

java后端之事务管理

Transactional注解:作用于业务层的方法、类、接口上,将当前方法交给spring进行事务管理,执行前开启事务,成功执行则提交事务,执行异常回滚事务 spring事务管理日志: 默认情况下,只有出现Runti…

【嵌入式】总结——Linux驱动开发(三)

鸽了半年,几乎全忘了,幸亏前面还有两篇总结。出于快速体验嵌入式linux的目的,本篇与前两篇一样,重点在于使用、快速体验,uboot、linux、根文件系统不作深入理解,能用就行。 重新梳理一下脉络,本…

RabbitMQ 多种安装模式

文章目录 前言一、Windows 安装 RabbitMq1、版本关系2、Erlang2.1、下载安装 Erlang 23.12.2、配置 Erlang 环境变量 3、RabbitMQ3.1、下载安装 RabbitMQ 3.8.93.2、环境变量3.3、启动RabbitMQ 管理插件3.3、RabbitMQ3.4、注意事项 二、安装docker1、更新系统包:2、…

使用python-docx包进行多文件word文字、字符批量替换

1、首先下载pycharm。 2、改为中文。 3、安装python-docx包。 搜索包名字,安装。 4、新建py文件,写程序。 from docx import Documentdef replace1(array1):# 替换词典(标签值按实际情况修改)dic {替换词1: array1[0], 替换…

Android中Service在新进程中的启动流程

目录 1、Service与AMS交互框架介绍 1.1、认识AMS代表IActivityManager 1.2、认识客户端代表IApplicationThread 2、Service启动流程概览 我们知道Android有四大组件,Activity、Service、ContentProvider、Broadcast,每个组件在系统运行中或者我们编写…

read+write实现:链表放到文件+文件数据放到链表 的功能

思路 一、 定义链表: 1 节点结构(数据int型) 2 链表操作(创建节点、插入节点、释放链表、打印链表)。 二、链表保存到文件 1打开文件 2遍历链表、写文件: 遍历链表,write()将节点数据写入文件。…

【景区导游——LCA】

题目 代码 #include <bits/stdc.h> using namespace std; using ll long long; const int N 1e5 10; const int M 2 * N; int p[N][18], d[N], a[N]; ll dis[N][18]; //注意这里要开long long int h[N], e[M], ne[M], idx, w[M]; int n, k; void add(int a, int b, …

二进制安卓清单 binary AndroidManifest - XCTF apk 逆向-2

XCTF 的 apk 逆向-2 题目 wp&#xff0c;这是一道反编译对抗题。 题目背景 AndroidManifest.xml 在开发时是文本 xml&#xff0c;在编译时会被 aapt 编译打包成为 binary xml。具体的格式可以参考稀土掘金 MindMac 做的类图&#xff08;2014&#xff09;&#xff0c;下面的博…

反向代理模块。。

1 概念 1.1 反向代理概念 反向代理是指以代理服务器来接收客户端的请求&#xff0c;然后将请求转发给内部网络上的服务器&#xff0c;将从服务器上得到的结果返回给客户端&#xff0c;此时代理服务器对外表现为一个反向代理服务器。 对于客户端来说&#xff0c;反向代理就相当于…

flink StreamGraph解析

Flink程序有三部分operation组成&#xff0c;分别是源source、转换transformation、目的地sink。这三部分构成DAG。 DAG首先生成的是StreamGraph。 用户代码在添加operation的时候会在env中缓存&#xff08;变量transformations&#xff09;&#xff0c;在env.execute()执行的…

WPS数据分析000010

基于数据透视表的内容 一、排序 手动调动 二、筛选 三、值显示方式 四、值汇总依据 五、布局和选项 不显示分类汇总 合并居中带标签的单元格 空单元格显示 六、显示报表筛选页

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.18 逻辑运算引擎:数组条件判断的智能法则

1.18 逻辑运算引擎&#xff1a;数组条件判断的智能法则 1.18.1 目录 #mermaid-svg-QAFjJvNdJ5P4IVbV {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-QAFjJvNdJ5P4IVbV .error-icon{fill:#552222;}#mermaid-svg-QAF…

Tensor 基本操作2 理解 tensor.max 操作,沿着给定的 dim 是什么意思 | PyTorch 深度学习实战

前一篇文章&#xff0c;Tensor 基本操作1 | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started 目录 Tensor 基本操作torch.max默认指定维度 Tensor 基本操作 torch.max torch.max 实现降维运算&#xff0c;基于指定的 d…

【ESP32】ESP-IDF开发 | WiFi开发 | UDP用户数据报协议 + UDP客户端和服务器例程

1. 简介 UDP协议&#xff08;User Datagram Protocol&#xff09;&#xff0c;全称用户数据报协议&#xff0c;它是一种面向非连接的协议&#xff0c;面向非连接指的是在正式通信前不必与对方先建立连接&#xff0c; 不管对方状态就直接发送。至于对方是否可以接收到这些数据内…

动手学深度学习-卷积神经网络-3填充和步幅

目录 填充 步幅 小结 在上一节的例子&#xff08;下图&#xff09; 中&#xff0c;输入的高度和宽度都为3&#xff0c;卷积核的高度和宽度都为2&#xff0c;生成的输出表征的维数为22。 正如我们在 上一节中所概括的那样&#xff0c;假设输入形状为nhnw&#xff0c;卷积核形…

Airflow:精通Airflow任务依赖

任务依赖关系是任何工作流管理系统的核心概念&#xff0c;Apache Airflow也不例外。它们确定在工作流中执行任务的顺序和条件&#xff0c;确保以正确的顺序完成任务&#xff0c;并确保在相关任务开始之前成功完成先决任务。在本文中我们将探讨Apache Airflow中的任务依赖关系&a…

【数据结构】_链表经典算法OJ:合并两个有序数组

目录 1. 题目描述及链接 2. 解题思路 3. 程序 3.1 第一版 3.2 第二版 1. 题目描述及链接 题目链接&#xff1a;21. 合并两个有序链表 - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 将两个升序链表合并为一个新的 升序 链表并返回。 新链表是通过拼接给…