首页 > 其他分享 >【论文阅读】Vision Mamba:双向状态空间模型的的高效视觉表示学习

【论文阅读】Vision Mamba:双向状态空间模型的的高效视觉表示学习

时间:2024-03-14 22:59:55浏览次数:31  
标签:双向 Vim SSM 视觉 序列 Mamba Vision

文章目录


论文地址:
Vision Mamba

Vision Mamba:双向状态空间模型的的高效视觉表示学习

摘要

在这篇文章,我们展示对于视觉表示学习,不再依赖自注意力,提出一个新的泛用的视觉backbone基于双向Mamba块,通过位置嵌入来标示图片序列,通过双向状态空间模型压缩视觉表示。结果表示,Vim有能力解决在高分辨率图片上应用tranformer类型所导致计算和存储限制,有潜力成为下一代视觉基础模型的backbone。

介绍

最近的工作,Mamba引入时变参数到SSMM而且提出一个硬件感知算法以保持其高效训练和推断,Mamba优秀的缩放表现表明在语言建模是Transformer的有前景的替代。
然而,纯基于SSM的主干网络还没有被探索用于处理视觉数据,例如图片和视频。

相比于卷积神经网络,ViT的核心优势是ViT可以为每张图片切片提供数据\切片依赖的全局上下文信息通过自注意力。不同于卷积核对于所有的位置应用相同的参数。另一个优势是模态不可知建模通过将一张图片当作一系列切片而没有引入2D归纳偏置,使其更适应多模态应用。在同事,Transformer的自注意力机制导致了速度和内存使用的挑战,在处理长距离视觉依赖,例如处理高分辨率图片时。

然而,Mamba有两个主要的挑战,即单向建模和缺乏位置感知。为了解决这些挑战,我们提出了视觉Mamba模型,它结合了用于数据相关的全局视觉上下文建模的双向SSM和用于位置感知视觉识别的位置嵌入。我们首先将输入图片切分为块然后线性映射它们为向量输入Vim。图片块在Vim块中作为序列信息被处理,通过提出的双向选择状态空间模型高效压缩视觉表示。更进一步,Vim块的位置嵌入提供了空间信息的感知,使得Vim对于密集预测任务更加鲁棒。在当前阶段,我们使用ImageNet数据集在有监督图片分类任务上训练Vim模型,之后将预训练Vim作为backbone,为下游密集预测任务即语义分割,目标检测和实例分割实现序列视觉表示学习。如同Transformer,Vim可以在大规模无监督视觉数据集上预训练以获得更好的视觉表示。得益于Mamba更好的效率,Vim可以以更低的计算代价实现。

相比于其他为视觉任务设计的基于SSM模型,Vim是一个纯SSM方法并且以序列风格建模,对于通用高效的backbone来说更有前景。

我们主要的贡献总结如下:

  • 我们提出了视觉Mamba(Vim)结合数据依赖的全局上下文建模的双向SSM和位置感知视觉理解的位置嵌入结合。
  • 不需要attention。
  • 我们在ImageNet分类和密集预测下游任务上完成了大量的实验,展示相比于大家接受和高度优化的plain视觉Transformer例如DeiT的优越性。

相关工作

用于视觉应用的状态空间模型

Long movie clip classification with state-space video models.

使用1D S4处理视频分类的长距离时序依赖

S4nd: ´ Modeling images and videos as multidimensional signals with state spaces.

更近一步拓展1D S4来处理多维数据包括2D图片和3D视频。

Efficient movie scene detection using state-space transformers

结合了S4和自注意力的优势建造了TranS4mer模型,在视频场景检测取得SOTA

Selective structured state-spaces for long-form video understanding

为S4提出了一种新的选择机制,大大提升了S4在长格式视频理解中的表现

Diffusion models without attention

抛弃了注意力机制,使用一个更可缩放的基于SSM的backbone来生成高分辨率图像和在可负担的计算条件下处理细粒度表达。

U-mamba: Enhancing long-range dependency for biomedical image segmentation.

提出了U-Mamba,一个混合CNN-SSM结构,在生物医学图像上处理长距离依赖。

上述的工作要么是应用SSM到特定的视觉应用或者建立一个结合SSM和卷积或注意力的混合结构。和它们不同,我们建立了一个纯-SSM模型,可以作为一个通用视觉backbone

方法

准备

基于SSM的模型即状态空间序列模型(S4)和Mamba受连续系统启发。这一部分介绍和离散化参见

【论文翻译】Mamba 中的状态空间模型背景-CSDN博客

【论文翻译】MODELING SEQUENCES WITH STRUCTURED STATE SPACES 附录A.1-CSDN博客

视觉Mamba

图二展示了Vim的概览,标准的Mamba是为1-D序列设计的。为了处理视觉任务,我们首先将2-D图像 t ∈ R H × W × C t\in \mathbb R^{H\times W\times C} t∈RH×W×C到展平的2-D切块 x p ∈ R J × ( P 2 ⋅ C ) x_p\in{\mathbb{R}^{J\times(P^{2}\cdot C)}} xp​∈RJ×(P2⋅C),其中 ( H , W ) (H,W) (H,W)是输入图像的尺寸, C C C是通道的数量, P P P是图片切片的尺寸。接着,我们将 x p x_p xp​象形映射为一个长度D的向量

并加入位置嵌入 E p o s ∈ R J + 1 × D E_{pos} \in \mathbb{R}^{J+1\times D} Epos​∈RJ+1×D如下:
T 0 = [ t c l s ; t p 1 W ; t p 2 W ; t p J W ] + E p o s T_0 = [t_{cls};t_p^1W;t_p^2W;t_p^JW]+E_{pos} T0​=[tcls​;tp1​W;tp2​W;tpJ​W]+Epos​
其中 t p j t_p^j tpj​是 t t t的第 j j j个切片, W ∈ R P 2 ⋅ C × D W\in \mathbb{R}^{P^2\cdot C \times D} W∈RP2⋅C×D是可学习的映射矩阵。受ViT和BERT启发,我们也是用类别token表示整个patch序列,表示为 t c l s t_cls tc​ls。我们之后将token序列 T l − 1 T_{l -1} Tl−1​送入Vim编码器第 l l l层,然后得到输出 T l T_l Tl​。最后,我们归一化输出类token T L 0 T^{0}_{L} TL0​并将其送入MLP得到最后的预测 p ^ \hat{p} p^​如下:
T i = V i m ( T l − 1 ) , f = N o r m ( T L 0 ) . p ^ = M L P ( f ) T_i = Vim(T_{l-1}),\\ f = Norm(T_{L}^{0}).\\ \hat{p} = MLP(f) Ti​=Vim(Tl−1​),f=Norm(TL0​).p^​=MLP(f)
Vim是提出的视觉mamba块, L L L是层的数目, N o r m Norm Norm是归一化层

Vim块

原始的Mamba块是为1-D序列设计的,并不适宜用于需要空间感知理的解视觉任务。在这个部分,我们提出里Vim块,包含为视觉任务设计的双向序列建模。Vim块如图二

在这里插入图片描述

特别的,我们在算法31展示了Vim块的操作。输入token序列 T l − 1 T_{l-1} Tl−1​首先被归一化层归一化。接着我们以E维度线性投影归一化序列到x和z。之后我们从前向和后向方向处理x。对于每个方向,我们首先在x应用1-D卷积得到 x o ′ x_{o}^{'} xo′​。我们接着线性投影 x o ′ x_{o}^{'} xo′​到 B o , C o , Δ o B_o, C_o,\Delta_o Bo​,Co​,Δo​, Δ o \Delta_o Δo​被用于变换 A ‾ o , B ‾ o \overline{A}_o,\overline{B}_o Ao​,Bo​。最后我们通过SSM计算 y f o r w a r d y_{forward} yforward​和 y b a c k w a r d y_{backward} ybackward​之后被变量z门控,并相加得到输出的token序列 T 1 T_1 T1​

在这里插入图片描述

结构细节

总结,我们结构的超参数如下:

L:块的数目

D:隐藏状态的维度

E:扩展的状态维度

N:SSM维度

追随ViT和DeiT,我们首先应用一个16x16的映射层得到一个无重叠的切块嵌入的1-D序列。之后,我们直接堆叠 L L L个Vim块。在默认情况下,我们将 L L L设置为24,SSM维度 N N N为16。来对齐DeiT系列的模型大小,对于tiny变种我们将隐藏状态模型D设置为192并且将扩展状态维度 E E E设置为384。对于small变种我们将隐藏状态模型D设置为384并且将扩展状态维度 E E E​设置为768.

高效分析

传统的基于SSM的方法应用了快速傅里叶变换来加快等式4所示的卷积操作。遂于数据依赖的方法,例如Mamba,SSM操作不再等价于卷积。为了解决这个问题,Mamba和我们提出的Vim选择一个现代硬件友好的方式确保高效。这个优化的关键想法在于避免IO和存储限制。

计算效率

Vim块中的SSM和Transformer中的自注意力都在自适应提供全局上下文中扮演关键角色。给定一个视觉序列 T ∈ R 1 × M × D T\in R^{1\times M\times D} T∈R1×M×D和默认设置 E = 2 D E = 2D E=2D,自注意力和SSM的计算复杂度为:
Ω ( s e l f − a t t e n t i o n ) = 4 M D 2 + w M 2 D Ω ( S S M ) = 3 M ( 2 D ) N + M ( 2 D ) N \Omega(self-attention) = 4MD^2+wM^2D\\ \Omega(SSM) = 3M(2D)N+M(2D)N Ω(self−attention)=4MD2+wM2DΩ(SSM)=3M(2D)N+M(2D)N

实验

图片分类

在这里插入图片描述

语义分割

在这里插入图片描述

目标检测和实例分割

在这里插入图片描述

得益于SSM相对于序列长度的线性复杂度,在输入分辨率提高的情况下,其相对于平方复杂度的Transformer类模型会展现出极大优势。

消融实验

双向SSM

在这里插入图片描述

为了全面评估在ImageNet上学习到的表达能力,我们使用一个简单的只有两层的Segmenter头来实现在语义分割上的迁移学习。我们研究了这些双向策略:

  • None。我们直接采用Mamba block的前向方向来处理视觉序列
  • 双向序列。在训练过程中,我们随机翻转视觉序列,类似于数据增强。
  • 双向块。我们将堆叠块配对。每对的第一个块以前向方向处理视觉视觉序列,第二个块以后向方向处理视觉序列
  • 双向SSM,对于每个块我们添加了额外的SSM来以后向方向处理视觉序列
  • 双向SSM+Conv1d。基于双向SSM,我们进一步在后向SSM前增加了后向Conv1d

如表4所示,直接应用Mamba块在分类中取得了良好的表现。然而,其不自然的非方向性的方式为下游密集预测任务造成了挑战。特别是,原始的使用双向块的双向策略在分类上低了2.3个点,但相比于原始的无方向性Mamba块在语义分割上提升了1.3mIoU。通过加入二外的后向SSM和Conv1d,我们实现了更好的分类准确性和巨大的分类提升。我们使用双向SSM+Conv1d作为Vim块的默认设置。

分类设计

在这里插入图片描述

我们在Vim的分类设计上进行了消融实验。我们研究论下列分类策略:

  • 平均池化
  • 最大池化 我们首先在视觉序列中的每个token上调整分类头,接着在需略上应用最大池化得到预测结果
  • 头类别token 跟随DeiT,我们拼接视觉序列地头部的类别token,并进行分类
  • 双类别tokrn 基于头部类别token策略,我们在视觉序列的尾部额外添加了一个类别token
  • 中类别token 我们在视觉序列的中部添加了一个视觉序列之后再最后的中部类别token上进行分类。

如表格五所示,实验表明,中部类别token策略可以完整的利用SSM天然的循环性和ImageNet的中心物体先验,展示了最好的top-1准确度76.1。

总结和未来工作

我们提出里视觉Mamba(Vim)来探索最近高效的状态空间模型,即Mamba,作为一个通用的视觉backbone。不像先前为视觉任务设计的的状态空间模型使用了混合结构或者等价于全局2D卷积核,Vim实现了数据依赖的全局视觉上下文并且拥有和Transformer一般的建模能力,但拥有更小的计算复杂度。受益于Mamba的硬件感知设计,推理速度和内存使用显著优于ViT在处理高分辨率的图片情况下。实验结果证明了Vim的建模能力和高效,展示了Vim在成为下一代视觉backbone方面的巨大潜力。

在未来的工作,位置编码的双向SSM建模Vim对于例如掩膜图像建模预训练和由相似结构的Mamba可以适合多模态任务例如CLIP类型的预训练。基于预训练的Vim权重,探索在高分辨率医学图像,遥感图像和长视频方面,即下游任务Vim的用处,是显而易见的。

标签:双向,Vim,SSM,视觉,序列,Mamba,Vision
From: https://blog.csdn.net/weixin_45668967/article/details/136694103

相关文章

  • 数据结构——循环链表,双向链表,线性表和有序表的合并详解
    目录1.循环链表1.带尾指针循环链表的合并 代码示例:2.双向链表代码示例:  1.双向链表的插入​代码示例:2.双向链表的删除代码示例:3.单链表,循环链表,双向链表时间效率的比较4.顺序表和链表的比较 5.存储密度6.线性表的应用 1.线性表的合并​代码示例:2.有序表......
  • 循环双向链表,精简代码秒懂!(C语言)
    #include<stdio.h>#include<stdlib.h>typedefintE;/***循环双链表*初始化*插入元素*删除元素*求链表总长*@return*/structArrayNode{Ee;structArrayNode*prev;structArrayNode*next;};typedefstructArrayNode*......
  • 海康摄像头GB28181语音喊话/双向喊话的配置以及海康摄像头如何在公网GB28181喊话
    @目录1、背景2、准备2.1、服务端必备条件(注意)2.2、准备语音对讲设备2.2.1、不支持跨网对讲示例2.2.2、支持跨网对讲示例3、开启音频开始对讲4、搭建GB28181视频直播平台1、背景GB28181支持国标协议的设备,通过GB28181注册接入到国标视频平台后。视频平台在某些情况下需要喊话摄......
  • 一文搞懂Vue的MVVM模式与双向绑定
    v-model是Vue.js框架中用于实现双向数据绑定的指令。它充分体现了MVVM(Model-View-ViewModel)模式中的双向数据绑定特性。下面我们将详细解释v-model如何体现MVVM和双向绑定:1.MVVM模式MVVM模式是一种软件架构设计模式,它将应用程序分为三个部分:Model(模型):代表应用程序的......
  • 微信小程序双向数据绑定
    使用vant组件实现引入"van-field":"@vant/weapp/field/index" 1.<van-cell-group>2.<van-field3.model:value="{{value}}"4.placeholder="请输入用户名"5.border="{{false}}"6./>7.</......
  • 喜报|3DCAT成为国内首批适配Vision Pro内容开发者
    近日,苹果在上海总部举办了国内首场AppleVisionPro开发者实验室活动,3DCAT作为国内领先的实时渲染云平台参与了此次活动,成为国内首批适配VisionPro的内容开发者之一。VisionPro是苹果于2023年6月发布的首个空间计算设备,它开创了一类新的计算设备,能将数字世界融入真实世界,......
  • Vision Transformers的注意力层概念解释和代码实现
    2017年推出《AttentionisAllYouNeed》以来,transformers已经成为自然语言处理(NLP)的最新技术。2021年,《AnImageisWorth16x16Words》,成功地将transformers用于计算机视觉任务。从那时起,许多基于transformers的计算机视觉体系结构被提出。本文将深入探讨注意力层在计算......
  • 双向数据绑定是什么
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助一、什么是双向绑定我们先从单向绑定切入单向绑定非常简单,就是把Model绑定到View,当我们用JavaScript代码更新Model时,View就会自动更新双向绑定就很容易联想到了,在单向绑定的基础上,用户更新了View,Model的数据也自动......
  • VisionPro相机掉线问题
    最近有一个项目用到visionpro,遇到一个问题记录一下。就是相机频繁掉线。报错信息:在网上查找原因,关闭防火墙、设置巨帧模式、调大接收缓存区都试过,没有改善。因为其他原因,我们中途换了海康相机。但是两款相机都有掉线的问题。所以排除相机的因素。 并且这个项目我们有两台......
  • D. Vlad and Division
    原题链接题解对于一个数,我们将其转换成二进制,然后补零到31位我们发现,能和数x配对的数只有一个,那就是按位翻转后的x,即x和\(2^{31}-1\)异或的值所以我们要找有没有能互相配对的值,以及组数,配对用map?code#include<bits/stdc++.h>usingnamespacestd;constintval=2147483......