codeformer 中文文档 下载 App

重名人人脸修复:身份保真度极限测试(CodeFormer vs GFPGAN)

为什么名人照片是好测试

普通照片修得"像不像本人"只有当事人知道,但名人照片大家都认识——这使得它成为人脸修复模型身份保真度的绝佳 benchmark:

CodeFormer 身份保持的秘密

CodeFormer 在身份保持上的优势来自两个设计:

1. Codebook token 有明确对应关系

Codebook token 序列对应着人脸的具体视觉元素组合——不是模糊的"这看起来像真人",而是"这张脸的眼睛 token 是 XXX,鼻子 token 是 YYY"。当 w 大时,残差连接把原图的 token 序列锚定住,解码器不会乱改。

2. w 权重显式控制

GFPGAN 的 GAN 倾向于把任何脸推向"平均理想脸"(网红脸),没有任何参数可以阻止。CodeFormer 加 w 就能强行把输出拉回原图的 token 序列。

实测:同一个人的老照片

假设你有一张模糊的 20 年前的名人照:

模型参数修复结果
GFPGANv1.4默认✅ 清晰锐利,但明星脸被"美化"——眼睛更大、下颌更尖、皮肤更光滑,看起来像但不太像那个年代的明星
CodeFormerw=0.5✅ 两边折中,清晰且和原图还像
CodeFormerw=0.8✅ 清晰且几乎和原图一模一样——只是把模糊的地方补上细节,没有"美化"
CodeFormerw=1.0清晰度略低于 w=0.8,但和原图的相似度最高

结论:CodeFormer w=0.8 是名人老照片修复的黄金参数。

非名人照片同样受益

虽然不是所有人都是名人,但"身份保持"在很多场景下都重要:

这些场景里,CodeFormer 的 w=0.7~0.8 都优于 GFPGAN 的默认输出。

极端测试:完全失焦 + 高噪点

如果原图已经极端退化(比如 10 年前手机拍的低光视频截图 + 运动模糊):

模型结果
GFPGANv1.4"画"出一张清晰的脸,但和本人相似度可能只有 50%
CodeFormer w=0.8和原图相似度 80% 但清晰度不够(因为原图没信息)
CodeFormer w=0.5两边折中

这个极端案例里没有完美方案——因为原图里的信息确实太少了。但 CodeFormer 至少给了你选择:要么"像本人但有点糊",要么"清晰但不像本人"。

和其他身份保持方法对比

近年来有专门的身份保持人脸修复模型(如 IDNet、DifFace),它们显式地用人脸识别特征(ArcFace embedding)来约束身份。但:

CodeFormer 用简单的 w 权重做到了接近这些专门模型的身份保持能力——这是它最大的亮点。

实战建议

修复名人照片

# 第一步:用 CodeFormer 保住身份
python inference_codeformer.py -w 0.85 \
    --bg_upsampler realesrgan famous_photo.jpg

# 第二步:用 Real-ESRGAN 单独处理背景(如果 CodeFormer 背景不够好)
# Real-ESRGAN 不会改人脸,只会增强背景细节

快速验证

用 CodeFormer HuggingFace Demo 同时跑 w=0.3 / 0.7 / 0.9 三张,下载下来并排对比。肉眼挑最像本人那张。

License 提醒

CodeFormer 的 NTU S-Lab License 1.0 禁止商用。如果要商业产品(如在线名人老照片修复网站),GFPGAN 的 Apache 2.0 或专门的 IDNet 更合适。