批处理文件夹:一次跑完整个相册的人脸修复
最简单的批量命令
python inference_codeformer.py -w 0.7 \
--bg_upsampler realesrgan --face_upsample \
--input_path D:/old_photos/ \
--output_path D:/restored/
就这一行。脚本会自动遍历 D:/old_photos/ 及其子目录里的所有图片文件(jpg / jpeg / png / bmp)。
批量处理的核心参数
| 参数 | 说明 | 批量场景建议 |
|---|---|---|
| -w | 所有图片用同一个 w 值 | 老照片统一 w=0.65,AI 生图统一 w=0.3 |
| --bg_upsampler | 每张图都开背景增强 | 批处理建议开,省得一张一张手动 |
| --face_upsample | 每张图都开人脸上采样 | 同上 |
| --has_aligned | 是否跳过检测对齐 | 批量时通常不开(输入是原始相册) |
| --output_path | 统一输出目录 | 建议设一个独立目录,结果集中管理 |
脚本的遍历逻辑
CodeFormer 内部用 os.walk() 递归遍历,这意味着:
- ✅ 子目录会被处理(
photos/beach/,photos/family/都会跑到) - ✅ 大小写不敏感(.JPG .Jpeg 都能识别)
- ❌ 不支持并行(逐张串行处理)
提速技巧
1. 关掉 --bg_upsampler(省 30% 时间)
如果背景不是重点,直接修脸就行:
python inference_codeformer.py -w 0.6 --input_path photos/
2. 先离线裁脸(省 50% 时间)
批量跑前先批量裁脸对齐,再用 --has_aligned 模式:
# 第一步:批量裁脸
python scripts/crop_align_face.py -i photos/ -o faces_aligned/
# 第二步:批量修复(跳过检测对齐)
python inference_codeformer.py -w 0.6 --has_aligned --input_path faces_aligned/
3. 多 GPU 并行(高级)
单卡跑批量是串行的。如果你有多张 GPU,可以用 split 把输入文件夹分几份,每个 GPU 一个进程:
# GPU 0
python inference_codeformer.py -w 0.6 --input_path photos_part1/ --output_path results_part1/
# GPU 1(另开一个终端,CUDA_VISIBLE_DEVICES=1)
CUDA_VISIBLE_DEVICES=1 python inference_codeformer.py -w 0.6 \
--input_path photos_part2/ --output_path results_part2/
批量脚本模板
#!/bin/bash
# batch_restore.sh —— Windows 用户把 .sh 改成 .bat
INPUT_DIR="D:/old_photos"
OUTPUT_DIR="D:/restored"
W_VALUE=0.7
USE_BG_UPSAMPLER=true
mkdir -p "$OUTPUT_DIR"
START_TIME=$(date +%s)
if [ "$USE_BG_UPSAMPLER" = true ]; then
python inference_codeformer.py \
-w $W_VALUE -s 2 \
--bg_upsampler realesrgan --face_upsample \
--input_path "$INPUT_DIR" \
--output_path "$OUTPUT_DIR"
else
python inference_codeformer.py \
-w $W_VALUE -s 2 \
--input_path "$INPUT_DIR" \
--output_path "$OUTPUT_DIR"
fi
END_TIME=$(date +%s)
ELAPSED=$((END_TIME - START_TIME))
echo "完成!耗时 ${ELAPSED} 秒"
批量常见问题
部分图片处理失败
CodeFormer 遇到坏图 / 无脸图会跳过并打印 warning,不会中断整个批量。跑完后检查输出目录——有多少张输入图、多少张输出图,差了哪些。
常见跳过原因:
- 图片里没人脸(YOLOv5 检测不到)
- 图片损坏或格式不支持
- 显存临时不足(重启 GPU 后重跑)
输出文件名冲突
脚本会保留原文件名。如果子目录里有重名文件,可能会覆盖——建议输入文件夹按人员/地点组织,文件名唯一。
磁盘空间
批量跑前算好磁盘:每张输出图比输入图大 2~5 倍(修复后细节更多、PNG 格式默认无损)。1000 张照片至少留 50GB 空间。
暂停和恢复
CodeFormer 批量处理不支持断点续跑——中断后重开会从头开始。所以:
- 批量前先处理几张确认 w 值合适
- 大批量建议写一个 wrapper,记录已处理的文件列表
- 或者拆成多批,每批 100 张