codeformer 中文文档 下载 App

CodeFormer 模型原理:Codebook Lookup Transformer 为什么比 GAN 更稳

盲人脸修复的老问题

传统人脸修复面临一个核心矛盾:低清图 → 高清图 是一对多映射。同一张模糊的人脸可能对应无数张清晰的脸——皮肤纹理、眼睛细节、微表情都不确定。

GFPGAN 这类 GAN 路线的做法是:用判别器约束输出"看起来像真的人脸"。好处是激进、干净;坏处是容易改人——GAN 倾向于把模糊的眼睫毛画成标准完美眼睫毛,把原来的痣去掉。

CodeFormer 的解法:变成代码预测问题

CodeFormer 换了一条路——不直接生成像素,而是先把人脸表示成一串离散代码 token,再解码。

整个模型分三段训练:

阶段一:Codebook 预训练

network architecture
CodeFormer 网络架构

先用高质量人脸图(FFHQ 数据集)训练一个 Codebook 和一个 Decoder:

这一步相当于让模型背下来"人脸常见的零件都长什么样"。

阶段二:Transformer 代码预测

固定住 Codebook 和 Decoder,换上 Transformer 网络:

Transformer 的优势是 全局建模——它能同时看到整张脸的结构关系,不会像卷积网络那样只盯着局部。

阶段三:可控特征变换(w 权重)

这是 CodeFormer 最独特的模块。模型有一条残差连接直接从低清编码器通往解码器,这条连接的信息流量由标量 w 控制:

推理时发生了什么

给定一张整图:

  1. 人脸检测 + 对齐(用 YOLOv5-face 或 dlib)
  2. 检测到的人脸区域裁出来,缩放到 512×512
  3. 送入 CodeFormer 推理 → 得到修复后的 512×512 人脸
  4. 把修复脸粘贴回原图(back projection 方式对齐边界)
  5. 如果开了 --bg_upsampler realesrgan,背景区域也用 Real-ESRGAN 增强
  6. 输出融合后的完整图片

为什么 CodeFormer 更稳

维度GAN(GFPGAN)CodeFormer
推理框架生成器 + 判别器对抗确定性 Codebook 查找 + Transformer 预测
身份保持靠判别器引导,容易漂Codebook token 有明确约束,更稳定
控制能力几乎不可调w 权重在 0-1 之间线性可调
严重退化可能瞎编从 Codebook 里找最接近的,不会乱编
训练成本对抗训练不稳定两阶段训练更可控

但 CodeFormer 不是万能的

延伸阅读