GPEN判别器学习率设置多少合适?调参经验分享
GPEN人像修复增强模型镜像
本镜像基于GPEN人像修复增强模型构建,预装了完整的深度学习开发环境,集成了推理及评估所需的所有依赖,开箱即用。
1. 镜像环境说明
| 组件 | 版本 |
|---|---|
| 核心框架 | PyTorch 2.5.0 |
| CUDA 版本 | 12.4 |
| Python 版本 | 3.11 |
| 推理代码位置 | /root/GPEN |
主要依赖库:
facexlib: 用于人脸检测与对齐basicsr: 基础超分框架支持opencv-python,numpy<2.0,datasets==2.21.0,pyarrow==12.0.1sortedcontainers,addict,yapf
2. 快速上手
2.1 激活环境
conda activate torch252.2 模型推理 (Inference)
进入代码目录并使用预置脚本进行推理测试:
cd /root/GPEN使用下面命令进行推理测试,可以通过命令行参数灵活指定输入图片。
# 场景 1:运行默认测试图 # 输出将保存为: output_Solvay_conference_1927.png python inference_gpen.py # 场景 2:修复自定义图片 # 输出将保存为: output_my_photo.jpg python inference_gpen.py --input ./my_photo.jpg # 场景 3:直接指定输出文件名 # 输出将保存为: custom_name.png python inference_gpen.py -i test.jpg -o custom_name.png推理结果将自动保存在项目根目录下,测试结果如下:
3. 已包含权重文件
为保证开箱即用及离线推理能力,镜像内已预下载以下模型权重(如果没有运行推理脚本会自动下载):
- ModelScope 缓存路径:
~/.cache/modelscope/hub/iic/cv_gpen_image-portrait-enhancement - 包含内容:完整的预训练生成器、人脸检测器及对齐模型。
4. 判别器学习率设置建议
4.1 学习率对训练稳定性的影响
在GPEN这类基于GAN结构的人像增强模型中,生成器和判别器的对抗训练非常关键。而判别器学习率(Discriminator Learning Rate)直接影响整个训练过程的收敛性和最终效果。
如果判别器学得太快,它会迅速“看穿”生成器的弱点,导致生成器梯度消失,无法有效更新;反之,如果判别器太弱,又会让生成器“放飞自我”,产生不真实或过度平滑的结果。
根据官方实现和社区实践,一个合理的初始设置是:
生成器学习率:2e-4,判别器学习率:1e-4
也就是说,判别器的学习率通常设为生成器的一半。这是为了保持两者之间的动态平衡,避免某一方过强压制另一方。
4.2 实际调参经验分享
我在使用该镜像进行微调时,尝试了多种学习率组合,总结出以下几点实用建议:
(1)从默认值开始微调
lr_g: 0.0002 # 生成器 lr_d: 0.0001 # 判别器这个配置适合大多数情况,尤其是当你使用FFHQ或类似质量的数据集时。建议先以此为基础跑通一轮训练,观察loss曲线是否平稳。
(2)观察Loss变化趋势
训练过程中重点关注两个指标:
D_loss:判别器损失,理想状态下应在0.3~0.7之间波动G_loss:生成器总损失,应缓慢下降并趋于稳定
如果出现以下情况,说明学习率可能需要调整:
- D_loss快速趋近于0 → 判别器太强 → 降低
lr_d - G_loss不降甚至上升 → 生成器跟不上 → 适当提高
lr_g或降低lr_d - 两者都剧烈震荡 → 整体学习率偏高 → 同时缩小
lr_g和lr_d
(3)不同分辨率下的调整策略
GPEN支持多种分辨率(如256x256、512x512、1024x1024),随着分辨率升高,图像细节更丰富,训练难度也更大。
| 分辨率 | 推荐判别器学习率 | 说明 |
|---|---|---|
| 256x256 | 1e-4 | 标准设置,收敛快 |
| 512x512 | 5e-5 ~ 8e-5 | 建议略低于标准值,防止过拟合 |
| 1024x1024 | 2e-5 ~ 5e-5 | 高分辨率需更小步长,避免崩塌 |
高分辨率训练时,我倾向于采用渐进式升温策略:前10个epoch用较小学习率(如2e-5)暖机,待特征分布稳定后再逐步提升至目标值。
(4)优化器选择也很重要
GPEN默认使用Adam优化器,其参数一般设为:
betas=(0.9, 0.99) eps=1e-8不要随意更改这些值。特别是beta2=0.999虽然常见,但在GPEN中可能导致判别器更新滞后,影响对抗平衡。
5. 完整训练配置示例
以下是一个适用于512x512人像修复任务的推荐配置片段(来自options/train_GAN_stage.yml):
train: lr_g: 0.0002 lr_d: 0.00008 beta1: 0.9 beta2: 0.99 weight_decay_g: 0 weight_decay_d: 0 d_update_ratio: 1 # 每次G更新后D更新1次 d_update_priority: true scheduler: CosineAnnealingLR T_period: [50, 50, 50, 50] T_mul: 1 eta_min: 1e-7其中:
d_update_ratio控制D/G更新频率比,设为1表示每步都更新CosineAnnealingLR能在后期精细调整,避免陷入局部最优eta_min设置最小学习率,防止后期波动过大
6. 提升训练效果的实用技巧
6.1 数据预处理要到位
GPEN对输入数据的质量敏感。建议:
- 所有图像统一裁剪到正方形(中心人脸对齐)
- 使用
BSRGAN或RealESRGAN生成低质配对图,模拟真实退化 - 训练时做随机翻转、轻微旋转增强,但避免过度扭曲面部结构
6.2 监控生成质量而非仅看Loss
光看Loss容易误判。建议每5个epoch保存一批样例图,肉眼检查:
- 是否有伪影、模糊块、颜色失真
- 五官结构是否自然,皮肤纹理是否合理
- 头发边缘是否清晰但不过锐
可以写个简单脚本定期生成对比图,方便横向比较不同阶段的效果。
6.3 使用预训练权重冷启动
直接从头训练耗时且难收敛。建议:
- 先加载官方提供的预训练生成器权重
- 固定生成器训练判别器前5~10个epoch(warm-up)
- 再放开所有参数联合微调
这样能显著提升训练稳定性,尤其适合小数据集场景。
6.4 合理设置batch size
Batch size会影响BN层表现和梯度估计精度。推荐:
- 单卡V100/A100:
batch_size=8~16(512x512) - 显存不足时可用
gradient_accumulation_steps=2~4补偿
太小的batch会导致风格不稳定,太大会让判别器过于强势。
7. 总结
## 7.1 关键结论回顾
- GPEN判别器学习率建议设为生成器的一半,典型值为1e-4(256)、8e-5(512)、5e-5(1024)
- 高分辨率训练需降低学习率,并配合余弦退火调度器
- 判别器不能学得太快,否则会压制生成器,造成模式崩溃
- 实际调参应结合loss曲线与视觉效果综合判断
## 7.2 我的调参口诀
“先稳后精,D缓G快;
看图说话,别信loss alone;
预训练打底,数据为王。”
只要把握住生成器与判别器之间的“对抗节奏”,就能训出高质量的人像修复模型。希望这些实战经验能帮你少走弯路。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。