GPEN项目目录结构详解:核心文件定位与修改建议
GPEN人像修复增强模型镜像
本镜像基于GPEN人像修复增强模型构建,预装了完整的深度学习开发环境,集成了推理及评估所需的所有依赖,开箱即用。
1. 镜像环境说明
该镜像为GPEN人像修复任务提供了完整、稳定且高效的运行环境。所有组件均已预先配置并测试通过,用户无需手动安装依赖即可直接进行推理或二次开发。
| 组件 | 版本 |
|---|---|
| 核心框架 | PyTorch 2.5.0 |
| CUDA 版本 | 12.4 |
| Python 版本 | 3.11 |
| 推理代码位置 | /root/GPEN |
1.1 主要依赖库解析
facexlib: 负责人脸检测和关键点对齐,是前置处理的关键模块,确保输入图像中的人脸被正确识别和标准化。basicsr: 提供基础的超分辨率支持,包括数据加载、模型定义和训练流程管理,GPEN在此基础上扩展了生成器结构。opencv-python,numpy<2.0: 图像读取与数值计算的基础库,版本锁定以避免兼容性问题。datasets==2.21.0,pyarrow==12.0.1: 若涉及大规模数据集加载(如FFHQ),这两个库能高效处理磁盘缓存和批量读取。sortedcontainers,addict,yapf: 辅助工具库,分别用于有序容器管理、字典对象增强和代码格式化。
提示:所有依赖均已在
conda环境torch25中预装,激活后可立即使用。
2. 快速上手
2.1 激活环境
启动容器后,首先激活预设的 Conda 环境:
conda activate torch25此环境名称来源于 PyTorch 版本号命名习惯,便于区分不同项目间的依赖隔离。
2.2 模型推理 (Inference)
进入主代码目录开始操作:
cd /root/GPEN推理命令示例
GPEN 提供了灵活的命令行接口,支持多种调用方式,满足不同场景需求。
- 场景 1:运行默认测试图
python inference_gpen.py该命令将自动加载内置测试图像Solvay_conference_1927.jpg,输出结果保存为output_Solvay_conference_1927.png。
- 场景 2:修复自定义图片
python inference_gpen.py --input ./my_photo.jpg只需指定--input参数,系统会自动完成人脸检测、对齐、增强和保存全过程。输出文件名为output_my_photo.jpg。
- 场景 3:自定义输入与输出路径
python inference_gpen.py -i test.jpg -o custom_name.png支持短参数-i和-o,方便脚本化调用。输出路径可包含相对或绝对路径,若目录不存在需提前创建。
注意:所有推理结果默认保存在项目根目录下,即
/root/GPEN/,建议定期备份重要输出。
图示:原始低清图像经 GPEN 增强后的效果对比(右侧为增强结果)
3. 已包含权重文件
为了实现真正的“开箱即用”,镜像内已集成官方发布的预训练权重,避免用户因网络问题无法下载导致中断。
3.1 权重存储路径
模型权重由 ModelScope 平台提供,并缓存在以下路径:
~/.cache/modelscope/hub/iic/cv_gpen_image-portrait-enhancement该目录下包含:
- 生成器权重(Generator):负责从低质量图像恢复细节纹理。
- 人脸检测模型:基于 RetinaFace 实现,用于精确定位面部区域。
- 关键点对齐模型:确保人脸姿态标准化,提升增强一致性。
3.2 自动加载机制
当执行inference_gpen.py时,程序会检查本地是否存在对应权重。若缺失,则尝试从 ModelScope 下载;但在当前镜像中,这些文件已全部预置,因此不会触发下载流程,保障离线可用性。
建议:如需更换模型版本或使用自定义训练权重,请将
.pth文件放入上述目录,并修改配置文件中的pretrain_network_g字段指向新路径。
4. 项目目录结构深度解析
了解 GPEN 的目录组织方式,有助于快速定位核心文件并进行定制化修改。
4.1 根目录概览
/root/GPEN/ ├── configs/ # 配置文件目录 ├── datasets/ # 数据集相关脚本(可选) ├── models/ # 模型定义(生成器、判别器等) ├── utils/ # 工具函数(图像处理、日志、指标计算) ├── face/ # 人脸检测与对齐模块(封装 facexlib) ├── inference_gpen.py # 主推理脚本 ├── README.md # 官方说明文档 └── requirements.txt # 依赖列表(参考用)4.2 核心文件定位与功能说明
inference_gpen.py
这是最常用的入口脚本,封装了完整的推理流程:
- 加载输入图像
- 调用人脸检测与对齐模块
- 输入到 GPEN 生成器进行增强
- 保存输出图像
修改建议:
- 若需批量处理多张图片,可在循环中调用
infer_one_image()方法。 - 添加 GPU 显存监控逻辑,防止大图推理时 OOM。
- 支持透明通道(RGBA)图像输入,需在
cv2.imread后增加 alpha 通道保留逻辑。
configs/gpen_config.yml
配置文件控制模型行为,例如:
network_g: type: GPENNet—— 定义网络结构path: pretrain_network_g—— 指定权重路径scale: 1—— 超分倍率(GPEN 主要用于画质增强而非放大)
修改建议:
- 可复制一份配置命名为
gpen_512.yml,专用于 512×512 分辨率输入。 - 增加
save_intermediate字段,用于调试中间特征图。
models/gpen_model.py
核心模型类定义,继承自BaseModel,包含:
- 生成器初始化
- 前向传播逻辑
- 损失函数(训练时使用)
- 模型保存与加载接口
修改建议:
- 如需轻量化部署,可替换部分 ResBlock 为 MobileBlock。
- 添加
export_onnx()方法,便于后续转为 ONNX 或 TensorRT 推理。
face/detection.py与face/align.py
基于facexlib封装的人脸处理模块,负责:
- 检测人脸边界框
- 提取 5 点或 68 点关键点
- 进行仿射变换对齐
修改建议:
- 若目标场景为人脸偏侧角度较大,可引入 3DMM 对齐方法替代二维仿射。
- 缓存对齐参数,便于反向映射回原图坐标系。
5. 常见问题与优化建议
5.1 数据集准备
GPEN 采用监督式训练策略,依赖高质量-低质量图像对。官方推荐使用 FFHQ 数据集作为高清源。
降质方案建议:
- 使用 RealESRGAN 的退化 pipeline 生成逼真的低质样本
- 或采用 BSRGAN 的随机模糊+噪声注入方式
- 注意保持颜色分布一致,避免色偏影响生成器判断
示例命令(假设已有高清图像目录):
python datasets/degrade_ffhq.py --input_dir high_res/ --output_dir low_res/ --scale 4
5.2 训练流程配置
虽然镜像主要面向推理,但也可用于微调或重新训练。
关键训练参数设置:
| 参数 | 推荐值 | 说明 |
|---|---|---|
batch_size | 8~16 | 取决于显存大小(A100 推荐 16) |
lr_g | 1e-4 | 生成器学习率 |
lr_d | 5e-5 | 判别器学习率 |
num_epochs | 100~200 | 视数据量调整 |
img_size | 512x512 | 推荐标准尺寸,兼顾效果与速度 |
启动训练示例:
python train.py -opt configs/gpen_512.yml注意:训练前请确认
datasets/train_filelist.txt已正确列出图像对路径。
5.3 性能优化技巧
- 显存不足?使用
--tile参数开启分块推理,适用于大于 1024×1024 的图像。 - 速度慢?将模型导出为 ONNX 格式,在 TensorRT 中部署可提速 3 倍以上。
- 边缘伪影?在对齐阶段扩大裁剪边距,减少边界截断带来的 artifacts。
6. 参考资料
- 官方仓库:yangxy/GPEN
- 魔搭社区地址:iic/cv_gpen_image-portrait-enhancement
7. 引用 (Citation)
@inproceedings{yang2021gpen, title={GAN-Prior Based Null-Space Learning for Consistent Super-Resolution}, author={Yang, Tao and Ren, Peiran and Xie, Xuansong and Zhang, Lei}, booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)}, year={2021} }获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。