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
该镜像基于GPEN人像修复增强模型构建,预装了完整的深度学习开发环境,集成了推理及评估所需的所有依赖,开箱即用。用户无需手动配置复杂的 Python 环境或下载模型权重,可直接进入/root/GPEN目录开始图像增强任务。
2. 快速上手
2.1 激活环境
在使用 GPEN 模型前,请先激活预设的 Conda 环境:
conda activate torch25此环境已包含所有必要的依赖项和 CUDA 支持,确保推理过程高效稳定运行。
2.2 模型推理 (Inference)
进入模型主目录并执行推理脚本:
cd /root/GPEN场景 1:运行默认测试图
python inference_gpen.py该命令将处理内置的测试图像Solvay_conference_1927.jpg,输出结果为output_Solvay_conference_1927.png。
场景 2:修复自定义图片
python inference_gpen.py --input ./my_photo.jpg指定输入路径后,系统会自动检测人脸区域并进行高清重建,输出文件名为output_my_photo.jpg。
场景 3:自定义输入与输出文件名
python inference_gpen.py -i test.jpg -o custom_name.png通过-i和-o参数分别设置输入和输出路径,实现灵活命名与路径控制。
注意:所有推理结果将保存在项目根目录下,且支持
.jpg、.png等常见图像格式。
3. 批量处理需求分析
虽然原生inference_gpen.py脚本支持单张图像处理,但在实际应用场景中(如老照片修复、社交媒体头像优化、证件照增强等),往往需要对大量图像进行统一增强。手动逐张调用显然效率低下,因此构建一个自动化批量处理脚本成为必要。
本节将介绍如何基于现有推理逻辑,封装出适用于多图批量处理的 Python 脚本,并集成错误处理、进度提示和日志记录功能。
4. 构建批量处理脚本
4.1 设计目标
- 支持从指定文件夹读取所有图像
- 自动跳过非图像文件
- 并行或顺序执行推理任务
- 输出结果集中保存至新目录
- 添加异常捕获机制防止中断
- 显示处理进度条
4.2 完整脚本实现
以下是一个完整可运行的批量处理脚本batch_inference.py,建议放置于/root/GPEN目录下:
import os import glob import argparse from pathlib import Path import subprocess import sys from tqdm import tqdm def is_image_file(filepath): """判断是否为支持的图像格式""" ext = Path(filepath).suffix.lower() return ext in ['.jpg', '.jpeg', '.png', '.bmp', '.tiff'] def batch_process(input_dir, output_dir, model_size=512, gpu_id=0): """ 批量调用 GPEN 推理脚本处理图像 Args: input_dir: 输入图像文件夹路径 output_dir: 输出结果保存路径 model_size: 模型分辨率选择 (512/1024) gpu_id: 使用的 GPU 编号 """ # 创建输出目录 os.makedirs(output_dir, exist_ok=True) # 获取所有图像文件 image_paths = [f for f in glob.glob(os.path.join(input_dir, "*")) if is_image_file(f)] if not image_paths: print(f"⚠️ 在 {input_dir} 中未找到图像文件") return print(f"✅ 发现 {len(image_paths)} 张图像待处理") failed_files = [] # 遍历处理每张图像 for img_path in tqdm(image_paths, desc="Processing Images"): try: filename = os.path.basename(img_path) output_name = f"output_{Path(filename).stem}.png" output_path = os.path.join(output_dir, output_name) cmd = [ "python", "inference_gpen.py", "-i", img_path, "-o", output_path, "--model", str(model_size), "--gpu", str(gpu_id) ] result = subprocess.run(cmd, capture_output=True, text=True, timeout=120) if result.returncode != 0: raise RuntimeError(f"Subprocess error: {result.stderr}") except Exception as e: print(f"\n❌ 处理失败: {img_path}") print(f" 错误信息: {str(e)}") failed_files.append(img_path) # 输出统计信息 print("\n" + "="*50) print(f"📊 批量处理完成") print(f"📁 总数: {len(image_paths)}") print(f"✅ 成功: {len(image_paths) - len(failed_files)}") print(f"❌ 失败: {len(failed_files)}") if failed_files: print("📋 失败列表:") for f in failed_files: print(f" - {f}") if __name__ == "__main__": parser = argparse.ArgumentParser(description="GPEN 批量图像增强脚本") parser.add_argument("--input", type=str, required=True, help="输入图像文件夹路径") parser.add_argument("--output", type=str, default="output_batch", help="输出结果文件夹路径") parser.add_argument("--model", type=int, choices=[512, 1024], default=512, help="模型尺寸") parser.add_argument("--gpu", type=int, default=0, help="GPU 编号") args = parser.parse_args() batch_process(args.input, args.output, args.model, args.gpu)4.3 脚本使用说明
步骤 1:准备图像数据
将待处理的照片放入一个独立文件夹,例如:
mkdir /root/GPEN/input_photos cp ~/photos/*.jpg /root/GPEN/input_photos/步骤 2:运行批量脚本
python batch_inference.py --input input_photos --output enhanced_results --model 512 --gpu 0参数说明:
--input: 输入图像所在目录--output: 输出结果保存路径(自动创建)--model: 可选512或1024分辨率模型--gpu: 指定使用的 GPU 编号(多卡场景)
步骤 3:查看结果
处理完成后,可在enhanced_results/目录下查看所有增强后的图像,命名格式为output_原文件名.png。
4.4 进阶优化建议
| 优化方向 | 实现方式 |
|---|---|
| 并发处理 | 使用concurrent.futures.ThreadPoolExecutor提升吞吐量 |
| 日志记录 | 引入logging模块写入日志文件便于追踪 |
| 配置文件支持 | 添加 YAML 配置文件管理常用参数 |
| 图像预筛选 | 增加模糊度检测,过滤无效低质量图像 |
| 资源监控 | 添加显存占用监控,避免 OOM |
示例:启用线程池提升处理速度(部分修改):
from concurrent.futures import ThreadPoolExecutor with ThreadPoolExecutor(max_workers=2) as executor: list(tqdm(executor.map(process_single_image, image_paths), total=len(image_paths)))⚠️ 注意:由于 GPEN 模型本身较重,不建议设置过高并发数,推荐
max_workers=2~4。
5. 已包含权重文件
为保证开箱即用及离线推理能力,镜像内已预下载以下模型权重:
- ModelScope 缓存路径:
~/.cache/modelscope/hub/iic/cv_gpen_image-portrait-enhancement - 包含内容:完整的预训练生成器、人脸检测器及对齐模型。
首次运行时若未触发自动下载,请检查网络连接或手动验证缓存完整性。后续所有推理任务均可在无网环境下正常执行。
6. 常见问题与解决方案
6.1 图像无变化或输出为空
可能原因:
- 输入图像无人脸区域
- 文件路径权限不足导致无法写入
解决方法:
- 使用含清晰人脸的图像测试
- 检查输出目录是否有写权限:
chmod -R 755 output_batch
6.2 显存不足 (CUDA Out of Memory)
建议措施:
- 切换至
--model 512版本降低显存消耗 - 减少批量大小(当前为单张处理,已最小化压力)
- 关闭其他占用 GPU 的进程
6.3 文件编码或路径错误
Linux 系统中中文路径可能导致异常。建议:
- 将图像文件重命名为英文名称
- 使用绝对路径而非相对路径
7. 应用场景拓展
GPEN 不仅可用于普通人像美化,还可应用于多个专业领域:
| 场景 | 应用价值 |
|---|---|
| 历史影像修复 | 提升老旧黑白照片清晰度,还原人物细节 |
| 安防人脸识别 | 增强低分辨率监控画面中的人脸特征 |
| 医疗影像辅助 | 改善皮肤科图像质量以辅助诊断 |
| 虚拟形象生成 | 为人脸动画、数字人提供高质量纹理基础 |
结合自动化脚本,可快速构建面向行业的图像预处理流水线。
8. 参考资料
- 官方仓库:yangxy/GPEN
- 魔搭社区地址:iic/cv_gpen_image-portrait-enhancement
9. 引用 (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星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。