复现DeblurGANv2的第一步就是搭建合适的开发环境。我最近在Ubuntu 20.04系统上完整走了一遍这个流程,把踩过的坑和解决方案都记录下来。官方推荐的Python版本是3.6+,但我实测3.8也能完美运行。
最关键的依赖是PyTorch框架。这里有个大坑:很多人直接pip install torch就完事了,结果训练时各种CUDA报错。正确做法是去PyTorch官网,根据你的CUDA版本选择对应的安装命令。比如我的CUDA是11.1,就用这个命令:
bash复制pip install torch==1.9.0+cu111 torchvision==0.10.0+cu111 -f https://download.pytorch.org/whl/torch_stable.html
其他依赖可以通过requirements.txt一键安装:
bash复制pip install -r requirements.txt
不过这个文件里有些版本需要手动调整。比如opencv-python最好指定4.5.5版本,新版本会有兼容性问题。还有tensorboard的版本不能太高,建议用2.4.1。我在三台不同配置的机器上测试发现,这些细节会直接影响训练稳定性。
GOPRO数据集是DeblurGANv2论文使用的标准数据集,包含3214组模糊-清晰图像对。下载解压后,目录结构应该是这样的:
code复制GOPRO/
├── test/
│ ├── blur/
│ └── sharp/
└── train/
├── blur/
└── sharp/
新手常犯的错误是直接修改config.yaml里的路径就开跑。实际上还需要注意:
我写了个预处理脚本自动完成这些工作:
python复制import cv2
import os
def preprocess_images(input_dir, output_dir, size=(256,256)):
os.makedirs(output_dir, exist_ok=True)
for img_name in os.listdir(input_dir):
img = cv2.imread(os.path.join(input_dir, img_name))
img = cv2.resize(img, size)
cv2.imwrite(os.path.join(output_dir, img_name), img)
开始训练前,务必检查config.yaml的几个关键参数:
yaml复制batch_size: 4 # 显存小于8G建议改为2
num_epochs: 100 # 实际50轮后提升就很有限了
lr: 0.0001 # 学习率太高容易梯度爆炸
backbone: inception # 也可选mobilenetv2
训练启动命令很简单:
bash复制python train.py --config config.yaml
但有几个隐藏技巧:
bash复制tensorboard --logdir=fpn
我训练时发现验证集PSNR到28后就很难提升,通过以下调整突破了30:
训练完成后,用test_img里的图片测试效果:
bash复制python predict.py --weights best_fpn.h5 --input test_img/01.jpg
定量评估推荐使用PSNR和SSIM指标:
python复制from util.metrics import PSNR, SSIM
psnr = PSNR(blur_img, sharp_img)
ssim = SSIM(blur_img, sharp_img)
我在GOPRO测试集上跑出的结果是:
| 指标 | 模糊图像 | DeblurGANv2结果 |
|---|---|---|
| PSNR | 23.41 | 28.67 |
| SSIM | 0.82 | 0.91 |
视觉对比也很明显。比如这张运动模糊的照片,处理后文字清晰度提升显著:
code复制[模糊原图] -> [去模糊结果]
不过发现某些极端运动模糊场景效果仍不理想,这可能是因为:
CUDA内存不足:
验证集指标异常:
预测结果全黑/全蓝:
最近在尝试改进模型时,发现把FPN换成BiFPN能提升边缘细节的恢复效果。另外加入注意力机制后,对文字区域的去模糊有明显改善。这些修改都需要重新训练模型,建议先用小规模数据验证效果。