Vision Mamba代码笔记

1 论文回顾

  • 基本思路

论文解读见:

《VideoMamba》论文笔记_video mamba-优快云博客

  • 注意

  1. Vision Mamba和VIT的输入和输出的shape的形状是相同的(VIT基于Transformer的Encoder设计,输入经过多层MHA和MLP计算,输入和输出的形状相同,Mamba的SSM架构就可以做到输入与输出token的个数以及每个token的维度相同,自然也可以做到整个输入和输出的形状相同,再者Vision Mamba的设计参照VIT的结构,自然也要注意输入与输出形状相同。两者的输入流经过各自对应的Encoder之后都具备了上下文信息,其效果相同,效率上基于Mamba的模型会更胜一筹。
  2. 正如1所说,Vision Mamba的设计参照VIT,这两个工作的流程是相同的,这里主要指的是图片打patch 再concat上class token再加上Position Embedding这个流程,两个模型唯一不同的地方就是Emcoder部分的不同,VIT使用的是Transformer的Encoder,Vim使用的是Mamba的Encoder,二者都是用于token间信息交互,上下文建模的

2 环境配置

按照官方readme.md配置,如果有问题照着下面这个链接改

vision mamba 运行训练记录,解决bimamba_type错误-优快云博客

值得说明的一点是,如果你之前在跑其他的mamba,环境拿过来是不能直接直接用的,因为标准的Mamba类是没有bimamba_type这个参数的,

所以,需要去Vim代码官网去找到mamba-1p1p1包,下载之后放自己项目里

事实上Vision Mamba重写了这个Mamba类,可以看到里边是由bimamba_type这个参数的(这其实也是Vision Mamba的主要贡献),执行如下代码

cp -rf mamba-1p1p1/mamba_ssm /home/liyhc/anaconda3/envs/mamba/lib/python3.10/site-packages
#后边是系统的mamba的安装路径,自己照着自己环境mamba的安装路径进行修改

3 代码笔记

3.1 代码链接

官方代码链接

Vim/vim/models_mamba.py at main · hustvl/Vim (github.com)

我手敲的带中文注释的链接

Johnny-Haytham/Vim: Vim with chinese notation (github.com)

3.2 Module

3.2.1 PatchEmbed

     

class PatchEmbed(nn.Module):
    def __init__(self, img_size=224,patch_size=16,stride=16,in_channels=3,embed_dim=768,norm_layer=None,flatten=True):
        super(PatchEmbed, self).__init__()
        img_size = to_2tuple(img_size)
        patch_size = to_2tuple(patch_size)#将img_size和patch_size化成元组的形式
        self.img_size = img_size
        self.patch_size = patch_size
        #一个patch形成一个grid(网格),这里记录网格的形状
        self.grid_size = ((img_size[0] - patch_size[0]) // stride + 1 , (img_size[1] - patch_size[1]) // stride + 1)
        self.num_patches = self.grid_size[0] * self.grid_size[1]#总共的patch个数
        self.flatten = flatten
        #打patch的操作,实际为卷积的操作(为了不重复卷积,步长的大小理论上因该等于卷积核的大小)
        self.proj = nn.Conv2d(in_channels, embed_dim, kernel_size=patch_size, stride=stride)
        self.norm = norm_layer(embed_dim) if norm_layer else nn.Identity()#nn.Identity的输入等于输出,通常作为占位层使用

    def forward(self, x):
        B, C, H, W = x.shape
        assert H == self.img_size[0] and W == self.img_size[1],\
            f"Input img size ({H}*{W}) doesn't match model ({self.img_size[0]}*{self.img_size[1]})"
        x = self.proj(x)#B,C,H,W——>B,embed_dim,grid_size,grid_size
        if self.flatten:
            x = x.flatten(2).transpose(1, 2)#B,embed_dim,grid_size,grid_size——>B,embed_dim,grid_size*grid_size——>B,grid_size*grid_size,embed_dim
        x = self.norm(x)
        return x

3.2.2 Vim Encoder Block

class Block(nn.Module):
    def __init__(
            self, dim, mixer_cls,
            norm_cls = nn.LayerNorm,
            fused_add_norm=False,residual_in_fp32=False,drop_path=0.
    ):
        super(Block, self).__init__()
        self.residual_in_fp32 = residual_in_fp32
        self.fused_add_norm = fused_add_norm

        self.mix
### 关于 Vision Mamba代码实现 Vision Mamba 是一个多模态模型,专注于视觉序列学习并提供多模态数据的统一表示[^1]。其核心功能在于处理图像、视频以及其他形式的数据流,并通过高效的训练机制提升性能。 #### 官方支持与开发工具 对于 Vision Mamba 的实际部署和调试,可以参考官方文档中的指导[^2]。具体来说,开发者通常会利用 PyCharm 和 AutoDL 工具链来优化代码运行效率以及管理依赖项。以下是基于官方建议的操作方法: - **替换虚拟环境中的包** 如果需要更新 `mamba_ssm` 包至最新版本,则可以通过以下命令完成: ```bash cp -rf mamba-1p1p1/mamba_ssm /root/miniconda3/envs/vim/lib/python3.10/site-packages/ ``` 此操作能够确保本地环境中使用的模块是最新的稳定版[^2]。 --- #### 可能的开源资源位置 目前关于 Vision Mamba 的公开资料主要集中在以下几个方面: 1. **GitHub 开源仓库**: 大多数机器学习框架都会将其源码托管在 GitHub 上供研究者下载使用。尝试搜索关键词如 “vision-mamba” 或查看相关作者 Liu et al.[^1] 是否已发布正式存储库。 2. **学术论文附录链接**: 论文中提到的技术细节往往伴随有实验代码作为补充材料。如果尚未找到确切地址,可查阅原始出版物是否有附加文件说明。 3. **社区论坛讨论区**: 像 Hugging Face Spaces、Reddit Machine Learning 板块或者 Stack Overflow 都可能是获取额外线索的地方。 --- #### 示例代码片段 假设已经成功安装好所有必要组件之后,下面展示一段简单的加载预训练权重脚本用于初始化 Vision Mamba 实例: ```python from vision_mamba import VisionMambaModel, VisionMambaConfig # 加载配置参数 config = VisionMambaConfig.from_pretrained("path/to/config.json") # 初始化模型结构 model = VisionMambaModel(config) print("Model initialized successfully!") ``` 注意路径需替换成实际存在的目录名或远程 URL 地址。 ---
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值