VDMamba·AutoDL 复现笔记 · 学习笔记
论文:Semi-Supervised State-Space Model with Dynamic Stacking Filter for Real-World Video Deraining(CVPR 2025)
代码:sunshangquan/VDMamba(本地副本 H:\zj\RainMamba\VDMamba-main)
复现平台:AutoDL 云 GPU 实例
复现范围:仅推理(论文理解向),不含训练
整理日期:2026-10-08
目录
- 摘要
- 一、项目辨析与复现目标
- [1.1 VDMamba 不是 RainMamba](#1.1 VDMamba 不是 RainMamba)
- [1.2 复现目标界定](#1.2 复现目标界定)
- 二、代码依赖审查结论
- [2.1 纯 Python 依赖](#2.1 纯 Python 依赖)
- [2.2 CUDA 扩展依赖(三个)](#2.2 CUDA 扩展依赖(三个))
- [2.3 预训练权重现状](#2.3 预训练权重现状)
- [三、AutoDL 实例与镜像选择](#三、AutoDL 实例与镜像选择)
- [3.1 GPU 架构硬约束](#3.1 GPU 架构硬约束)
- [3.2 镜像三段式选择法](#3.2 镜像三段式选择法)
- 四、两阶段环境搭建流程
- [4.1 Phase 1:无卡模式(纯 Python 依赖)](#4.1 Phase 1:无卡模式(纯 Python 依赖))
- [4.2 Phase 2:GPU 模式(CUDA 扩展)](#4.2 Phase 2:GPU 模式(CUDA 扩展))
- [4.3 编译要点](#4.3 编译要点)
- 五、推理测试与指标复现
- [5.1 测试命令范式](#5.1 测试命令范式)
- [5.2 指标计算](#5.2 指标计算)
- [5.3 省流量技巧](#5.3 省流量技巧)
- 六、成本核算(仅推理)
- 七、常见坑点清单
- [附录 A:术语速查](#附录 A:术语速查)
- [附录 B:复现自查清单](#附录 B:复现自查清单)
摘要
本文记录在 AutoDL 云平台复现 CVPR 2025 视频去雨模型 VDMamba 的完整流程。经代码依赖审查,确定其推理链路依赖 PyTorch 2.1.1 与三个 CUDA 扩展;采用无卡模式与 GPU 模式两阶段搭建策略压缩成本,实测仅推理复现的总开销可控制在十元以内。
一、项目辨析与复现目标
1.1 VDMamba 不是 RainMamba
本地目录 H:\zj\RainMamba\VDMamba-main 中的项目,与 RainMamba(TonyHongtaoWu/RainMamba,ECCV 2024)是两个不同的工作,极易混淆:
| 维度 | RainMamba | VDMamba |
|---|---|---|
| 论文 | Rain Removal with Locality-Enhanced State Space Models | Semi-Supervised SSM with Dynamic Stacking Filter |
| 会议 | ECCV 2024 | CVPR 2025 |
| 任务 | 视频去雨(合成雨为主) | 真实世界视频去雨(半监督) |
| 框架依赖 | MMEditing / mmcv-full | 无 MM 系列,纯 PyTorch |
| 特色模块 | 局部增强状态空间模型 LLM | 动态堆叠滤波器 DSF + S3ML/TSML |
两项目均以 Mamba 状态空间模型为核心构件,但代码体系互不兼容。复现前必须先确认目标是哪一个。
1.2 复现目标界定
本文定位为"论文理解向"复现:跑通官方预训练权重的测试推理,复现论文中 NTURain / RainSynLight25 / RainSynComplex25 三个数据集上的 PSNR / SSIM 指标,不涉及训练与半监督流程。
二、代码依赖审查结论
复现的第一步不是开机器,而是通读代码的 import 链 。对 test_video_rain.py 及其引用模块逐层审查后,得到最小依赖集:
2.1 纯 Python 依赖
| 包 | 版本约束 | 说明 |
|---|---|---|
| torch | 2.1.1+cu121 | README 指定 |
| torchvision | 0.16.1 | README 所写 0.10.1 系笔误,须与 torch 2.1.1 配套 |
| numpy | 1.26.4 | torch 2.1.1 按 NumPy 1.x 编译,2.x 会报错 |
| einops | --- | s3ml/tsml 重排算子 |
| opencv-python | 4.8.1.78 | 与 numpy 1.x 配套 |
| scikit-image / matplotlib / natsort / pillow | --- | 指标计算与数据读取 |
2.2 CUDA 扩展依赖(三个)
| 扩展 | 引用位置 | 获取方式 |
|---|---|---|
| mamba_ssm | networks/s3ml.py、tsml.py | cu122+torch2.1+py310 有官方预编译 wheel |
| causal_conv1d | networks/s3ml.py、tsml.py | 同上,有预编译 wheel |
| correlation_cuda | networks/LiteFlowNet*.py | 必须源码编译,且需先清除仓库携带的 build/ 旧产物 |
关键结论:本项目不需要 mmcv/mmedit(那是 RainMamba 的依赖),复现门槛显著更低。
2.3 预训练权重现状
仓库 checkpoints/ 已附带三个数据集的完整权重(nturain5_vdmamba、rainsynlight25_vdmamba、rainsyncomplex25_vdmamba,各 90 MB),无需再从 Google Drive 下载 。注意 README 测试命令中的 -epoch 25/82 与实际不符------三个权重文件均为 model_epoch_100.pth,统一使用 -epoch 100。
三、AutoDL 实例与镜像选择
3.1 GPU 架构硬约束
mamba_ssm 与 causal_conv1d 的预编译 wheel 仅覆盖 sm_80 及以后架构。选卡原则:
- 可选:RTX 3090(sm_86)、RTX 4090(sm_89)、A5000、A40
- 禁选:V100(sm_70)、T4(sm_75)、P100------wheel 不支持,源码编译亦繁琐
3.2 镜像三段式选择法
创建实例时在「框架镜像 → PyTorch」下选择:
PyTorch 2.1.1 / Python 3.10 / CUDA 12.1
CUDA 12.1 的选定依据:与 torch cu121 构建对应,且兼容 mamba 官方 cu122 wheel 的 ABI。若该精确组合缺货,任何 PyTorch 2.1.x + CUDA 12.1 + Python 3.10 组合均可;即便 Python 版本不符,搭建脚本会自建 python=3.10 的 conda 环境兜底。
四、两阶段环境搭建流程
核心思路:把不花钱的步骤放进无卡模式(约 0.1 元/小时),只有编译与推理才进 GPU 模式。
4.1 Phase 1:无卡模式(纯 Python 依赖)
- 将本地
VDMamba-main整体打包上传至/root/autodl-tmp/(自带权重约 270 MB); - 运行
bash setup_vdmamba_autodl.sh phase1:创建 conda 环境 vdmamba,安装 torch 2.1.1+cu121 及全部纯 Python 依赖; - 期间完成测试数据集下载:NTURain(SPAC-SupplementaryMaterials 仓库)、RainSynLight25 / RainSynComplex25(J4RNet 仓库),各 1~3 GB,走 AutoDL 学术加速。
4.2 Phase 2:GPU 模式(CUDA 扩展)
- 关机 → 切换 GPU 模式开机;
- 运行
bash setup_vdmamba_autodl.sh phase2 /root/autodl-tmp/VDMamba-main; - 脚本策略:优先 pip 安装 mamba_ssm / causal_conv1d 预编译 wheel(命中即免编译);wheel 失配时回退源码编译(MAX_JOBS=2 防 OOM);correlation_cuda 始终源码编译;
- 末尾自动验证
import mamba_ssm / causal_conv1d / Correlation / networks.vdmamba.Model全链路可导入。
4.3 编译要点
- correlation_package 编译前必须
rm -rf build dist *.egg-info------作者机器的旧构建产物会导致链接失败; - 源码编译 mamba 必须在有 GPU 的环境下进行,编译系统需探测显卡真实架构(sm_86/sm_89),无卡编译产物架构不匹配。
五、推理测试与指标复现
5.1 测试命令范式
bash
CUDA_VISIBLE_DEVICES=0 python test_video_rain.py \
-list_filename lists/nturain_test.txt \
-epoch 100 \
-data_dir <Dataset_Testing_Synthetic 路径> \
-checkpoint_dir ./checkpoints/ \
-model_name nturain5_vdmamba
RainSynLight25 / RainSynComplex25 同理,替换 list 文件与 -model_name,并追加 -file_suffix .png。
5.2 指标计算
bash
python comp_psnr_ssim.py --path1 <推理结果目录> --path2 <GT 目录>
将 PSNR / SSIM 与论文表格逐项对照即可验证复现质量。
5.3 省流量技巧
lists/ 目录内置 *_sub.txt 子集列表(如 nturain_test_sub.txt)。建议先用子集跑通全链路,确认无误后再跑全量,避免在调试上浪费 GPU 时长。
六、成本核算(仅推理)
| 环节 | 模式 | 时长 | 费用估算 |
|---|---|---|---|
| 环境搭建 + 数据下载 | 无卡模式 | 1~2 h | ≈ 0.2 元 |
| 扩展安装(wheel 命中则极快) | GPU 模式 | 0.2~1 h | 0.3~2 元 |
| 三数据集全量推理 | GPU 模式 | 1~2 h | 1.5~4 元 |
| 合计 | --- | --- | 约 3~10 元 |
单数据集复现约 3~5 元。相对动辄数十小时的训练复现,论文理解向推理复现的成本可以忽略。
七、常见坑点清单
- 项目混淆:VDMamba 与 RainMamba 是两套代码体系,环境互不通用;
- epoch 参数陷阱 :README 命令的
-epoch 25/82与仓库附带权重不符,一律用-epoch 100; - torchvision 版本笔误:README 写 0.10.1,实际须装 0.16.1;
- NumPy 2.x 陷阱:torch 2.1.1 编译基于 NumPy 1.x,须钉住 numpy==1.26.4;
- 老架构显卡不可用:V100/T4/P100 无 mamba wheel 支持;
- correlation 旧构建残留:编译前不清 build/ 会失败;
- 无卡模式编译 OOM:无卡实例内存仅够跑 pip,nvcc 编译必须在 GPU 模式下进行;
- 代理作用域:AutoDL 学术加速仅用于 GitHub/Google 访问,pip 安装前须 unset 代理。
附录 A:术语速查
| 术语 | 含义 |
|---|---|
| Mamba / SSM | 状态空间模型,线性复杂度长序列建模架构 |
| causal_conv1d | Mamba 配套的因果卷积 CUDA 算子 |
| correlation_cuda | 光流网络代价体计算的 CUDA 算子(FlowNet 系) |
| sm_86 / sm_89 | NVIDIA GPU 计算架构代号(3090 / 4090) |
| 无卡模式 | AutoDL 提供的无 GPU 低价开机模式,用于环境准备 |
| NTURain / RainSyn | 视频去雨领域标准测试集(真实/合成) |
| PSNR / SSIM | 峰值信噪比 / 结构相似度,复原质量指标 |
附录 B:复现自查清单
- 确认目标是 VDMamba(CVPR 2025)而非 RainMamba
- 镜像:PyTorch 2.1.1 / Python 3.10 / CUDA 12.1
- GPU:3090/4090/A5000(sm_80+)
- Phase 1 完成:torch 2.1.1+cu121 导入正常,numpy 1.26.4
- Phase 2 完成:mamba_ssm、causal_conv1d、Correlation 三者导入正常
-
from networks.vdmamba import Model无报错 - 权重路径:checkpoints/*/model_epoch_100.pth,测试命令
-epoch 100 - PSNR/SSIM 与论文表格对照,偏差应在 ±0.1 dB 内