Real-ESRGAN训练指南:从零开始训练自己的超分辨率模型
读完本文你将掌握
- 超分辨率(Super-Resolution,SR)模型训练全流程
- 数据集预处理自动化脚本使用
- 训练参数调优策略与性能评估
- 基于自定义数据的模型微调技术
- 常见训练故障排查方案
1. 超分辨率训练痛点与解决方案
传统超分辨率模型训练面临三大核心挑战:
- 数据质量瓶颈:普通数据集难以覆盖真实场景的复杂退化模式
- 计算资源门槛:训练过程需要大量GPU内存与计算时间
- 调参复杂度:GAN网络训练不稳定,超参数组合多达20+项
本指南基于Real-ESRGAN的两阶段训练框架,通过结构化流程设计,将复杂问题拆解为可执行步骤,即使只有单GPU也能完成模型训练。
2. 环境准备与项目结构解析
2.1 开发环境配置
# 克隆项目仓库
git clone https://gitcode.com/gh_mirrors/re/Real-ESRGAN
cd Real-ESRGAN
# 创建虚拟环境
conda create -n realesrgan python=3.8 -y
conda activate realesrgan
# 安装依赖
pip install -r requirements.txt
2.2 项目核心文件功能
Real-ESRGAN/
├── realesrgan/train.py # 训练主程序入口
├── options/ # 训练配置文件目录
│ ├── train_realesrnet_x4plus.yml # ESRNet训练配置
│ └── train_realesrgan_x4plus.yml # ESRGAN训练配置
└── scripts/ # 数据处理脚本集
├── generate_multiscale_DF2K.py # 多尺度图像生成
└── generate_meta_info.py # 元信息文件生成
3. 数据集准备全流程
3.1 标准数据集获取
推荐使用DF2K+OST组合数据集(约80GB):
- DIV2K:包含1000张高分辨率训练图像
- Flickr2K:包含2650张高质量自然图像
- OST:包含5000张户外场景图像
提示:国内用户可通过OpenMMLab阿里云镜像加速下载
3.2 数据预处理流水线
3.2.1 多尺度图像生成
生成0.75×、0.5×、1/3×三种尺度的图像,增强模型尺度适应性:
python scripts/generate_multiscale_DF2K.py \
--input datasets/DF2K/DF2K_HR \
--output datasets/DF2K/DF2K_multiscale
3.2.2 子图像裁切
将大图像裁切为400×400子图像,减少IO开销:
python scripts/extract_subimages.py \
--input datasets/DF2K/DF2K_multiscale \
--output datasets/DF2K/DF2K_multiscale_sub \
--crop_size 400 \
--step 200 \
--n_thread 16
3.2.3 元信息文件生成
创建图像路径索引文件,加速训练数据加载:
python scripts/generate_meta_info.py \
--input datasets/DF2K/DF2K_HR datasets/DF2K/DF2K_multiscale \
--root datasets/DF2K datasets/DF2K \
--meta_info datasets/DF2K/meta_info.txt
3.3 自定义数据集适配
| 数据类型 | 准备步骤 | 适用场景 |
|---|---|---|
| 仅HR图像 | 直接执行3.2节流程 | 通用场景超分 |
| 已配对数据 | 使用generate_meta_info_pairdata.py | 特定退化模型训练 |
| 低质图像集 | 需先通过其他模型生成HR参考 | 历史照片修复 |
4. 两阶段训练框架详解
Real-ESRGAN采用两阶段训练策略,先训练生成器基础能力,再引入对抗训练提升视觉质量:
4.1 第一阶段:Real-ESRNet训练
4.1.1 预训练模型准备
# 创建模型保存目录
mkdir -p experiments/pretrained_models
# 下载ESRGAN预训练权重
wget https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.1/ESRGAN_SRx4_DF2KOST_official-ff704c30.pth \
-P experiments/pretrained_models
4.1.2 训练配置文件修改
修改options/train_realesrnet_x4plus.yml关键参数:
datasets:
train:
dataroot_gt: datasets/DF2K # 数据集根目录
meta_info: datasets/DF2K/meta_info.txt # 元信息文件路径
batch_size_per_gpu: 16 # 根据GPU内存调整,12GB显存推荐8-16
train:
total_iter: 400000 # 总迭代次数
optim_g:
lr: 1e-4 # 初始学习率
4.1.3 启动训练
# 单GPU训练
python realesrgan/train.py -opt options/train_realesrnet_x4plus.yml --auto_resume
# 多GPU分布式训练
CUDA_VISIBLE_DEVICES=0,1,2,3 \
python -m torch.distributed.launch --nproc_per_node=4 \
realesrgan/train.py -opt options/train_realesrnet_x4plus.yml --launcher pytorch
训练监控:通过TensorBoard查看损失曲线
tensorboard --logdir experiments/
4.2 第二阶段:Real-ESRGAN训练
4.2.1 训练配置关键参数
# options/train_realesrgan_x4plus.yml
network_g:
type: RRDBNet # 使用残差密集块网络结构
num_block: 23 # 23个RRDB块,平衡性能与计算量
train:
# 多损失函数配置
pixel_opt: # L1损失,保持基础保真度
loss_weight: 1.0
perceptual_opt: # 感知损失,提升视觉质量
perceptual_weight: 1.0
gan_opt: # GAN损失,增强细节真实感
loss_weight: 0.1
4.2.2 启动训练
# 使用第一阶段生成的ESRNet权重作为初始值
python realesrgan/train.py -opt options/train_realesrgan_x4plus.yml \
--auto_resume
4.3 训练过程监控
重点关注以下指标变化:
- PSNR:应稳定提升,最终在验证集上达到28-30dB
- 生成器损失:L1损失应低于0.015,GAN损失波动在0.5左右
- 判别器损失:稳定在0.6-0.8之间,避免模式崩溃
5. 自定义数据集微调实战
5.1 微调策略选择
5.2 动态降级微调流程
适用于只有HR图像的场景,训练时动态生成LQ图像:
- 准备预训练模型
# 下载官方预训练权重
wget https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth \
-P experiments/pretrained_models
wget https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.2.3/RealESRGAN_x4plus_netD.pth \
-P experiments/pretrained_models
- 修改微调配置
# options/finetune_realesrgan_x4plus.yml
path:
pretrain_network_g: experiments/pretrained_models/RealESRGAN_x4plus.pth
pretrain_network_d: experiments/pretrained_models/RealESRGAN_x4plus_netD.pth
train:
total_iter: 100000 # 微调迭代次数通常为基础训练的1/4
optim_g:
lr: 5e-5 # 使用较小学习率,避免破坏预训练特征
- 启动微调
python realesrgan/train.py -opt options/finetune_realesrgan_x4plus.yml \
--auto_resume
5.3 微调效果评估
推荐使用以下方法验证微调效果:
- 定量指标:计算PSNR、SSIM在测试集上的提升
- 定性比较:生成对比图,重点关注纹理细节和边缘清晰度
- 用户研究:让目标用户评估修复效果偏好
6. 常见问题解决方案
6.1 训练不稳定问题
| 症状 | 可能原因 | 解决方案 |
|---|---|---|
| GAN损失突然飙升 | 判别器过强 | 降低学习率至5e-5,增加梯度裁剪 |
| 生成图像模糊 | 生成器损失占比过高 | 降低L1损失权重至0.5 |
| 训练中断后无法恢复 | 检查点损坏 | 使用--auto_resume参数自动恢复 |
6.2 显存优化策略
- 减少批次大小:从16降至8,显存占用可减少约40%
- 启用混合精度:添加
--fp16参数,显存节省50%且速度提升30% - 梯度累积:设置
gradient_accumulation_steps: 4模拟大批次训练
6.3 模型导出与部署
训练完成后导出推理模型:
python scripts/pytorch2onnx.py \
--model_path experiments/train_RealESRGANx4plus_400k_B12G4/model/net_g_400000.pth \
--output realesrgan_x4.onnx
7. 高级训练技巧与性能优化
7.1 数据增强策略
- USM锐化:对GT图像应用USM锐化,增强高频细节学习
- 随机色彩抖动:添加±5%的亮度扰动,提升模型鲁棒性
- 噪声注入:在训练中动态添加高斯噪声,增强抗噪能力
7.2 网络结构改进
- 注意力机制:在RRDB块中添加通道注意力模块
- 特征融合:跨尺度特征融合,提升上下文理解能力
- 动态上采样:根据内容自适应调整上采样核大小
8. 总结与后续学习路径
通过本文学习,你已掌握Real-ESRGAN从环境搭建到模型训练的全流程。建议后续深入:
- 论文精读:理解感知损失与GAN损失的数学原理
- 代码研读:分析realesrgan_model.py中的退化过程实现
- 模型压缩:学习知识蒸馏和模型量化技术,部署到移动端
提示:训练过程中遇到问题,可在项目GitHub Issues中搜索解决方案,或加入Real-ESRGAN社区交流群获取支持。
附录:训练参数速查表
| 参数类别 | 关键参数 | 推荐值范围 |
|---|---|---|
| 网络配置 | num_block | 16-32 |
| 训练设置 | batch_size_per_gpu | 8-32 |
| 学习率 | optim_g.lr | 1e-4-5e-5 |
| 损失权重 | gan_opt.loss_weight | 0.05-0.2 |
| 数据增强 | gt_size | 256-512 |
如果觉得本指南有帮助,请点赞收藏,并关注获取更多超分辨率技术分享
下一篇预告:《Real-ESRGAN模型压缩与移动端部署实战》
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



