DRSformer Rain200H 省钱推理复现笔记
论文:DRSformer: Efficient Transformer for Image Deraining (CVPR 2023)
仓库:https://github.com/cschenxiang/DRSformer
复现环境:AutoDL · RTX 3090 · PyTorch 2.1.2 + CUDA 12.1
复现日期:2026-10-12
复现模式:零训练 · 仅推理(pretrained weights)
目录
- 摘要
- 一、复现目标与边界
- [1.1 为什么选 Rain200H 作为推理复现目标](#1.1 为什么选 Rain200H 作为推理复现目标)
- [1.2 边界说明:HQ-RAIN 权重未公开](#1.2 边界说明:HQ-RAIN 权重未公开)
- 二、材料准备与上传策略
- [2.1 需要上传的四件材料](#2.1 需要上传的四件材料)
- [2.2 测试集精简打包:1095 MB → 106 MB](#2.2 测试集精简打包:1095 MB → 106 MB)
- [2.3 费用控制:无卡模式上传](#2.3 费用控制:无卡模式上传)
- 三、环境配置与五个必踩坑
- 四、推理执行
- [4.1 权重路径写死的处理](#4.1 权重路径写死的处理)
- [4.2 推理命令与耗时](#4.2 推理命令与耗时)
- 五、评测口径与实现
- [5.1 用 Python 替代 Matlab](#5.1 用 Python 替代 Matlab)
- [5.2 官方口径核实](#5.2 官方口径核实)
- 六、结果与交叉验证
- [6.1 实测结果](#6.1 实测结果)
- [6.2 与官方产物逐张交叉验证](#6.2 与官方产物逐张交叉验证)
- [6.3 论文 32.17 dB 的口径结论](#6.3 论文 32.17 dB 的口径结论)
- 七、结论与延伸
- [7.1 三条结论](#7.1 三条结论)
- [7.2 对综述论点的实证支撑](#7.2 对综述论点的实证支撑)
- [7.3 可选延伸](#7.3 可选延伸)
- [附录 A:完整命令速查](#附录 A:完整命令速查)
- [附录 B:文件清单与成本](#附录 B:文件清单与成本)
- [附录 C:术语速查](#附录 C:术语速查)
摘要
AutoDL 零训练复现 DRSformer(CVPR 2023):加载官方权重,对 Rain200H 的 200 对图推理评测,GPU 耗时 96 秒、成本不足 1 元;实测 Y 通道 PSNR 30.87 dB 与作者官方输出 30.868 dB 逐张一致,论文 32.17 dB 系另一测试划分所致。
一、复现目标与边界
1.1 为什么选 Rain200H 作为推理复现目标
官方仓库公开的预训练权重覆盖五个经典基准:Rain200L、Rain200H、DID-Data、DDN-Data、SPA-Data。其中 Rain200H 兼具以下三点优势,最适合作为省钱复现的切入集:
| 考量维度 | Rain200H 情况 | 说明 |
|---|---|---|
| 训练集规模 | 1800 对(评测只用 200 对测试图) | 测试集体积小,上传快 |
| 权重体积 | 约 129 MB | 百度网盘本地下载后上传约 5 分钟 |
| 架构依赖 | 默认 DRSformer_arch.py |
无需替换架构文件 |
反面对照:Rain200L 与 SPA-Data 的权重在训练时未启用 MEFC 模块,必须替换架构文件,多一步操作;DID-Data 测试集 1201 张,耗时最长。
1.2 边界说明:HQ-RAIN 权重未公开
需要明确一条边界:本文笔记所依托的 TPAMI 2025 综述(Towards Unified Deep Image Deraining )提出的 HQ-RAIN 基准,官方并未公开 DRSformer 的对应权重。HQ-RAIN 仓库只提供数据集与评测代码。
因此本次复现的目标限定为经典基准的推理结果重建,不涉及 HQ-RAIN 上的合成域冠军结论。这一限制不影响复现的方法学价值------它验证的是"官方权重 → 官方产物"这条链路是否可被完整重建。
二、材料准备与上传策略
2.1 需要上传的四件材料
| 文件 | 大小 | 用途 |
|---|---|---|
DRSformer-main.zip |
9.6 MB | 源码(含 test.py、架构定义、Matlab 评测脚本) |
deraining_Rain200H.pth |
129 MB | Rain200H 预训练权重 |
Rain200H_test_only.zip |
105.7 MB | 精简测试集(200 对) |
eval_psnr_ssim.py |
4 KB | 指标评测脚本(官方 test.py 不算指标) |
2.2 测试集精简打包:1095 MB → 106 MB
Rain200H 原始压缩包内 train(955 MB)与 test(106 MB)两部分并存,而推理阶段完全不需要训练集。上传前先在本地重打包,只保留 test 部分,上传体积压缩约 10 倍:
python
import zipfile
src = zipfile.ZipFile(r'Rain200H.zip')
dst = zipfile.ZipFile(r'Rain200H_test_only.zip', 'w', zipfile.ZIP_DEFLATED)
for info in src.infolist():
if info.filename.startswith('Rain200H/test/') and not info.is_dir():
dst.writestr(info.filename, src.read(info.filename))
dst.close()
测试集内部结构为 Rain200H/test/input/*.png(200 张雨图)与 Rain200H/test/target/*.png(200 张真值),两侧文件名均为 1.png ... 200.png,与仓库默认路径天然对齐,无需重命名。
2.3 费用控制:无卡模式上传
上传期间 GPU 按量计费仍在计费。合理做法是先以无卡模式开机(约 ¥0.1/时)完成上传与解压,再关机切换正常模式跑推理。本机实测:上传 4 个文件约 10--30 分钟,无卡模式与 3090 模式之间的费用差可达数元。
三、环境配置与五个必踩坑
环境配置阶段共遇到五个问题,逐一记录根因与解法:
| # | 现象 | 根因 | 解法 |
|---|---|---|---|
| 1 | pip install 报 Could not find a version ... (from versions: none) |
先前执行的 source /etc/network_turbo 残留 http_proxy/https_proxy,代理劫持了国内 PyPI 镜像请求 |
unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY,或显式指定 -i https://pypi.tuna.tsinghua.edu.cn/simple |
| 2 | 安装后被依赖解析器警告 numpy 冲突,运行时报 compiled using NumPy 1.x cannot be run in NumPy 2.x |
scikit-image 连带将 numpy 升级至 2.2.6,而镜像自带 PyTorch 是按 numpy 1.x 编译的 |
钉回兼容版本:pip install "numpy==1.26.4" "opencv-python-headless==4.10.0.84" |
| 3 | torch.cuda.is_available() 返回 False |
无卡模式下实例隐藏 GPU,CUDA_VISIBLE_DEVICES 被置空 |
关机后以正常模式(3090)开机;环境装在系统盘、数据在数据盘,关机不丢 |
| 4 | 推理进度条显示 1/1,只处理了 1 张图 |
目标目录已存在同名文件,cp -r 把 200 张图复制进了 test/input/input/ 子目录,而 test.py 只扫描顶层 |
rm -rf test/input && cp -r ../Rain200H/test/input test/input,用 `ls test/input |
| 5 | libgomp: Invalid value for environment variable OMP_NUM_THREADS |
镜像预设的该环境变量取值非法 | export OMP_NUM_THREADS=8(仅消除告警,不影响结果) |
第 4 条最值得记录:它不会报错,只会静默地把工作量从 200 张降到 1 张,若只看流程是否跑通而不核对张数,极易带着错误的评测结论离开。
四、推理执行
4.1 权重路径写死的处理
test.py 中的权重路径是硬编码的:
bash
mkdir -p pretrained_models
mv deraining_Rain200H.pth pretrained_models/deraining.pth # 必须改名为 deraining.pth
未改名会直接报 FileNotFoundError: pretrained_models/deraining.pth。
4.2 推理命令与耗时
bash
python test.py --task Deraining --input_dir './test/input/' --result_dir './test/output/'
实测结果:
| 指标 | 数值 |
|---|---|
| 处理张数 | 200 / 200 |
| 耗时 | 1 分 36 秒 |
| 吞吐 | 2.08 it/s |
| 输出目录 | test/output/Deraining/ |
test.py 只负责把去雨结果写入磁盘,不计算任何指标 ------这是官方仓库的设计,指标需要用 evaluations/ 下的 Matlab 脚本自行评测。
以测试图 1(雪地场景)为例,去雨效果如下图所示:

五、评测口径与实现
5.1 用 Python 替代 Matlab
为免在实例上安装 Matlab,本次用 eval_psnr_ssim.py 实现官方的 Matlab 评测等价逻辑:
- 按文件名数字编号自动配对(
1.png ↔ 1.png),无需人工对齐; - 逐张计算 PSNR / SSIM,末尾输出平均值,可选写入 txt 留档;
- 默认 RGB 通道,
--y开关切换 Y 通道(BT.601)。
bash
python eval_psnr_ssim.py --pred test/output/Deraining --gt ../Rain200H/test/target --out metrics_final_rgb.txt
5.2 官方口径核实
通读官方评测脚本 Evalution_Rain200L_Rain200H_SPA-Data/evaluate_PSNR_SSIM.m 后确认三点:
- PSNR/SSIM 在
rgb2ycbcr后的 Y 通道上计算; - 无边界裁剪(不做 border shave);
- 按目录顺序配对,与按编号配对等价。
Python 实现与 Matlab 存在约 0.1 dB 量级的差异(主要来自 YCbCr 量化范围),属正常范围。
六、结果与交叉验证
6.1 实测结果
| 口径 | 平均 PSNR | 平均 SSIM |
|---|---|---|
| 本文复现输出 · RGB | 30.8078 | 0.9219 |
| 本文复现输出 · Y (BT.601) | 30.8675 | 0.9237 |
| 作者官方输出 · Y (BT.601) | 30.8676 | 0.9237 |
| 论文 Table 1 | 32.17 | 0.9330 |
6.2 与官方产物逐张交叉验证
为判定 32.17 与 30.87 之间约 1.36 dB 的差距成因,下载作者放出的官方视觉结果(Rain200H,200 张)并用同一脚本评测,与本文输出逐张比对:
- 张数一致 :官方结果同样为 200 张,命名为
1.png ... 200.png; - 均值一致:30.8676 与 30.8675,相差 0.0001 dB;
- 逐张一致:单图数值对齐到小数点后第三位,残差处于 PNG 编解码量化噪声量级。
该结果表明:权重加载、数据流、推理管线、评测口径全部与作者官方行为一致,本文复现为零偏差重建。
6.3 论文 32.17 dB 的口径结论
关键推论是:连作者自己放出的官方输出,在这套 200 对测试集上也只得到 30.87 dB。这说明论文 32.17 dB 并非在这套分发的测试集上测得,而是来自另一测试划分(最可能是 Yang et al. 的标准 100 对划分)或作者内部版本。
在正式引用时,两组数字必须分开标注:
- 本笔记实测:30.81 dB (RGB) / 30.87 dB (Y),作者提供的 200 对扩展测试集全量;
- 论文报告:32.17 dB / 0.9330,论文原始测试口径。
已排除的其他假设(附验证方式):
| 假设 | 验证方式 | 结论 |
|---|---|---|
| 前 100 张即标准测试集 | 分半统计 | 前半 30.85 / 后半 30.47,不成立 |
| Y 通道口径差异 | --y 复测 |
Y 相对 RGB 仅 +0.06 dB,不足以解释 |
| 评测配对错误 | 检查 unmatched 计数 |
200 张全部匹配,unmatched: 0 |
七、结论与延伸
7.1 三条结论
- 复现判定标准应当升级 :在官方权重可直接下载的场景下,"与论文数字相差 0.1 dB 以内"并不是唯一标准,与作者官方产物逐张一致是更强的证据;本次复现达到后者(差 0.0001 dB),而前者反而不成立。
- 基准口径是复现报告的必要信息:同一权重、同一套测试文件,仅因论文数字所依据的划分不同,就能产生 1.36 dB 的系统性差异。任何复现笔记都应显式声明测试集版本与评测通道。
- 成本可控:零训练推理复现单个基准(Rain200H),GPU 占用约 40 分钟,总花费不足 1 元。
7.2 对综述论点的实证支撑
本文的实测结果可视为对"合成域表现 ≠ 真实域泛化"这一主线论点的一个旁证:HQ-RAIN 综述指出,合成域冠军模型在真实域上泛化弱于融合领域知识的 CNN。本次复现补充了另一层观察------即使在合成域内部,基准划分这一"实验设定"本身也会显著影响绝对数值。讨论模型优劣时若不锚定统一的评测口径,跨论文比较将失去意义。
7.3 可选延伸
| 方向 | 操作要点 |
|---|---|
| Rain200L / SPA-Data | 需替换架构文件:cp "DRSformer_arch_200L+SPA.py" DRSformer_arch.py(这两集训练时未用 MEFC) |
| DID-Data / DDN-Data | 默认架构即可,DID 测试集 1201 张,耗时最长 |
| HQ-RAIN | 权重未公开,只能引用综述数字,或自行训练 |
附录 A:完整命令速查
bash
# ---- 环境准备(无卡模式即可) ----
cd /root/autodl-tmp
unzip DRSformer-main.zip && cd DRSformer-main
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python-headless scikit-image natsort tqdm einops
pip install "numpy==1.26.4" "opencv-python-headless==4.10.0.84"
# ---- 摆放权重与数据 ----
mkdir -p pretrained_models
mv ../deraining_Rain200H.pth pretrained_models/deraining.pth
unzip ../Rain200H_test_only.zip -d ..
mkdir -p test && cp -r ../Rain200H/test/input test/input
ls test/input | wc -l # 必须输出 200
# ---- 推理(切换 3090 正常模式) ----
python test.py --task Deraining --input_dir './test/input/' --result_dir './test/output/'
# ---- 评测 ----
python eval_psnr_ssim.py --pred test/output/Deraining --gt ../Rain200H/test/target --out metrics_final_rgb.txt
python eval_psnr_ssim.py --pred test/output/Deraining --gt ../Rain200H/test/target --y --out metrics_ours_y.txt
# ---- 打包结果并关机 ----
cd test/output && zip -r /root/autodl-tmp/deraining_rain200h_output.zip Deraining && cd ../..
shutdown
附录 B:文件清单与成本
| 项目 | 数值 |
|---|---|
| 上传材料总量 | 约 245 MB(4 个文件) |
| 权重文件字节数校验 | 134,971,977 B(与本地一致) |
| 推理耗时 | 1 分 36 秒(200 张,RTX 3090) |
| GPU 总占用 | 约 40 分钟 |
| 总成本 | 不足 ¥1(无卡模式上传 + 3090 推理) |
留档文件:metrics_final_rgb.txt、metrics_ours_y.txt、metrics_official.txt、deraining_rain200h_output.zip。
附录 C:术语速查
| 术语 | 含义 |
|---|---|
| DRSformer | CVPR 2023 提出的高效图像去雨 Transformer,含 MEFC 模块 |
| MEFC | Mixed Efficient Feed-forward / 多尺度特征协作模块,Rain200L 与 SPA 训练时未启用 |
| Rain200H | 含重雨(heavy rain)的合成去雨基准,1800 训练对 + 200 测试对 |
| HQ-RAIN | TPAMI 2025 综述提出的统一评测基准,运动模糊合成雨纹 + alpha 融合,约 5000 对 |
| PSNR | 峰值信噪比,去雨任务主指标,越高越好 |
| SSIM | 结构相似度,取值 0,1,越高越好 |
| 无卡模式 | AutoDL 的 CPU-only 计费模式,约 ¥0.1/时,适合上传与评测 |
