codeformer 中文文档 下载 App

整图自动检测修复:一键把照片里的人脸全修了

最简单的命令

python inference_codeformer.py -w 0.7 --input_path photo.jpg

就这一行。脚本自动完成:

  1. 检测图片里所有的人脸
  2. 把每张脸裁切并对齐到 512×512
  3. 逐张送入 CodeFormer 修复
  4. 将修复后的人脸 back projection 融合回原图
  5. 输出完整的修复后图片

整图处理 vs 对齐处理

维度整图(默认)对齐(--has_aligned)
输入要求任意整图512×512 对齐人脸
是否需要人脸检测是否
是否需要 dlib可选(用 YOLOv5 也行)否
速度慢 2~3 倍快
显存更高(要同时装检测模型)更低
输出完整整图只有人脸
边界融合伪影有无

完整参数

python inference_codeformer.py \
    -w 0.7 \
    -s 2 \
    --input_path inputs/TestWhole/ \
    --output_path results/whole_enhanced/ \
    --bg_upsampler realesrgan \
    --face_upsample

参数详解

参数默认说明
-w / --fidelity_weight0.5w 权重
-s / --upscale2最终上倍倍率
--bg_upsamplerNone背景增强器。填 realesrgan 用 Real-ESRGAN 增强背景
--face_upsampleFalse修复后人脸再用 Real-ESRGAN 上采样
--input_path—单图或文件夹
--output_pathresults/输出目录

关键选项:背景增强和人脸上采样

--bg_upsampler realesrgan

强烈推荐。只修人脸不修背景的话,修复后的人脸和原图背景的分辨率差异会很明显(像"贴图")。加上这个选项后,背景区域也用 Real-ESRGAN 增强到和人脸修复结果同水平。

代价:显存 +4GB,时间 +30%。

--face_upsample

修复后人脸再上采样。如果原图很大(如 4K),修复出来的 512×512 脸贴回去可能显得小。加这个选项可以用 Real-ESRGAN 把修复脸再放大。

代价:显存 +2GB,时间 +20%。

组合建议

场景--bg_upsampler--face_upsample
快速预览❌❌
成品输出(照片级)✅✅
显存紧张(< 12GB)❌❌
4K 大图✅✅

输出目录结构

假设输入文件夹 inputs/TestWhole/ 里有 photo1.jpg 和 photo2.jpg:

results/
└── CodeFormer_w0.7_s2/
    ├── photo1.jpg           # 最终输出
    ├── photo1_restored_faces/  # 被修的人脸(调试用)
    ├── photo2.jpg
    └── photo2_restored_faces/

*_restored_faces/ 里会保存每张被检测到的人脸的单独修复结果,方便你看修复效果或挑具体人脸。

边界融合的伪影问题

整图处理最常见的问题是修复脸和原图背景的接缝处产生伪影——尤其是头发、下颌线、耳朵附近。

为什么会有

修复流程是:检测脸 → 裁脸 → 修脸 → 贴回去。贴回去时用了 back projection 方式试图让边界平滑,但以下情况还是容易出问题:

怎么减少

  1. 用 --bg_upsampler realesrgan(背景也增强,分辨率差变小)
  2. 适当增大 w 值(w 大时 CodeFormer 保留更多原图特征,融合更自然)
  3. 后期用 Photoshop 的模糊工具手动修一下边界
  4. 实在不行,改用 --has_aligned 模式只修脸,再自己贴回

多张脸的照片

代码会自动检测到的所有人脸逐一修复。同一张照片里有 5 张脸就修 5 张。如果某张脸太小(像素太少),YOLOv5 可能检测不到——此时这张脸不会被修复。