17、论文阅读:VMamba:视觉状态空间模型
前言
设计计算效率高的网络架构在计算机视觉领域仍然是一个持续的需求。在本文中,我们将一种状态空间语言模型 Mamba 移植到 VMamba 中,构建出一个具有线性时间复杂度的视觉主干网络。VMamba 的核心是一组视觉状态空间 (VSS) 块,搭配 2D 选择性扫描 (SS2D) 模块。通过沿四条扫描路径遍历,SS2D 帮助弥合一维选择性扫描的有序特性与二维视觉数据的非顺序结构之间的差距,从而便于从不同来源和视角收集上下文信息。基于 VSS 块,我们开发了一系列 VMamba 架构,并通过一系列架构和实现上的优化来加速其运算。大量实验证明了 VMamba 在各种视觉感知任务中的优异表现,尤其在输入规模的效率方面,相较于现有的基准模型显示出显著优势。代码链接
介绍
视觉表示学习是计算机视觉中的一个基础研究领域,随着深度学习的兴起,该领域取得了显著进展。为了表示视觉数据中的复杂模式,提出了两类主要的主干网络,即卷积神经网络 (CNN) 和视觉 Transformer (ViTs),并在多种视觉任务中得到了广泛应用。相比于 CNN,ViTs 由于融合了自注意力机制,通常在大规模数据上的学习能力更强。然而,自注意力机制对于标记数的二次复杂度在处理具有大空间分辨率的下游任务时带来了巨大的计算开销。
为应对这一挑战,已有大量研究致力于提升注意力计算的效率。然而,现有方法要么限制了有效感受野的大小,要么在多任务中表现出明显的性能下降。这促使我们开发一种新的视觉数据架构,保留原始自注意力机制的固有优势,即全局感受野和动态权重参数。
最近,在自然语言处理 (NLP) 领域中,Mamba 作为一种新颖的状态空间模型 (SSM) 出现,为长序列建模提供了一种具有线性复杂度的高效方法。受此进展的启发,我们提出了 VMamba,一种集成基于 SSM 模块的视觉主干网络,用于高效的视觉表示学习。然而,Mamba 的核心算法,即并行化的选择性扫描操作,主要用于处理一维序列数据。当将其应用于视觉数据时遇到挑战,因为视觉数据本质上缺乏顺序排列的组件结构。为了解决这一问题,我们提出了二维选择性扫描 (SS2D) 模块,一种为空间域遍历而设计的四向扫描机制。与自注意力机制相比,SS2D 确保每个图像块仅通过沿相应扫描路径计算的压缩隐藏状态获得上下文信息,从而将计算复杂度从二次降低为线性。
基于 VSS 块,我们开发了一系列 VMamba 架构(即 VMamba-Tiny/Small/Base),并通过一系列架构优化和实现上的改进来加速其运行。与基于 CNN(ConvNeXt)、ViT(Swin 和 HiViT)和 SSM(S4ND 和 Vim)构建的基准视觉模型相比,VMamba 在 ImageNet-1K 上各个模型规模的图像分类准确率均优于基准模型。具体而言,VMamba-Base 达到了 83.9% 的 top-1 准确率,比 Swin 提高了 0.4%,吞吐量也大幅领先 Swin 超过 40%(646 vs. 458)。VMamba 在多种下游任务中表现优越,其中 VMamba-Tiny/Small/Base 在 COCO 上的目标检测(1× 训练)中达到了 47.3%/48.7%/49.2% 的 mAP,分别超越 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 模型在输入标记数增加时复杂度呈二次增长不同,VMamba 在保持类似性能的同时实现了 FLOPs 的线性增长,展现了其在输入规模扩展方面的先进性。
本研究的贡献总结如下:
- 我们提出了 VMamba,这是一种基于 SSM 的视觉主干网络,用于视觉表示学习,并具有线性时间复杂度。通过一系列架构设计和实现细节上的改进,提高了 VMamba 的推理速度。
- 我们引入了二维选择性扫描 (SS2D) 模块,以弥合一维数组扫描与二维平面遍历之间的差距,使得选择性 SSM 能够扩展到视觉数据处理。
- 在没有额外技巧的情况下,VMamba 在图像分类、目标检测和语义分割等多种视觉任务中表现出色。同时,它在输入序列长度方面展示了显著的适应性,实现了计算复杂度的线性增长。
相关工作
卷积神经网络 (CNNs)。自 AlexNet 起,大量研究致力于提升 CNN 模型在多种视觉任务中的建模能力和计算效率。提出了更复杂的算子,例如深度卷积和可变形卷积,以增强 CNN 的灵活性和效果。近期,受 Transformer 成功的启发,现代 CNN 通过引入长距离依赖关系和动态权重,在架构设计中表现出色。
视觉 Transformer (ViTs)。作为代表性开创性工作,ViT 探讨了基于原始 Transformer 架构的视觉模型的有效性,揭示了大规模预训练对图像分类性能提升的重要性。为减少 ViT 对超大数据集的依赖,DeiT 引入了教师-学生蒸馏策略,将 CNN 模型中的知识迁移至 ViTs,强调了感知中的归纳偏置的重要性。沿此思路,后续研究提出了层次化 ViTs。
另一研究方向专注于提升自注意力机制的计算效率,这是 ViTs 的核心。通过将自注意力表示为核特征映射的线性点积,线性注意力利用矩阵乘法的结合性来将计算复杂度从二次降为线性。GLA 进一步提出了硬件高效的线性注意力变体,平衡了内存移动与并行化的关系。RWKV 也利用线性注意力机制结合了 Transformer 的可并行训练与 RNN 的高效推理。RetNet 通过添加门控机制提供了并行化计算路径,而 RMT 则将时间衰减机制引入空间域以增强视觉表示学习。
状态空间模型 (SSMs)。尽管 ViT 架构在视觉任务中得到了广泛应用,自注意力的二次复杂度在处理长输入序列(如高分辨率图像)时带来了挑战。为提升扩展效率,SSMs 作为 Transformer 的替代方案引起了研究界的关注。Gu 等人展示了基于 SSM 的模型在长程依赖处理方面的潜力,通过 HiPPO 初始化实现了这一点。为了提高实际可行性,S4 提出了将参数矩阵规范化为对角结构。随后,出现了各种结构化 SSM 模型,分别引入了不同的架构改进,包括复对角结构、多输入多输出支持、对角加低秩操作的分解以及选择机制。这些进展也被集成到更大的表示模型中,进一步展示了结构化状态空间模型在各种应用中的多样性和可扩展性。尽管这些模型主要集中在将 SSM 应用于文本和语音等长序列数据,但关于将 SSM 应用于具有二维结构的视觉数据的探索仍然有限。
准备工作



VMamba:视觉状态空间模型
网络架构


视觉数据的 2D 选择性扫描 (SS2D)
尽管 S6 中扫描操作的顺序性非常适合处理涉及时间数据的 NLP 任务,但在应用于视觉数据时却带来了很大挑战,因为视觉数据本质上是非顺序的,并包含空间信息(例如局部纹理和全局结构)。为了解决此问题,S4ND [45] 通过卷积操作重新定义了 SSM,将核从 1D 直接扩展到 2D,通过外积实现。然而,这种修改导致权重不再与输入无关,从而限制了对上下文信息的捕捉能力。因此,我们仍采用选择性扫描方法 [17] 来处理输入,并提出二维选择性扫描 (SS2D) 模块,以适应视觉数据的 S6,同时保持其优势。
如图 2 所示,SS2D 的数据传递包括三个步骤:交叉扫描、使用 S6 块的选择性扫描和交叉合并。对于给定的输入数据,SS2D 首先沿四条不同的遍历路径展开输入块序列(即交叉扫描),然后并行地使用单独的 S6 块处理每个块序列,最后将结果序列重新整形并合并形成输出图(即交叉合并)。通过采用互补的一维遍历路径,SS2D 使图像中的每个像素能够有效地从不同方向整合所有其他像素的信息,从而在二维空间中建立全局感受野。
加速 VMamba

实验
相关文章:
17、论文阅读:VMamba:视觉状态空间模型
前言 设计计算效率高的网络架构在计算机视觉领域仍然是一个持续的需求。在本文中,我们将一种状态空间语言模型 Mamba 移植到 VMamba 中,构建出一个具有线性时间复杂度的视觉主干网络。VMamba 的核心是一组视觉状态空间 (VSS) 块,搭配 2D 选择…...
GPT-5 一年后发布?对此你有何期待?
GPT-5 一年后发布?对此你有何期待? 在最新技术的洪流中,GPT-5即将登场。你是否在思考,它将为我们的生活和工作带来哪些变革?接下来的探索,或许可以启发你对未来的想象。让我们一起深入这场关于未来AI语言模…...
2024中国国际数字经济博览会:图为科技携明星产品引领数智化潮流
10月24日,全球数智化领域的目光齐聚于中国石家庄正定,一场关于数字经济未来的盛会—2024中国国际数字经济博览会在此拉开帷幕。 云边端算力底座的领航者,图为科技携其明星产品惊艳亮相,期待与您共赴一场数智化的非凡之旅ÿ…...
大模型面试题:常见的微调方法有哪些说下原理并对比
更多实时面试题总结请关注我的公众号"算法狗" 或移步至 https://pica.zhimg.com/80/v2-7fd6e77f69aa02c34ca8c334870b3bcd_720w.webp?sourced16d100b 这里说的微调主要是指参数微调,参数微调的方法主要有以下几种: Adapter 在预训练模型每一层…...
CentOS 9 Stream 上安装 PostgreSQL 16
CentOS 9 Stream 上安装 PostgreSQL 16 CentOS 9 Stream 上安装 PostgreSQL 16设置密码并且远程连接 CentOS 9 Stream 上安装 PostgreSQL 16 在 CentOS 9 Stream 上安装 PostgreSQL 16 可以通过以下步骤完成: 添加 PostgreSQL 官方仓库: PostgreSQL 提…...
【数据分享】1901-2023年我国省市县镇四级的逐年最高气温数据(免费获取/Shp/Excel格式)
之前我们分享过1901-2023年1km分辨率逐月最高气温栅格数据和Excel和Shp格式的省市县镇四级逐月最高气温数据,原始的逐月最高气温栅格数据来源于彭守璋学者在国家青藏高原科学数据中心平台上分享的数据!基于逐月数据我们采用求年平均值的方法得到逐年最高…...
使用C++和QT开发应用程序入门以及开发实例分享
目录 1、搭建开发环境(VS2010和QT4.8.2) 2、创建一个QT窗口 3、在QT窗口中添加子窗口 4、QT界面布局 5、QT信号(SIGNAL)和槽(SLOT) 6、最后 C软件异常排查从入门到精通系列教程(专栏文章列…...
Openlayers高级交互(20/20):超级数据聚合,页面不再混乱
本示例在vue+openlayers中使用cluster生成聚合数据的效果。在OpenLayers中实现点聚合(clustering)是一个常见的需求,特别是在处理大量地理数据点时。聚合可以提高地图的性能并减少视觉上的混乱。 一、示例效果图 专栏名称内容介绍Openlayers基础实战 (72篇)专栏提供73篇文…...
qt QStandardItemModel详解
1、概述 QStandardItemModel是Qt框架中提供的一个基于项的模型类,用于存储和管理数据,这些数据可以以表格的形式展示在视图控件(如QTableView、QTreeView等)中。QStandardItemModel支持丰富的数据操作,包括添加、删除…...
光伏设计软件如何快速上手?
光伏设计软件是现代光伏系统设计不可或缺的工具,它们大大简化了设计流程,提高了设计效率。对于新手来说,快速上手一款光伏设计软件可能会显得有些困难,但只要掌握了一些基础操作,就能迅速提升设计技能。 1、导入CAD图片…...
Mac下安装Apache JMeter并启动
一、下载JMeter https://jmeter.apache.org/download_jmeter.cgi 下载好对应的压缩包,解压后即可,并将解压后的文件夹放至自己想要存放的位置。 二、启动JMeter 进入解压后的文件夹下的bin目录cd /usr/local/apache-jmeter-5.6.3/bin配置语言vim jmet…...
L6.【LeetCode笔记】合并两个有序链表
1.题目 https://leetcode.cn/problems/merge-two-sorted-lists/ 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3,4,4]示例 2&…...
讲解Golang选择语句
Golang选择语句 1. if 语句1.1 基本语法1.2 if-else 语句1.3 if-else if-else 语句1.4 简短声明和初始化1.5 多个条件的逻辑运算 2. switch 语句2.1 基本语法2.2 示例2.3 switch 语句与 if 的对比2.4 不指定表达式2.5 fallthrough 语句2.6 case 支持多个值 3. 总结 Go语言中的选…...
练习LabVIEW第四十一题
学习目标: 编写一个程序测试自己在程序前面板上输入一段文字“CSDN是一个优秀的网站”所用的时间。 开始编写: 前面板放置一个数值显示控件,程序框图添加顺序结构共三帧,第一帧放一个获取日期/时间(秒)函…...
应对AI与机器学习的安全与授权管理新挑战,CodeMeter不断创新引领保护方案
人工智能(AI)和机器学习(ML)技术正在快速发展,逐渐应用到全球各类主流系统、设备及关键应用场景中,尤其是在政府、商业和工业组织不断加深互联的情况下,AI和ML技术的影响日益广泛。虽然AI技术的…...
【2024最新版Kotlin教程】Kotlin第一行代码系列第五课-类继承,抽象类,接口
【2024最新版Kotlin教程】Kotlin第一行代码系列第五课-类继承,抽象类,接口 为什么要有继承呢,现实中也是有继承的,对吧,你继承你爸的遗产,比如你爸建好了一个房子,儿子继承爸,就得了…...
虚拟现实和增强现实技术,如何打造沉浸式体验?
内容概要 在这个科技飞速发展的时代,虚拟现实(VR)与增强现实(AR)技术的结合就像调皮的小精灵,一下子把我们的生活变得神奇又有趣。想象一下,你正在游戏中与精灵搏斗,突然间身边的客…...
ChatGPT任务设计和微调策略的优化
目录 ChatGPT任务设计和微调策略的优化 一、GPT-3的基础 二、任务设计和微调策略的优化 三、基于人类反馈的强化学习(RLHF) 举例 完全注意力机制的自回归解码器网络 一、定义与原理 二、举例说明 ChatGPT任务设计和微调策略的优化 ChatGPT确实是从GPT-3开始,通过任…...
通过 SSH 连接远程 Ubuntu 服务器
目录 安装 SSH 服务器允许 SSH 通过防火墙远程 SSH 连接(选)重启向日葵 安装 SSH 服务器 更新软件包列表 sudo apt update安装 OpenSSH 服务器 sudo apt install openssh-server检查 SSH 服务器状态 sudo systemctl status ssh如果 SSH 服务器正在运…...
Perl 环境安装
Perl 环境安装 Perl 是一种广泛使用的高级、通用、解释型、动态编程语言。它最初由 Larry Wall 在 1987 年设计,现在由 Perl 5 和 Perl 6 两个主要版本组成。Perl 适合于多种编程任务,包括系统管理、Web 开发、网络编程、游戏开发等。在开始使用 Perl 进行编程之前,您需要在…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
【堆垛策略】设计方法
堆垛策略的设计是积木堆叠系统的核心,直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法,涵盖基础规则、优化算法和容错机制: 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则: 大尺寸/重量积木在下…...
全面解析数据库:从基础概念到前沿应用
在数字化时代,数据已成为企业和社会发展的核心资产,而数据库作为存储、管理和处理数据的关键工具,在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理,到社交网络的用户数据存储,再到金融行业的交易记录处理&a…...
【WebSocket】SpringBoot项目中使用WebSocket
1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖,添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...
