VMamba模型复现(linux+Anaconda+vscode)

VMamba模型代码地址:MzeroMiko/VMamba: VMamba: Visual State Space Models,code is based on mambaicon-default.png?t=O83Ahttps://github.com/MzeroMiko/VMamba

默认前提是,已经配置好了linux+Anaconda环境,这里只介绍怎样配置用于VMamba模型的虚拟环境以及vscode链接测试模型。

1.创建虚拟环境,直接在Ubuntu终端输入指令

conda create -n VMamba python==3.10.13

2.激活虚拟环境

conda activate VMamba

3.下载cuda-11.8,一定要是这个版本,别的版本不行!大多数manba环境的搭建都是因为cuda版本导致的错误,所以这里一定注意。

conda install cudatoolkit==11.8 -c nvidia

4.验证cuda是否正确安装

conda list cudatoolkit

5.安装torchvision和torchaudio

pip install torch==2.1.1 torchvision==0.16.1 torchaudio==2.1.1 --index-url https://download.pytorch.org/whl/cu118

6.安装ncvv

conda install -c "nvidia/label/cuda-11.8.0" cuda-nvcc

7.安装打包工具packaging

conda install packaging

8.安装openlab环境,顺序运行以下指令

pip install mmcv==2.1.0 -f https://download.openmmlab.com/mmcv/dist/cu118/torch2.1/index.html
pip install mmengine==0.10.1
pip install mmdet==3.3.0 mmsegmentation==1.2.2 mmpretrain==1.2.0

9.安装causal-conv1d  和 mamba-ssm,最容易报错的地方。

pip install causal-conv1d==1.1.1
pip install mamba-ssm==1.1.2

10.找到地址\\wsl.localhost\Ubuntu-20.04\home\你自己的用户名称,创建project文件夹用于存放项目文件,将从github上下载的VMamba-main文件夹拷贝至其中。

11.vscode打开项目,通过左下角的wsl连接,打开终端激活VMamba环境

12.在classification/models/vmamba.py最后添加

device = torch.device("cuda:0")
hidden_dim = 3  # 假设 VSSBlock 的隐藏维度为 64
network = VSSM(hidden_dim).to('cuda:0')
# 随机生成一张输入图片作为示例
input_image = torch.randn(1, 3, 224, 224)  # 假设输入图片大小为 224x224,通道数为 3(RGB图像)
input_image = input_image.to(device)
# 前向传播
output = network(input_image)
# 输出结果的大小
print("Output shape:", output.shape)

13.在终端运行vmamba.py,这里不出意外会报一个错Can not import selective_scan_cuda_oflex,

14.这个错误是由于虚拟环境和外面的环境的cuda版本不一致的问题导致的,所以我们不仅仅虚拟环境的cuda版本为11.8,而且base的cuda版本也要为11.8才行,具体可以输入指令nvcc -V查看版本,先卸载原来的版本,再重新下载cuda11.8。

sudo apt-get --purge remove 'cuda*'    #卸载原本的cuda

#下载cuda11.8
sudo wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
sudo wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda-repo-wsl-ubuntu-11-8-local_11.8.0-1_amd64.deb
sudo dpkg -i cuda-repo-wsl-ubuntu-11-8-local_11.8.0-1_amd64.deb
sudo cp /var/cuda-repo-wsl-ubuntu-11-8-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda

15.更新cuda的路径,完成后输入指令nvcc -V查看是否成功安装,这部分内容有不懂的网上很多教程,这里只简单说一下过程。

# 编辑路径
vim ~/.bashrc

# 在最下方添加路径  i进入编辑模式 esc退出编辑模式,输入:wq保存更改
export PATH=/usr/local/cuda-11.8/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH

# 保存配置
source ~/.bashrc

退出终端重新进去

# 检查是否正确安装
nvcc -V

16.安装selective_scan,指令来自官网,在vscode终端运行,不出意外还会报错,这里就是报错最多的地方,具体解决方案参考这篇博客:VMamba 安装教程(无需更改base环境中的cuda版本)_vmamba安装-优快云博客icon-default.png?t=O83Ahttps://blog.youkuaiyun.com/yyywxk/article/details/140418043

cd kernels/selective_scan && pip install .

17.作者到这一步崩溃了,报了个错,解决不了啊!有大神指导下吗????

 UserWarning: There are no g++ version bounds defined for CUDA version 11.8

18.咨询了一下大佬,说这个模块只影响速度,还是可以跑训练的,所以基本上可以了。

### 关于 VMamba代码实现 VMamba 是一种高效的视频理解模型,其设计旨在优化状态空间模型的应用。为了更好地展示如何实现这一模型,下面提供了一个简化版的 Python 实现示例,用于说明核心概念。 #### 状态空间模型初始化 ```python import torch import torch.nn as nn class StateSpaceModel(nn.Module): def __init__(self, input_dim, hidden_dim, output_dim): super(StateSpaceModel, self).__init__() self.hidden_layer = nn.Linear(input_dim, hidden_dim) self.output_layer = nn.Linear(hidden_dim, output_dim) def forward(self, x): h_t = torch.relu(self.hidden_layer(x)) y_pred = self.output_layer(h_t) return y_pred ``` 此部分定义了基本的状态空间模型结构,其中包含了输入层到隐藏层再到输出层的转换过程[^1]。 #### 视频帧处理模块 考虑到视频数据的特点,特别加入了针对连续帧之间关系的学习机制: ```python class FrameProcessor(nn.Module): def __init__(self, frame_size, feature_extractor): super(FrameProcessor, self).__init__() self.feature_extractor = feature_extractor self.temporal_model = StateSpaceModel(frame_size, 256, 128) def forward(self, video_frames): features = [] for frame in video_frames: feat = self.feature_extractor(frame.unsqueeze(0)).squeeze() features.append(feat) temporal_features = torch.stack(features) processed_output = self.temporal_model(temporal_features) return processed_output.mean(dim=0) # 平均池化得到最终表示向量 ``` 上述代码片段展示了如何利用预训练好的特征提取器来获取每一帧图像的关键信息,并通过时间维度上的建模进一步增强这些表征的能力。 #### 完整的 VMamba 模型构建 最后一步是将所有组件组合起来形成完整的 VMamba 架构: ```python from torchvision.models import resnet50 def build_vmamba(): backbone = resnet50(pretrained=True) processor = FrameProcessor(backbone.fc.in_features, backbone) class VMamba(nn.Module): def __init__(self): super().__init__() self.processor = processor def forward(self, inputs): outputs = [] for seq in inputs: out = self.processor(seq) outputs.append(out) return torch.stack(outputs) model = VMamba() return model ``` 这段代码实现了从单个视频序列中抽取有意义的信息的过程,体现了 VMamba 对高效视频理解的支持。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值