Real-ESRGAN训练指南:从零开始训练自己的超分辨率模型

Real-ESRGAN训练指南:从零开始训练自己的超分辨率模型

【免费下载链接】Real-ESRGAN Real-ESRGAN aims at developing Practical Algorithms for General Image/Video Restoration. 【免费下载链接】Real-ESRGAN 项目地址: https://gitcode.com/gh_mirrors/re/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 数据预处理流水线

mermaid

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采用两阶段训练策略,先训练生成器基础能力,再引入对抗训练提升视觉质量:

mermaid

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 微调策略选择

mermaid

5.2 动态降级微调流程

适用于只有HR图像的场景,训练时动态生成LQ图像:

  1. 准备预训练模型
# 下载官方预训练权重
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
  1. 修改微调配置
# 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  # 使用较小学习率,避免破坏预训练特征
  1. 启动微调
python realesrgan/train.py -opt options/finetune_realesrgan_x4plus.yml \
  --auto_resume

5.3 微调效果评估

推荐使用以下方法验证微调效果:

  1. 定量指标:计算PSNR、SSIM在测试集上的提升
  2. 定性比较:生成对比图,重点关注纹理细节和边缘清晰度
  3. 用户研究:让目标用户评估修复效果偏好

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从环境搭建到模型训练的全流程。建议后续深入:

  1. 论文精读:理解感知损失与GAN损失的数学原理
  2. 代码研读:分析realesrgan_model.py中的退化过程实现
  3. 模型压缩:学习知识蒸馏和模型量化技术,部署到移动端

提示:训练过程中遇到问题,可在项目GitHub Issues中搜索解决方案,或加入Real-ESRGAN社区交流群获取支持。

附录:训练参数速查表

参数类别关键参数推荐值范围
网络配置num_block16-32
训练设置batch_size_per_gpu8-32
学习率optim_g.lr1e-4-5e-5
损失权重gan_opt.loss_weight0.05-0.2
数据增强gt_size256-512

如果觉得本指南有帮助,请点赞收藏,并关注获取更多超分辨率技术分享

下一篇预告:《Real-ESRGAN模型压缩与移动端部署实战》

【免费下载链接】Real-ESRGAN Real-ESRGAN aims at developing Practical Algorithms for General Image/Video Restoration. 【免费下载链接】Real-ESRGAN 项目地址: https://gitcode.com/gh_mirrors/re/Real-ESRGAN

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值