VMamba: Visual State Space Model 论文总结

embedded/2024/9/24 1:06:04/

题目:VMamba: Visual State Space Model(视觉状态空间模型)

论文:[2401.10166] VMamba: Visual State Space Model (arxiv.org)

源码:https://arxiv.org/pdf/2401.10166 (github.com)

目录

一、摘要

二、引言

三、方法

3.1. Network Architecture

3.2. 2D-Selective-Scan for Vision Data (SS2D,2D 选择扫描)

VMamba%EF%BC%88%E5%8A%A0%E9%80%9F%20VMamba%EF%BC%89-toc" style="margin-left:80px;">3.3. Accelerating VMamba(加速 VMamba

四、实验


一、摘要

研究背景:在计算机视觉领域,设计计算效率高的网络架构一直是一种需要。

主要工作:本文将状态空间语言模型 Mamba 移植到 VMamba 中,VMamba 是一种线性时间复杂度的视觉骨干。

  • VMamba 的核心是 视觉状态空间(VSS)模块 的堆叠 和 2D选择性扫描 (SS2D) 模块
  • 通过沿4条扫描路线遍历,SS2D 有助于弥合 1D 选择性扫描的有序性质与 2D 视觉数据的非顺序结构之间的差距,有利于从不同来源和角度收集上下文信息。
  • 基于VSS模块,开发了一系列VMamba架构,并通过一系列架构和实现的增强来加速它们。

实验效果:广泛的实验展示了VMamba在各种视觉感知任务中的良好性能,突出了其与现有基准模型相比在输入缩放效率方面的优势。 

  

二、引言

ViT概述(优缺点): ViT通常在大规模数据上表现出上级的学习能力。然而,自注意的二次复杂性导致受限。在涉及大空间分辨率的下游任务中会引入了相当大的计算开销。

研究现状:为了应对这一挑战,许多方法已经做出了相当大的努力来提高注意力计算的效率。然而,现有的方法要么对有效感受野的大小施加限制,要么在不同的任务中经历明显的性能下降。

Mamba概述:最近,在自然语言处理(NLP)领域,Mamba 是一种新的状态空间模型(SSM),已经成为具有线性复杂度的长序列建模的一种非常有前途的方法。

研究问题:然而,Mamba的核心算法 —— 并行化选择扫描操作本质上是为处理一维序列数据而设计的。当试图将其用于处理视觉数据时,这提出了一个挑战,因为视觉数据天生缺乏视觉组件的顺序排列。

主要工作:为了解决这个问题,本文提出了一种 面向空间域遍历的四路扫描机制 SS2D (2D Selective Scan) 。与自注意力机制相比,SS2D 确保每个图像 patch 通过沿着相应的扫描路径计算的压缩隐藏状态独占地获得上下文知识,从而将计算复杂度从二次降低到线性。

实验效果:具体而言,在 ImageNet-1K 上,VMamba-Base 的准确率达到了83.9%,排在第一位,超过 Swin +0.4%,吞吐量大大超过 Swin 40%(646对458)。Vmamba 的优越性扩展到各种下游任务,其中 Vmamba-Tiny/Small/Base 在 COCO 上的目标检测中实现了 47.3%/48.7%/49.2% 的 mAP(1×训练计划)。这分别超过 Swin 4.6%/3.9%/2.3% 和 ConvNeXt 3.1%/3.3%/2.2% 的表现。对于 ADE20K 上的单尺度语义分割,VMamba-Tiny/Small/Base 实现了 47.9%/50.6%/51.0% mIoU,分别超过 Swin 3.4%/3.0%/2.9% 和 ConvNeXt 1.9%/1.9%/1.9% 。此外,基于 ViT 的模型的计算复杂性会随着输入 token 的数量呈二次增长,而与此不同,VMamba 在保持相当性能的同时,FLOP 呈线性增长。

主要贡献:

  • 提出了 VMamba,一个基于SSM的视觉骨干网络,用于具有 线性时间复杂度 的视觉表示学习。为了提高VMamba的推理速度,在体系结构设计和实现细节上进行了一系列改进。
  • 引入了 二维选择性扫描(SS2D)来弥补一维阵列扫描和二维平面遍历之间的差距,便于将选择性扫描扩展到处理视觉数据。
  • VMamba 在一系列视觉任务中表现出了良好的性能,包括图像分类、对象检测和语义分割。它还表现出对输入序列长度的显著适应性,显示出计算复杂度的线性增长。

   

三、方法

    

3.1. Network Architecture

流程输入图像 \mathrm{I \in R^{H \times W \times 3}} 首先被 stem模块分割成 patch,形成空间维度为 H/4 × W/4 的 2D 特征图。随后,采用多个网络阶段来创建 H/8 × W/8、H/16 × W/16 和 H/32 × W/32 分辨率的分层表示。每个阶段包括一个下采样层 (除了第一阶段),然后是 视觉状态空间(VSS)模块 的堆叠。(Stem模块 + 下采样层 + VSS模块)

VSS模块为了进一步提高计算效率,消除了整个乘法分支 (图中红色框),因为门控机制的效果是通过SS2D的选择性实现的。因此,得到的 VSS 模块 (如图(d)所示) 由带有两个残差模块的单个网络分支组成,模仿了普通Transformer模块的体系结构

    

3.2. 2D-Selective-Scan for Vision Data (SS2D,2D 选择扫描)

问题:虽然 S6 中的扫描操作的顺序性质与涉及时间数据的 NLP 任务很好地一致,但当应用于视觉数据时,其提出了显著的挑战,视觉数据本质上是非顺序的并且包含空间信息(例如,局部纹理和全局结构)。

解决方法:坚持选择性扫描方法进行输入处理,并提出了 2D 选择性扫描(SS2D)模块,以使 S6 适应视觉数据,而不损害其优势。

过程:给定输入数据,SS2D 首先 沿着四个不同的遍历路径 将输入 patch 展开为序列(即,交叉扫描),使用单独的S6模块并行地处理每个 patch 序列,并随后对所得到的序列进行整形和合并以形成输出图(即,交叉合并)。通过采用互补的1D遍历路径,SS2D 使得图像中的每个像素能够有效地整合来自不同方向上的所有其他像素的信息,从而有助于在2D空间中建立全局感受野

如下图所示,SS2D 中的 data forwarding (前向)包括三个步骤:cross-scan(交叉扫描)、selective scanning(基于S6模块的选择性扫描) 和 cross-merge(交叉合并)

   

VMamba%EF%BC%88%E5%8A%A0%E9%80%9F%20VMamba%EF%BC%89">3.3. Accelerating VMamba(加速 VMamba

 通过ImageNet-1 K上的图像分类来评估模型。每个渐进式改进的影响总结如下,其中(%,img/s)分别表示ImageNet-1 K上的 top-1准确度推理吞吐量 的增益。如下所示:

  • 步骤(a) (+0.0%,+41 img/s) 通过在 Triton 中重新实现 交叉扫描和交叉合并 
  • 步骤(b) (+0.0%,−3 img/s) 通过 调整 CUDA 实现的选择性扫描 ,以适应 float16 输入和 float32 输出。这显著提高了训练效率 (吞吐量从165到184),尽管在测试时速度略有波动。
  • 步骤(c) (+0.0%,+174 img/s) 将选择性扫描中相对缓慢的 einsum 替换为线性变换 (即torch.nn.function.linear)。采用 (B, C, H, W) 张量布局来消除不必要的数据排列。
  • 步骤(d) (−0.6%,+175 img/s) 由于其计算效率,将 MLP 引入 VMamba丢弃了DWConv层,并将层配置从 [2,2,9,2] 更改为 [2,2,2,2],以降低FLOPs。
  • 步骤(e) (+0.6%, +366 img/s) 丢弃整个乘法支路,并将参数 ssm-ratio(特征扩展因子) 从2.0降低到1.0。这允许层数提高到 [2,2,5,2],同时减少FLOPs。(证明所提出的VMamba的体系架构的有效性)
  • 步骤(f) (+0.3%, +161 img/s) 通过将 参数 d_state (SSM状态维度) 从16.0减少到1.0。这允许ssm-ratio提高到2.0,并引入DWConv层,而不会增加FLOPs。
  • 步骤(g) (+0.1%, +346 img/s) 将ssm-ratio降低到1.0,同时将层配置从[2,2,5,2]更改为[2,2,8,2]

     

四、实验


http://www.ppmy.cn/embedded/112552.html

相关文章

C sharp 学习 笔记

介绍 这篇文章是我学习C#语言的笔记 学的是哔哩哔哩刘铁锰老师2014年的课程 在学习C#之前已经学习过C语言了。看的是哔哩哔哩比特鹏哥的课程。他们讲的都很不错 正在更新, 大家可以在我的gitee仓库中下载笔记源文件、项目资料等 笔记源文件可以在Notion中导入…

C++设计模式

设计模式 设计模式分类 1)根据目的分为三类: 创建型,结构型和行为型; 创建型模式主要用于创建对象。结构型模式主要用于处理类或对象的组合。行为型模式主要用于描述对类或对象怎样交互和怎样分配职责。 2)根据范围…

敲击键盘到屏幕上打印字符计算机都做了什么

当你在 Linux 系统上按下键盘的 x 键并看到屏幕上打印出字母 x 时,Linux 系统内部发生了很多过事情,涉及硬件、操作系统内核和用户空间的多个层次。下面是一个大致的流程: 1. 硬件层 键盘硬件捕获按键:当你按下 x 键&#xff0c…

php 实现JWT

在 PHP 中,JSON Web Token (JWT) 是一种开放标准 (RFC 7519) 用于在各方之间作为 JSON 对象安全地传输信息。JWT 通常用于身份验证系统,如 OAuth2 或基于令牌的身份验证。 以下是一个基本的 PHP 实现 JWT 生成和验证的代码示例。 JWT 的组成部分 JWT …

[数据集][目标检测]高铁受电弓检测数据集VOC+YOLO格式1245张2类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1245 标注数量(xml文件个数):1245 标注数量(txt文件个数):1245 标注…

\section*{References}为什么需要加*

在 LaTeX 中,\section 命令用于创建带有编号的章节标题,比如 “1. Introduction”, “2. Methods” 等。而 \section* 则是创建一个不带编号的章节标题。 为什么需要加 *? 当你使用 \section*{References} 时,添加 * 表示这是一…

国内人工智能产业发展现状及对策研究

一、引言 人工智能作为新时代科技革命和产业变革的核心力量,正深刻改变着全球经济格局。我国政府高度重视人工智能产业发展,将其列为国家战略性新兴产业。在此背景下,本文旨在分析我国人工智能产业发展现状,探讨面临的挑战&#x…

C++ | Leetcode C++题解之第409题最长回文串

题目&#xff1a; 题解&#xff1a; class Solution { public:int longestPalindrome(string s) {unordered_map<char, int> count;int ans 0;for (char c : s)count[c];for (auto p : count) {int v p.second;ans v / 2 * 2;if (v % 2 1 and ans % 2 0)ans;}retur…