(2024,ViM,双向 SSM 骨干,序列建模)利用双向状态空间模型进行高效视觉表示学习
Vision Mamba: Efficient Visual Representation Learning with Bidirectional State Space Model
公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群)
目录
0.摘要
3. 方法
3.1. 基础知识
3.2. Vision Mamba
3.3. Vim 块
3.4. 架构细节
3.5. 效率分析
4. 实验
5. 结论与未来工作
0.摘要
最近,具有高效硬件感知设计的状态空间模型(state space models,SSMs),即 Mamba,展现出了在长序列建模方面的巨大潜力。仅基于 SSMs 构建高效通用的视觉骨干是一个吸引人的方向。然而,由于视觉数据的位置敏感性和对全局上下文进行视觉理解的要求,用 SSMs 表示视觉数据具有挑战性。在本文中,我们展示了视觉表示学习对自注意力的依赖并非必要,并提出了一种具有双向 Mamba 块(Vim)的新型通用视觉骨干,该骨干使用位置嵌入标记图像序列并用双向状态空间模型压缩视觉表示。在 ImageNet 分类、COCO 目标检测和 ADE20k 语义分割任务中,Vim相比于已经建立良好的视觉 Transformer(如 DeiT)实现了更高的性能,同时还显著提高了计算和内存效率。例如,Vim 在执行批量推理以提取分辨率为 1248×1248 的图像特征时比 DeiT 快 2.8倍,并节省 86.8% 的GPU内存。结果表明,Vim 能够克服对高分辨率图像执行 Transformer-style理解的计算和内存约束,有望成为视觉基础模型的下一代骨干。
代码: https://github.com/hustvl/Vim
源自经典的状态空间模型 [30],现代 SSM 擅长捕捉长程依赖关系,并受益于并行训练。它们在处理长序列时效率高,这是因为卷积计算和近似线性计算。最近的工作 Mamba [20] 将时变参数纳入SSM,并提出了一种硬件感知算法,以实现高效的训练和推理。Mamba 的卓越扩展性能表明它是语言建模中对 Transformer 的一种有希望的替代方案。然而,尚未探索基于纯 SSM 的通用视觉任务骨干。
3. 方法
3.1. 基础知识
基于 SSM 的模型(即结构化状态空间序列模型(structured state space sequence models,S4))和 Mamba 均受连续系统启发,通过隐藏状态 h(t) ∈ R^N 将一个一维函数或序列 x(t) ∈ R映射到 y(t) ∈ R。该系统使用 A ∈ R^(N×N) 作为演化参数,以及 B ∈ R^(N×1)、C ∈ R^(1×N) 作为投影参数。
S4 和 Mamba 是连续系统的离散版本,其中包括一个时间尺度参数 Δ,用于将连续参数 A、B 转换为离散参数 -A、-B。常用的转换方法是零阶保持(zero-order hold,ZOH),其定义如下:
在对 A、B 进行离散化之后,方程(1)可重新表述为使用步长 Δ 的离散化版本,可以写成:
最后,模型通过全局卷积计算输出。
其中,M 是输入序列 x 的长度,-K ∈ R^M 是一个结构化卷积核。
3.2. Vision Mamba
Vim 的概述如图 2 所示。标准 Mamba 设计用于 1 维序列。为了处理视觉任务,我们首先将 2 维图像 t ∈ R^(H×W×C) 转换为展平的 2 维块 x_p ∈ R^(J×(P^2·C)),其中(H,W)是输入图像的大小,C 是通道数,P 是图像块的大小。接下来,我们将 x_p 线性投影到大小为 D 的向量中,并添加位置嵌入E_pos ∈ R^((J+1)×D),如下所示:
其中,t^j_p 是 t 的第 j 个块,W ∈ R^((P^2·C)×D) 是可学习的投影矩阵。受到 ViT [14] 和 BERT [31] 的启发,我们还使用类别标记(class token)表示整个块序列,表示为 t_cls。然后,我们将标记序列 T_(l−1) 发送到 Vim 编码器的第 l 层,并得到输出 T_l。最后,我们对输出的类别标记 T^0_L进行归一化,并将其馈送到多层感知机(MLP)头部以获得最终的预测 ˆp,如下所示:
其中,Vim 是提出的 Vision Mamba 块,L 是层数,Norm 是归一化层。
3.3. Vim 块
原始的 Mamba 块设计用于 1 维序列,不适用于需要空间感知理解的视觉任务。在本节中,我们介绍 Vim 块,该块将双向序列建模纳入视觉任务中。Vim 块如图 2 所示。
具体而言,我们在 Algo. 1 中呈现了 Vim 块的操作。
- (1)首先,将输入的标记序列 T_(l−1) 通过归一化层进行归一化。
- (2-3)接下来,将归一化序列线性投影到维度为 E 的 x 和 z(注:对应于潜在 h)。
- (4)然后,我们从正向和反向方向处理 x。
- (5)对于每个方向,我们首先对 x 应用 1 维卷积,得到 x′_o。
- (6-8)然后,将 x′_o 线性投影到 B_o、C_o、Δ_o,分别得到 y_forward 和 y_backward。
- (9-10)Δ_o 然后用于转换 A_o、B_o。
- (11)最后,通过 SSM 计算 y_forward 和 y_backward。
- (13-16)y_forward 和 y_backward 然后由 z 进行门控,并相加得到输出的标记序列 T_l。
3.4. 架构细节
总体而言,我们架构的超参数如下所列:
- B:Batch?没找到具体说明
- M:输入序列 x 的长度,
- L:块的数量,
- D:隐藏状态维度,
- E:扩展状态维度,
- N:SSM 维度。
按照 ViT [14] 和 DeiT [61] 的做法,我们首先使用 16×16 的核大小投影层,以获得一个非重叠块嵌入的 1 维序列。随后,我们直接堆叠 L 个 Vim 块。默认情况下,我们将块的数量 L 设置为 24,SSM 维度 N 设置为 16。为了与 DeiT 系列的模型大小保持一致,我们将隐藏状态维度 D 设置为192,扩展状态维度 E 设置为 384,用于 tiny-size 变体。对于 small-size 变体,我们将 D 设置为384,E 设置为 768。
3.5. 效率分析
传统的基于 SSM 的方法利用快速傅里叶变换来提高卷积操作的效率,如 Eq.(4)所示。对于依赖于数据的方法,例如 Mamba,在 Algo.1 的第 11 行的 SSM 操作不再等同于卷积。为解决这个问题,Mamba 和提出的 Vim 选择了一种现代硬件友好的方式来确保效率。这种优化的关键思想是避免现代硬件加速器(GPU)的 IO 限制和内存限制。
IO 效率。高带宽内存(HBM)和静态随机存取存储器(SRAM)是 GPU 的两个重要组件。其中,SRAM 具有更大的带宽,而 HBM 具有更大的内存大小。Vim 的 SSM 操作的标准实现需要在HBM 上进行 O(BMEN) 数量级的内存 IO。受到 Mamba 的启发,Vim 首先从慢速的 HBM 读取O(BME + EN) 字节的内存(Δo, Ao, Bo, Co),并将其写入快速的 SRAM。然后,Vim 在 SRAM 中获取大小为 (B, M, E, N) 的离散 -Ao,-Bo。最后,Vim 在 SRAM 中执行 SSM 操作,并将大小为 (B, M, E) 的输出写回 HBM。这种方法有助于将 IO 的数量从 O(BMEN) 减少到 O(BME + EN)。
内存效率。为了避免内存不足的问题并在处理长序列时实现较低的内存使用,Vim 选择了与 Mamba 相同的重计算方法。对于中间状态的大小 (B, M, E, N) 以计算梯度,Vim 在网络反向传播时重新计算它们。对于中间激活,如激活函数和卷积的输出,Vim 也重新计算它们以优化 GPU 的内存需求,因为激活值占用大量内存,但重新计算速度快。
计算效率。Vim 块中的 SSM 操作(Algo.1 的第 11 行)和 Transformer 中的自注意力都在自适应地提供全局上下文方面发挥关键作用。给定一个视觉序列 T ∈ R^(1×M×D) 和默认设置 E = 2D,全局自注意力和 SSM 的计算复杂性分别为:
其中,自注意力对序列长度 M 是二次的,而 SSM 对序列长度 M 是线性的(N 是一个固定的参数,默认设置为 16)。计算效率使得 Vim 在具有大序列长度的千亿像素应用中具有可扩展性。
4. 实验
5. 结论与未来工作
我们提出了 Vision Mamba(Vim)来探索最近非常高效的状态空间模型,即 Mamba,作为通用的视觉骨干。与先前用于视觉任务的状态空间模型(使用混合体系结构或等效的全局 2D 卷积核)不同,Vim 以序列建模方式学习视觉表示,并且不引入图像特定的归纳偏差。由于提出的双向状态空间建模,Vim 实现了依赖于数据的全局视觉上下文,并享有与 Transformer 相同的建模能力,同时具有更低的计算复杂性。由于 Mamba 的硬件感知设计,Vim 在处理高分辨率图像时的推理速度和内存使用明显优于 ViTs。在标准计算机视觉基准测试上的实验结果验证了 Vim 的建模能力和高效性,表明 Vim 有望成为下一代视觉骨干。
在未来的工作中,具有位置嵌入的 Vim 和双向 SSM 建模适用于无监督任务,如掩蔽图像建模的预训练以及与 Mamba 相似的架构可用于多模态任务,如 CLIP 风格的预训练。基于预训练的 Vim 权重,探索 Vim 在分析高分辨率医学图像、遥感图像和长视频等可以视为下游任务的领域中的用途是非常直接的。
相关文章:

(2024,ViM,双向 SSM 骨干,序列建模)利用双向状态空间模型进行高效视觉表示学习
Vision Mamba: Efficient Visual Representation Learning with Bidirectional State Space Model 公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0.摘要 3. 方法 3.1. 基础知识 3.…...

docker容器和常用命令
1.什么是容器 容器是隔离的环境中运行的一个 进程 , 如果进程结束 , 容器就会停止. 细致: 容器的隔离环境 , 拥有自己的 ip 地址 , 系统文件 , 主机名 , 进程管理 , 相当于一个 mini的系统 2.容器 vs 虚拟机 3.Docker极速上手指南 #1.安装相关依赖. sudo yum install -y …...
【征服redis9】快速征服lua脚本
lua脚本,这个名字总让人想歪,不过老外发明名字,我们只能跟着叫了。这个脚本语言在redis里和Nginx里都有用,所以我们就来看一下。 目录 1 lua的介绍与说明 2 lua的基本语句体验 3.Lua的数据结构和高级特性 1 lua的介绍与说明 …...

vue3.2二次封装antd vue 中的Table组件,原有参数属性不变
vue3.2中的<script setup>语法 在项目中多处使用到表格组件,所以进行了一个基础的封装,主要是通过antd vue 中表格的slots配置项,通过配合插槽来进行封装自定义表格; 这次主要的一个功能是编辑之后变成input框 修改了之后变成完成发送请求重新渲染表格: 子…...
GBASE南大通用分享,如何修改可信上下文
在以下示例中,假设该可信上下文对象 appserver 存在并启用。以下的 ALTER TRUSTED CONTEXT 语句将 appserver 可信上下文对象的对象方式重置为 DISABLE。当其处于该方式时, appserver 可信上下文仍然存在,但是它不能用于存取数据库服务器。 …...

冻结Prompt微调LM: T5 PET (a)
T5 paper: 2019.10 Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer Task: Everything Prompt: 前缀式人工prompt Model: Encoder-Decoder Take Away: 加入前缀Prompt,所有NLP任务都可以转化为文本生成任务 T5论文的初衷如…...
119 BFS和DFS解二叉树的所有路径
问题描述:给定一个二叉树,返回所有从根节点到叶子节点的路径。说明:叶子节点是指没有子节点的节点。 DFS求解:定义一个全局的链表,用来装所有的结果,通过DFS遍历,一旦遍历到当前节点没有子节点…...
SpringBoot缓存相关注解的使用
CacheConfig:主要用于配置该类中会用到的一些共用的缓存配置 Cacheable:主要方法的返回值将被加入缓存。在查询时,会先从缓存中获取,若不存在才再发起对数据库的访问 CachePut:主要用于数据新增和修改操作 CacheEvi…...

SpiderFlow爬虫平台漏洞利用分析(CVE-2024-0195)
1. 漏洞介绍 SpiderFlow爬虫平台项目中spider-flow-web\src\main\java\org\spiderflow\controller\FunctionController.java文件的FunctionService.saveFunction函数调用了saveFunction函数,该调用了自定义函数validScript,该函数中用户能够控制 functi…...

计算机网络-甘晴void学习笔记
计算机网络 计科210X 甘晴void 202108010XXX 文章目录 计算机网络期中复习1计算机网络和因特网1.1 因特网1.2 网络边缘1.3 网络核心1.4 分组交换的时延/丢包和吞吐量1.5 协议层次与服务模型 2 应用层原理2.1 应用层协议原理2.2 Web和Http2.3 因特网中的电子邮件2.4 DNS&#x…...

vue中使用echarts实现省市地图绘制,根据数据在地图上显示柱状图信息,增加涟漪特效动画效果
文章目录 一、实现效果二、实现方法1、安装echarts插件2、获取省市json数据3、本例中data 数据4、吉林省地图的绘制5、柱状图样式6、设置柱状底部涟漪特效样式7、数据处理 三、示例代码已上传,去顶部可下载四、效果展示 一、实现效果 使用echarts实现省市地图绘制&…...

Android aar包集成与报错
Android Studio引用AAR的方式,分为gradle7.0之前与7.0之后 一、集成步骤 方法一: 1.将对应的xxx.aar包复制到项目的libs目录下(xxx代表需要引入的aar包名称) 2.然后在模块的build.gradle文件中配置implementation files(libs/lib…...

CentOS 7.9 安装图解
特特特别的说明 CentOS发行版已经不再适合应用于生产环境,客观条件不得不用的话,优选7.9版本,8.5版本次之,最次6.10版本(比如说Oracle 11GR2就建议在6版本上部署)! 引导和开始安装 选择倒计时结…...
Gitea Webhook报错 webhook.ALLOWED_HOST_LIST setting
Gitea Webhook报错 webhook.ALLOWED_HOST_LIST setting 登录到Gitea中,编辑app.ini vi /data/gitea/conf/app.ini [webhook] ALLOWED_HOST_LIST 你的IP地址示例 [webhook] ALLOWED_HOST_LIST 192.168.3.98...

SQL 最大连续合格次数 最大连胜记录次数 最大连败记录次数
有这样一个问题,工厂中要统计某个供应商送货检验的情况,依照其连续合格次数,决定是否免检,不使用游标或者循环,如何写这个sql。 此情景也可以用于统计连胜记录等 先要学习一下 窗函数LAG,指的是按分组和排…...
着色器语言GLSL学习
1 初步尝试 import { Scene, WebGLRenderer, OrthographicCamera, PlaneGeometry, ShaderMateria } from three.jsconst scene new Scene() const camera new OrthographicCamera(-1,1,1,-1,0.1, 10)const renderer new WebGLRenderer() renderer.setSize(window.innerWidt…...

C#: form 窗体的各种操作
说明:记录 C# form 窗体的各种操作 1. C# form 窗体居中显示 // 获取屏幕的宽度和高度 int screenWidth Screen.PrimaryScreen.Bounds.Width; int screenHeight Screen.PrimaryScreen.Bounds.Height;// 设置窗体的位置 this.StartPosition FormStartPosition.M…...

“尔滨”宠粉再升级!百亿像素VR冰雪盛宴
1月10日,由哈尔滨市委网信办、哈尔滨日报社主办,冰城客户端、哈尔滨新闻网承办的“激情迎亚冬,冰雪暖世界——2024年哈尔滨冰雪乐园”VR沉浸式体验产品正式上线。 如果你还没去过最近爆火出圈的“尔滨” ❄️这份哈尔滨冰雪景点VR❄️ 为你…...

redis原理(四)redis命令
目录 一、字符串命令: 二、列表命令: 三、集合命令: 四、散列命令: 五、有序集合命令: 六、redis发布与订阅命令: 七、事务命令 八、其他命令 1、排序:SORT 2、键的过期时间ÿ…...

FairGuard游戏安全2023年度报告
导 读:2023年,游戏行业摆脱了疫情带来诸多负面影响,国内游戏市场收入与用户规模双双实现突破,迎来了历史新高点。但游戏黑灰产规模也在迅速扩大,不少游戏饱受其侵扰,游戏厂商愈发重视游戏安全问题。 为帮助…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

Chrome 浏览器前端与客户端双向通信实战
Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...