GPEN实战教程:如何准备高质量-低质量图像配对数据集
1. 引言
1.1 学习目标
本文旨在为使用GPEN人像修复增强模型的开发者和研究人员提供一套完整、可落地的数据准备流程。通过本教程,您将掌握:
- 如何构建用于监督式训练的高质量与低质量(HQ-LQ)人脸图像配对数据集
- 使用主流降质方法(如RealESRGAN、BSRGAN)生成逼真的低质量图像
- 数据预处理、对齐与组织的最佳实践
- 在CSDN星图镜像环境中快速验证数据集效果
完成本教程后,您即可基于自定义或公开数据集开展GPEN模型的微调或再训练任务。
1.2 前置知识
建议读者具备以下基础:
- 熟悉Python编程与基本图像处理操作(OpenCV/PIL)
- 了解深度学习框架PyTorch的基本用法
- 对超分辨率、图像修复等任务有一定理解
本教程基于CSDN提供的“GPEN人像修复增强模型镜像”环境展开,已预装所有必要依赖,无需额外配置。
2. 高质量-低质量图像配对原理
2.1 监督式训练的核心需求
GPEN采用监督学习范式进行训练,其核心是输入一对图像:
- 低质量图像(Low-Quality, LQ):模糊、噪声、压缩失真等人像退化版本
- 高质量图像(High-Quality, HQ):清晰、细节丰富的真实高分辨人像
模型目标是从LQ图像中恢复出接近HQ的细节,因此每张LQ必须有对应的HQ作为监督信号。
关键点:LQ与HQ必须严格对齐(同一人物、相同姿态、无裁剪偏移),否则会导致训练不稳定或伪影生成。
2.2 理想配对数据特征
| 特征 | 说明 |
|---|---|
| 语义一致性 | LQ与HQ应为同一张原始图像的不同退化版本 |
| 空间对齐性 | 人脸关键点(眼、鼻、嘴)需精确对齐 |
| 退化多样性 | 包含多种模糊、噪声、下采样组合以提升泛化能力 |
| 分辨率匹配 | 推荐统一为512×512或1024×1024,符合GPEN默认输入尺寸 |
3. 数据准备全流程
3.1 准备高质量图像源
推荐数据集
- FFHQ (Flickr-Faces-HQ):70,000张高分辨率人脸,广泛用于生成模型训练
- CelebA-HQ:30,000张名人高清人脸,适合小规模实验
- 自建数据集:确保图像清晰、正面居中、光照良好
图像预处理步骤
import cv2 import os from facexlib.detection import RetinaFaceDetector def align_and_crop_face(image_path, output_dir, target_size=512): # 初始化人脸检测器 detector = RetinaFaceDetector() img = cv2.imread(image_path) bboxes, landmarks = detector.detect_faces(img) if len(landmarks) == 0: print(f"No face detected in {image_path}") return # 使用五点对齐(两眼、鼻尖、嘴角) aligned_face = detector.align_multi(img, landmarks[0], target_size=target_size) filename = os.path.basename(image_path) cv2.imwrite(os.path.join(output_dir, filename), aligned_face) # 批量处理示例 hq_source_dir = "/path/to/hq_images" output_hq_dir = "/path/to/aligned_hq" os.makedirs(output_hq_dir, exist_ok=True) for file in os.listdir(hq_source_dir): align_and_crop_face(os.path.join(hq_source_dir, file), output_hq_dir)提示:
facexlib已在镜像中预装,可直接调用RetinaFaceDetector实现精准对齐。
3.2 构建低质量图像(图像降质)
方法一:使用 BSRGAN 进行真实感退化(推荐)
BSRGAN 模拟真实相机退化过程(模糊+噪声+JPEG压缩),比简单双三次下采样更贴近实际场景。
# 克隆 BSRGAN 项目 git clone https://github.com/cszn/BSRGAN.git cd BSRGAN # 激活环境并运行降质脚本 conda activate torch25 python inference_bsrgan.py --input /path/to/aligned_hq --output /path/to/lq_images --scale 4参数说明:
--scale 4:生成1/4尺寸的低质图像(如512→128)- 可选
--noise 10添加高斯噪声强度 - 支持批量处理整个文件夹
方法二:使用 RealESRGAN 内置降质模块
RealESRGAN 提供realesrgan-dataset-preprocess工具,支持多尺度退化。
# 安装 RealESRGAN(镜像中已包含) pip install realesrgan # 执行降质 realesrgan-dataset-preprocess \ -i /path/to/aligned_hq \ -o /path/to/lq_images \ --scale 4 \ --crop_size 512 \ --suffix "_lq"该工具会自动应用随机模糊核、噪声和压缩,生成更具多样性的LQ图像。
3.3 构建配对数据结构
训练时需保证HQ与LQ文件名一致,便于按名称匹配读取。
dataset/ ├── train/ │ ├── hq/ │ │ ├── img001.png │ │ ├── img002.png │ │ └── ... │ └── lq/ │ ├── img001.png │ ├── img002.png │ └── ... └── val/ ├── hq/ └── lq/文件名同步脚本示例
import os import shutil def sync_filenames(hq_dir, lq_dir, output_lq_dir): """确保LQ图像与HQ同名""" os.makedirs(output_lq_dir, exist_ok=True) hq_files = {f.split('.')[0]: f for f in os.listdir(hq_dir) if f.lower().endswith(('.png', '.jpg', '.jpeg'))} lq_files = {f.split('_lq')[0]: f for f in os.listdir(lq_dir) if '_lq' in f} for base_name, hq_file in hq_files.items(): if base_name in lq_files: src = os.path.join(lq_dir, lq_files[base_name]) dst = os.path.join(output_lq_dir, hq_file) # 使用HQ的文件名 shutil.copy(src, dst) else: print(f"Warning: No LQ found for {hq_file}") sync_filenames("/path/to/hq", "/path/to/lq_raw", "/path/to/lq")4. 数据验证与可视化
4.1 配对图像对比查看
编写简单脚本检查对齐效果:
import cv2 import numpy as np def visualize_pair(hq_path, lq_path): hq = cv2.imread(hq_path) lq = cv2.imread(lq_path) # 上采样LQ以便对比 lq_up = cv2.resize(lq, (hq.shape[1], hq.shape[0]), interpolation=cv2.INTER_CUBIC) # 拼接显示 comparison = np.hstack([lq_up, hq]) cv2.imshow("LQ (left) vs HQ (right)", comparison) cv2.waitKey(0) cv2.destroyAllWindows() visualize_pair("dataset/train/hq/img001.png", "dataset/train/lq/img001.png")4.2 使用GPEN推理初步测试
进入镜像环境,使用预训练模型测试LQ→HQ恢复效果:
cd /root/GPEN python inference_gpen.py --input dataset/train/lq/img001.png --output test_restore.png观察输出图像是否保留自然肤色、纹理细节,避免过度平滑或伪影。
5. 训练配置建议
5.1 数据加载设置
修改options/train/GPEN_512.yml中的数据路径:
datasets: train: name: FFHQ type: PairedImageDataset dataroot_gt: /path/to/dataset/train/hq dataroot_lq: /path/to/dataset/train/lq filename_tmpl: '{}' io_backend: type: disk5.2 关键训练参数调整
| 参数 | 推荐值 | 说明 |
|---|---|---|
lr_g | 2e-4 | 生成器学习率 |
lr_d | 1e-4 | 判别器学习率 |
warmup_iter | 3000 | 学习率预热步数 |
total_iter | 300000 | 总迭代次数 |
batch_size | 8~16 | 根据GPU显存调整 |
size | 512 | 输入图像尺寸 |
启动训练:
python train.py -opt options/train/GPEN_512.yml6. 总结
6.1 核心要点回顾
- 数据质量决定上限:HQ图像必须清晰、对齐;LQ应模拟真实退化。
- 配对一致性至关重要:文件名、空间位置、人脸姿态必须严格对应。
- 推荐使用BSRGAN/RealESRGAN降质:相比传统方法更能提升模型鲁棒性。
- 善用镜像内置工具链:
facexlib实现精准对齐,inference_gpen.py快速验证效果。
6.2 下一步建议
- 尝试在FFHQ子集上微调GPEN,观察不同退化策略的影响
- 加入更多极端姿态或遮挡样本,提升模型泛化能力
- 探索无监督或自监督方式减少对配对数据的依赖
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。