对齐人脸修复(has_aligned 模式):最快、最稳定的 CodeFormer 用法
什么时候用 --has_aligned
如果你的图片已经是裁好并对齐到 512×512 的人脸(只有脸、没有背景),用 --has_aligned 模式:
python inference_codeformer.py -w 0.7 --has_aligned --input_path [图片或文件夹]
为什么更快更稳
常规整图处理流程:
- YOLOv5 人脸检测(0.1s)
- dlib / 5 点 landmark 对齐(0.1s)
- CodeFormer 推理(0.2s)
- back projection 融合回原图(0.05s)= ~0.45s/张
--has_aligned 流程:
- CodeFormer 推理(0.2s)= ~0.2s/张
省掉检测+对齐+融合三步。对于已经有人脸检测结果的批量场景(如从视频里抽帧、从相册里批量挑头像),效率提升一倍以上。
准备对齐好的人脸
方式一:用 CodeFormer 自带脚本
python scripts/crop_align_face.py -i inputs/TestWhole -o inputs/cropped_faces
这一步需要 dlib(参考 dlib 安装 页)。脚本会自动检测人脸、对齐、输出 512×512 的裁切结果。
方式二:手动准备
如果你不想装 dlib,可以自己用 OpenCV 或其他工具把人脸裁出来:
- 输出尺寸必须是 512×512
- 人脸在画面居中,占比约 70-80%
- 两个眼睛基本同一水平线
- 文件名随便起(脚本递归读文件夹)
对齐的质量影响修复效果
CodeFormer 对对齐精度很敏感:
- 对齐差 → CodeFormer 看到的脸"歪了",修复结果也歪
- 对齐好 → 修复质量上限更高
5 点 landmark 对齐(两眼 + 鼻子 + 两嘴角)是 CodeFormer 的黄金标准。
完整命令
单张图片
python inference_codeformer.py -w 0.7 --has_aligned --input_path inputs/cropped_faces/photo.png
批量文件夹
python inference_codeformer.py -w 0.6 --has_aligned --input_path inputs/cropped_faces/
脚本会自动遍历文件夹里所有 jpg/jpeg/png/bmp。
自定义输出目录
python inference_codeformer.py -w 0.7 --has_aligned \
--input_path inputs/cropped_faces/ \
--output_path results/my_output/
不指定 --output_path 时默认输出到 results/CodeFormer_aligned/。
参数说明
| 参数 | 简写 | 默认 | 说明 |
|---|---|---|---|
| --fidelity_weight | -w | 0.5 | w 权重,0=质量好,1=身份准 |
| --upscale | -s | 2 | 最终上倍倍率(2 / 4) |
| --has_aligned | — | False | 必须显式传才启用对齐模式 |
| --input_path | — | — | 单张图片或文件夹路径 |
| --output_path | — | results/CodeFormer_aligned | 输出目录 |
--bg_upsampler 和 --face_upsample 在 --has_aligned 模式下不起作用(没有背景、不需要再上采样)。
典型输出
输入是 inputs/cropped_faces/portrait.jpg,w=0.7:
[Restoration] - Faces: 1
[Restoration] - Time: 0.21s for portrait.jpg
Saving results/CodeFormer_aligned/portrait.png
输出的是仅人脸(512×512,按 upscale 参数上采样),不包含原图背景。
怎么挑 w 值
见 w 权重调参指南。快速参考:
- 老照片(家人长辈):w=0.7
- AI 生图:w=0.3
- 只想好看:w=0.2~0.4
- 只想像本人:w=0.8~1.0