codeformer 中文文档 下载 App

人脸区域修复(Inpainting):修复划痕、遮挡、涂鸦

Inpainting 是什么

老照片经常有:

普通 face restoration 只做"整脸增强",对局部修复无能为力。inpainting 脚本专门解决这个问题——你告诉模型"这块区域坏掉了",模型根据周围健康区域推理出这块应该是什么样。

准备 mask

关键一步:用纯白色 (#FFFFFF) 画笔涂掉要修复的区域。

Photoshop / GIMP 操作

  1. 打开对齐好的人脸图(512×512)
  2. 新建一个图层(可选,方便撤销)
  3. 选画笔工具,颜色设为纯白色
  4. 只涂要修复的区域(划痕、涂鸦、遮挡物)
  5. 保存为 PNG(保留 mask)

mask 要求

示例(mask 画了划痕和口罩区域):

原图(白色区域是 mask):
┌─────────────────┐
│  #############  │
│  # 白色 mask #  │
│  #  遮盖区域   #  │
│  #############  │
└─────────────────┘

运行修复

python inference_inpainting.py \
    --input_path inputs/masked_faces/ \
    --output_path results/inpainted/

脚本会:

  1. 检测图片里的白色 mask 区域
  2. 把 mask 区域替换成模型推理出的内容
  3. 输出修复后的人脸(512×512)

参数

参数默认说明
--input_path—带白色 mask 的图片或文件夹
--output_pathresults/inpainting/输出目录

inpainting 脚本没有 w 权重——因为修复任务不存在"质量 vs 保真度"的取舍,目标就是"自然地填回"。

效果预期

能做好的

Inpainting 修复
划痕和遮挡修复前后

做不好的

和 LaMa / MAT 等通用 Inpainting 对比

工具定位人脸修复效果整图修复
CodeFormer inpainting专门做人脸✅ 针对人脸优化❌ 只修人脸
LaMa通用大 mask 修复⚠️ 人脸一般✅ 整图
MAT通用修复⚠️ 人脸一般✅ 整图
SD Inpainting基于扩散模型✅ 灵活但慢✅ 整图

如果你的场景主要是人脸修复(老照片里的人脸划痕),CodeFormer inpainting 比通用 inpainting 工具效果好——因为它是在人脸 Codebook 上训练的,知道人脸应该长什么样。

完整老照片修复工作流

一张严重损坏的老照片:

# 1. 裁脸对齐
python scripts/crop_align_face.py -i old_photo.jpg -o face_512.jpg

# 2. 划痕 mask(手动白色画笔涂)
# → face_512_masked.png

# 3. 区域修复
python inference_inpainting.py --input_path face_512_masked.png

# 4. 全局增强
python inference_codeformer.py -w 0.6 --has_aligned \
    --input_path results/inpainting/face_512_masked.png

# 5. 上半身/背景上色(可选,其他工具)
# → 整图上色

# 6. 贴回原图
# → Photoshop 手动合成

注意事项