AI 照片修复全链路:去模糊、超分辨率、人脸修复——三个不同问题的技术组合

你翻出一张 1998 年的合影。扫描,拖进修复 App,三秒后出来一个“高清版本”——衣服纹理有了,脸上的噪点没了,连眼睛里的高光都清清楚楚。你脑子里冒出一句话:AI 把当年拍糊的地方补回来了。

AI technology illustration

这句直觉,就是这篇要拆掉的东西。它没有补回任何信息。那张照片丢失的细节,早在按下快门那一刻就被物理过程毁掉了:失焦让光线混在一起,低分辨率把像素直接扔掉,压缩抹掉了高频信息。这些损失不可逆。AI 做的,是从残缺的信息里,生成一张看起来合理的图。

照片修复被包装成一个按钮,实际上是三个不同问题的流水线:去模糊、超分辨率、人脸修复。它们共享同一个数学宿命——都是病态逆问题——但退化机制、核心技术、翻车方式完全不同。我最早把它们当成同一个东西,分别去翻了三个方向的论文,才意识到这个分类本身就是理解照片修复的第一课。

修复不是“恢复”,是“补全”

所有修复任务在数学上都属于同一个家族:病态逆问题(ill-posed inverse problem)。退化过程把信息丢掉,你想把信息找回来,但丢掉的部分不可能凭空回来。于是你面对的是一个多对一的映射——很多张不同的清晰图,退化之后是同一张模糊图。你要选一个答案,但数学上没有标准答案。

病态问题(ill-posed)
解不唯一、对噪声极度敏感的问题。所有修复任务都是病态问题,只是程度不同。
模糊核(blur kernel)
描述光如何被“拖”成拖影的卷积算子。失焦、抖动、运动,对应不同的核。
盲去卷积
模糊核未知时,同时估计核和清晰图。数学上极度难解,也是深度学习入场的动机。

这三个词会反复出现。看懂了它们,你就看懂了修复的本质。

去模糊:本该解数学题,现在直接抄答案

去模糊是最像数学问题的一个。经典做法是 Richardson-Lucy 反卷积,1972 年由 Richardson 提出、1974 年由 Lucy 改进,至今仍在用。思路是先假设一个模糊核,再把模糊过程迭代地反推回去。它有两个绕不过的坎:第一,真实照片的模糊核未知,既要猜核又要猜清晰图;第二,真实模糊几乎从不是均匀的,手持抖动、失焦、被摄物体运动,每一处的模糊都不一样。

深度学习绕开了这条死路。NAFNet(在 NTIRE 2022 图像恢复赛事中拿下多个赛道冠军)和 Restormer(CVPR 2022)不再显式估计模糊核,而是在海量“模糊-清晰”图对上训练,让网络学一个端到端映射:模糊像素进,清晰像素出。模糊核的估计被隐式地压进了网络权重里。

但机制变了,问题的性质没变。网络学的不是精确的反函数,而是统计对应关系。去模糊后那些清晰的纹理细节,有一部分是网络从训练集里借来的。

超分辨率:一个像素要变出十六个

如果说去模糊是把混在一起的光分开,超分辨率就是把被扔掉的信息变出来。4 倍超分意味着 1 个低清像素要变成 16 个高清像素——那 15 个像素的信息在下采样时就不存在了。所以它在数学上比去模糊更绝望:无数张高清图对应同一张低清图,模型只能选一张。

第一代深度学习超分 SRCNN(2014)做的是纯回归:把输出像素和真实高清像素拉近,追 PSNR 指标。分数很好看,但放大后的图软绵绵的。ESRGAN(2018)引入对抗训练,加一个判别器常年挑刺,生成的图必须骗过判别器才算合格。锐利是锐利了,代价是细节开始编——你放大一张脸,皮肤纹理和头发丝是模型即兴创作的。

真正让超分走出实验室的是 Real-ESRGAN(2021)。它的关键贡献不是网络结构,而是训练数据的退化模型。此前大家都用双三次下采样制造训练对,但真实老照片的退化是模糊、降采样、噪声、JPEG 压缩叠在一起的结果。Real-ESRGAN 改用二阶退化流程:模糊 → 降采样 → 加噪 → JPEG,重复两轮。仅仅是让训练时的问题模型更接近现实,模型就从只能在基准测试里好看,变成能处理真实照片。这个思路对我的冲击很大:很多时候模型的短板不在网络,而在于你用什么样的退化去训练它。

人脸修复:模型在“记忆”里检索你的脸

人脸修复单独成方向,是因为人脸太特殊。两只眼睛一个鼻子一张嘴,结构稳定到你可以把人脸理解成一个低维流形——所有真实的脸都落在上面。模型只要学会了这个流形,就能在信息不足时沿流形补全一张脸。

GFPGAN(CVPR 2021)的做法,是直接把一个现成的人脸生成器 StyleGAN2 当先验。退化人脸输入后,先在 StyleGAN 的隐空间里找最近的“标准脸”,再让解码器把标准脸的细节搬回退化图上。说人话:模型扫了一眼模糊的小脸,在记忆里检索出最像的一张清晰脸,然后把那张脸的长相贴上去。

CodeFormer 论文的出发点,大意是:盲人脸修复是一个高度病态的问题——无数张清晰的真实人脸可以对应同一张低质量输入。修复的本质是选一个“看起来最合理”的,而不是把原来那张找回来。(CodeFormer,NeurIPS 2022

CodeFormer(NeurIPS 2022)把先验做成离散码本:1024 个人脸特征条目,找到最匹配的条目引导修复,并允许你调节“保真度”和“质量”的权重。调低保真度,模型更自由地把脸画清晰;调高保真度,则死守输入像素。这个可调权衡,就是人脸修复的核心哲学——清晰和逼真不可兼得。

我最早以为人脸修复只是超分的一个特例。后来想通:超分的假设是清晰图存在,只是信息被扔了;人脸修复的假设是模型已经记住了人脸长什么样。前者靠原图剩下的像素,后者靠模型的记忆。这也是人脸修复效果最惊艳、也最容易出问题的原因——它的细节几乎全部来自想象。

三个模型串成一条流水线,顺序定生死

现实中的修复不是只调一个模型。老照片往往同时有失焦、抖动、低分辨率、人脸糊成一团的问题。实际工作流是三步串行:

  1. 先去模糊。模糊必须最先处理,因为后续每一步都会放大前一步的瑕疵。带着模糊去超分,超分模型会把模糊纹理当成真实细节强化,越修越假。
  2. 再超分辨率。把整体分辨率拉高,给人脸修复提供更多像素。人脸信息太少时直接修复,等于蒙眼猜脸。
  3. 最后人脸修复。人脸修复用的是强先验,会把脸部区域重画,同时尽量保持背景原样。

顺序错了就会有荒诞的副作用:先超分,模糊区域被放大成一片光滑的色斑;先人脸修复,模型可能把模糊的嘴重画成另一张嘴,去模糊再把这张新嘴当原图增强——错误信息被当成真迹固定下来。

三个问题,三种翻车方式

维度 去模糊 超分辨率 人脸修复
退化本质 光被卷积(混合) 信息被舍弃(降采样) 多重退化叠加
数学处境 盲去卷积,核未知 1 像素 → 16 像素,无限解 高度病态,但有强先验
核心技术 端到端映射(NAFNet / Restormer) 对抗训练 + 复杂退化模型(Real-ESRGAN) 生成先验 + 离散码本(GFPGAN / CodeFormer)
细节来源 一部分靠统计推断 大部分靠模型记忆 几乎全凭模型想象
典型翻车 振铃伪影、动态区域糊成一团 过度平滑 / 假纹理 身份漂移:A 被修成 B

身份漂移是人脸修复最危险的失败模式。一张 16×16 的小脸,可以对应无数张清晰脸。安防和司法场景下,这种合理想象不可接受。作为纪念照,它够了;作为证据,它是灾难。

每个环节的输出都是猜的,只是猜的约束条件不同。去模糊的敌人是振铃伪影,超分辨率的敌人是假纹理和过度平滑的两难,人脸修复的敌人是修得太好。三种失败模式提醒你:别把修复结果当成原图。

什么时候该信修复结果

回到开头那张合影。修复 App 给你的,不是原图,而是最像原图的一种可能。这个认知不是让你扫兴——三秒从一堆模糊像素里变出一张清楚的脸,本身就足够惊人——而是让你知道边界:纪念可以,考证不行。

去模糊、超分辨率、人脸修复,三个问题的数学难度、先验来源、翻车姿势各不相同。产品把它们统称为照片修复,工程上却是一条必须按顺序走的流水线。拆开看,你才明白每一环在做什么、会在哪里失效。

想深入?这几篇论文绕不开

原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/415.html

(0)
上一篇 4天前
下一篇 4天前

相关推荐