1. 为什么人脸修复不能直接套通用超分模型
1.1 一张真实模糊人脸上的“退化”远比你想象的复杂
先说个真实场景。上个项目我接手了一批上世纪九十年代的扫描老照片,人物脸部几乎糊成一团,五官边缘全是锯齿,肤色上还有大块扫描噪点和JPEG块效应。刚开始我想得很简单:不就是超分辨率嘛,把ESRGAN、Real-ESRGAN这些成熟模型拉出来跑一遍就行。结果效果非常难看——背景纹理和衣服边缘倒是还行,但只要一到人脸区域,修复结果就出现严重的“塑料感”,皮肤像涂了一层蜡,眼睛和嘴巴的位置偶尔还会跑偏,更别提身份特征的一致性了。
为什么通用超分模型会在人脸区域拉胯?核心原因有两个。第一,真实人脸退化的构成很复杂,它不只是单一的高斯模糊或双三次下采样,而是模糊核、运动模糊、传感器噪声、压缩伪影、色彩偏移等多种损伤的叠加。这种“盲退化”问题,简单假设单一退化模型的通用超分框架根本拟合不了。第二,人脸这个目标本身要求太高。你修复一只猫的照片,五官略有点失真,观感上基本可以接受;但人脸是结构极其密集的对象,眼睛、鼻子、嘴、发际线的比例如果偏差几个像素,人眼立刻就会觉察到“不像本人”。这已经不是单纯提高分辨率能解决的问题。
GPEN这篇论文最打动我的地方就在这里——它捕捉到了问题的本质:人脸修复光靠“超分”不够,你得在信息不足的前提下,把人脸结构“脑补”出来。这就需要一个强大的先验。
1.2 “先验”是什么,为什么人脸修复一定要有它
拿一个最简单的例子来说。给你一张16×16像素的模糊人脸图,里面只有一坨肉色的色块。要把它恢复成清晰的512×512人脸,信息量缺口至少是1000倍。谁来填补这个缺口?只能靠先验。所谓先验,就是模型脑子里预先储存的“人家长什么样”的知识——比如眼睛通常是一对对称的深色椭圆,鼻梁有一条高光,嘴唇有两条弧线,发际线大致在额头某个位置。
人脸修复领域常见的先验有几种:面部关键点坐标、人脸解析图(segmentation map)、参考人脸库,还有业界用得越来越多的GAN生成先验。关键点和解析图属于“几何先验”,它们能告诉你五官大概在哪个位置、哪块区域是皮肤哪块是头发,但填不出皮肤的毛孔细节和头发的发丝走向。参考人脸库属于“检索先验”,效果不错但依赖库的覆盖度,遇到大角度侧面、夸张表情就很容易找错人。而GAN生成先验,就是提前训练一个高质量人脸生成模型(比如StyleGAN),让它把人脸生成分布全部记住,修复时再从中检索最接近的真实人脸结构。
GPEN选择的是最后一条路:预训练的StyleGAN,把它当作一个“先验知识库”直接嵌入到人脸修复网络中。这个思路的直觉是——既然我手里有一个能生成逼真人脸的模型,说明它已经掌握了人脸的真实分布。那遇到一张模糊人脸时,我只要在它的隐空间里找到对应的那一组潜码(latent code),再用这组潜码去生成高清图,不就等于“按记忆修复”了吗。
1.3 直接索引隐空间为什么不够,还要有“嵌入网络”
顺着这个思路,最早的一批做法是直接把低质量图片映射到StyleGAN的W+空间,找到潜码后固定生成器不动,反推高清图。这类方法后面被统称为GAN Inversion。我自己试过这类方法,优点是生成的人脸极其逼真,纹理细节可以说“无中生有”到了以假乱真的程度,但缺点同样明显:反演过程通常会丢掉输入图片中的真实身份信息,修完以后确实是一张好看的脸,但仔细一看,“这个人”已经不是你照片里的那个人了。这在老照片修复场景里属于完全不可接受的失败——用户最在意的就是“还是我爷爷”。
另一个问题是效率。直接在隐空间里做逐像素优化,一张图可能要跑几十次甚至上百次迭代,根本没法落地到实际产品。
所以GPEN的设计目标就很明确了:既要利用GAN生成先验的强项,又要保住输入图的真实身份信息,还要做到前向推理一步到位。它不打算抛弃GAN先验,也不打算完全依赖GAN先验,而是把两条路拧成一条——下面我拆开讲它的网络结构,你会发现这个“拧”的动作才是整篇论文最值钱的地方。
2. GPEN网络结构拆解:全局编码器与渐进式解码
2.1 为什么偏偏选StyleGAN作为先验库
GPEN选取的先验库是StyleGAN2。可能有人会问,GAN生成器这么多,为什么是StyleGAN而不是ProGAN或者StyleGAN3?这个选择完全不是心血来潮,核心原因有三个。
第一,StyleGAN的隐空间编辑特性极其优秀。StyleGAN在训练时会把潜码通过一个映射网络变换到W空间,再通过AdaIN的方式在不同分辨率层级注入风格信息。这意味着W空间的分层控制能力很强——粗层控制姿态、脸型、五官位置,细层控制皮肤纹理、光照、颜色。对修复任务来说,这种分层特性太合适了:低分辨率输入贡献的信息可以用来约束粗层,高分辨率细节则交给细层脑补。
第二,StyleGAN2对生成图像的质量和分布覆盖度非常高。GPEN直接使用在FFHQ数据集上预训练好的StyleGAN2权重,连预训练成本都省了。FFHQ覆盖了7万张高清人脸图,姿态、年龄、肤色、光照条件都非常丰富,这个分布足够支撑真实世界人脸修复的需求。
第三,有一个很容易被忽略的工程原因——StyleGAN2的生成器里天然支持不同分辨率的输出。它本来就是渐进式生成结构,从4×4一路生成到1024×1024,每个分辨率层都有对应的feature map。GPEN的渐进式解码器设计完全可以复用这套结构,零成本拿到多尺度特征。
2.2 全局分支:编码器如何提取真实身份信息
GPEN的网络结构可以拆成两个大分支。第一个分支叫全局编码分支(Global Branch),它做的事情比较“传统”:把低质量输入图喂给一个编码器,经过一系列卷积、下采样、残差块,提取出一个紧凑的特征向量,或者说是潜码的预测结果。
但这里有个细节需要注意——GPEN的编码器并不预测一个StyleGAN的输入潜码 z,而是直接预测W+空间的风格向量。为什么会这样?因为W+空间的维度比单一潜码大得多,它允许每一层用不同的风格向量,表达能力更强,能更精细地还原输入的细节信息。如果只预测一个16维的z再通过映射网络生成w,信息瓶颈太明显,修复出来的图会丧失跟输入图的对应关系。W+的维度大约18×512,虽然大了不少,但对编码器来说依然是个“压缩”的过程。
编码器的主干结构类似ResNet,内部还引入了特征金字塔结构来融合不同尺度的特征。这个设计针对的场景很实际:一张模糊人脸的不同区域,退化程度可能完全不同,比如眼睛部位略微清楚但下巴部位已经完全糊掉。多尺度特征融合就是为了让网络能够从“局部还算清晰”的区域提取更多有效信息,去补足“完全糊掉”的区域。
不过只是提取特征还不够。如果编码器直接输出一套W+向量,相当于让一个模型同时干“理解图像内容”和“理解GAN隐空间语义”两件事,训练难度会非常大改动。GPEN偏偷懒一点,它把提取出的多尺度特征跟StyleGAN生成器的中间特征融合,让生成器自己参与进来把身份信息带进去。这个“带进去”的动作,就要靠第二个分支来完成。
2.3 渐进式解码:从粗糙空间到高清图的分层重建
第二个分支是渐进式解码器(Progressive Decoder)。别被名字吓到,它的思路其实不复杂:从StyleGAN2预训练模型里拉一条生成链路出来,从4×4逐步上采样到512×512,每一级都用全局分支提供的特征做一次“修正”。
具体一点说,GPEN不会让StyleGAN直接根据预测的W+向量生成一张完整的高清人脸,而是把生成过程“切开”。在每一层生成分辨率的时候,它都会把编码器对应尺度的特征图拼接到生成器的中间特征上,再通过一层1×1卷积混合。初始阶段,网络主要靠StyleGAN先验生成人脸的整体结构和五官布局;随着层数加深、分辨率提高,全局分支的特征逐渐占据主导地位,把输入图里的真实身份细节一点点“雕刻”回去。
这个设计好在哪?你可以把它想象成素描画人像的过程。一个经验丰富的画师不会一开始就抠眼睛眉毛的细节,而是先起大形,定头骨比例、脸部轮廓,再一层层添加五官、明暗、纹理。StyleGAN提供的就是画师脑中预先练好的“起形能力”,而全局分支提供的则是被画者本人的真实面貌信息。起形靠经验,深入靠观察,两者缺一不可。
2.4 全局分支与渐进分支的融合:adaptive feature modulation
两个分支不是简单的特征拼接就完事了。GPEN用的是adaptive feature modulation机制,把全局分支的特征经过sigmoid激活后,作为权重去调制渐进解码器每一层的特征通道。也就是说,不是把两套特征机械相加,而是让全局特征学会“哪些通道要放大、哪些通道要抑制”。这比直接拼接或者相加要灵活得多,也更容易训练。
这一点在论文的消融实验中有明确体现。去掉adaptive modulation,换用简单的加法融合后,修复结果的人脸结构一致性下降明显,皮肤纹理也容易出现不自然的条纹。毕竟StyleGAN生成的纹理特征是偏“平均脸”的,如果不去根据输入图动态调整强度,很容易把用户的特征冲淡。
从整体上来看,GPEN的网络结构其实回答了这样一个问题:如何在不重新训练一个超大GAN的前提下,把一个专用修复任务接到已有的通用先验库上。答案是不要端到端生成,也不要完全依赖反演,而是用一条“引导生成”的链路,让先验和实际信息在每一个尺度上都进行对话。
3. 损失函数设计:三路损失如何稳住训练
3.1 对抗损失:让人脸“真”起来的第一推动力
GPEN的训练损失不是一个单独的指标,而是一套组合拳。第一拳是标准的GAN对抗损失,作用于全局分支的输出。它的任务很简单:判别器要努力分辨哪张图是生成器修复出来的、哪张图是真实高清图,同时生成器要努力骗过判别器。这种博弈会逼迫生成器输出的图像不断向真实人脸的分布靠拢。
如果你做过GAN相关实验,一定知道对抗损失的问题——训练不稳定,容易模式崩塌。GPEN的应对策略是把对抗损失主要放在全局分支的高分辨率输出上,让StyleGAN预训练模型内部的结构天然起到稳定作用,而不是从零训练一个生成器。等于说生成器的大部分权重已经“半成品”状态,网络只需要学习如何引入输入信息,这比完全初始化训练要稳定太多。
我个人经验里,对抗损失的权重设定也有讲究。GPEN论文里的默认配置是对抗损失、特征匹配、重建损失按不同权重叠加,ratio控制在1:1:10附近。重建损失的大权重确保了生成图像不偏离输入太远,对抗损失则把剩下的自由空间全部用于提升真实感。反过来,如果对抗损失权重太大,图像会变得“过于好看”但丢失身份,这可就是灾难了。
3.2 重建损失与感知损失:像素级与语义级的双向对齐
第二拳是重建损失,通常采用L1或L2范数。它要求修复后的图像跟真实高清图在像素层面尽可能接近。这个损失简单直接,但它有一个众所周知的问题:像素级距离不能很好地反映人眼的感知相似度。两张图只差一个像素位置,L2距离可能很小,但人眼看起来完全是两个人。
为了弥补这个缺陷,GPEN在像素重建之外还用了感知损失(perceptual loss),有时也叫特征匹配损失。做法是把修复图和GT图一起输入一个预训练的分类网络(通常是VGG),然后在中间层的特征图上计算L1距离。这一步的核心逻辑是:低层特征接近意味着纹理细节一致,高层特征接近意味着语义内容一致。感知损失不要求像素级对齐,但要求场景内容一致,这非常契合人脸修复的语义需求。
值得强调的是,GPEN的感知损失有个专门的细节:它不是在VGG任意一层都算特征距离,而是从预训练的StyleGAN判别器特征中进行匹配。这个设计很巧妙,因为判别器特征本身就是为了区分真假人脸而优化的,它的特征空间里天然编码了人脸的关键判别信息,用它的特征做重建约束等于是在“人脸相似度这个维度”上做对齐,比通用的VGG感知损失更贴合任务。这个细节很多讲GPEN的文章都没提,但我觉得它恰恰是GPEN效果好的核心原因之一。
3.3 身份损失:防止“修完换了一个人”
第三拳是身份损失(Identity Loss)。
人脸修复里最容易翻车的点不是清晰度不够,而是修复完“不像本人”。早期的GAN修复方法修图后经常像给用户免费整了个容,这在商业产品中是灾难级的体验。GPEN为了压制这个问题,引入了预训练人脸识别模型(如ArcFace或FaceNet)提取身份特征,再计算修复图与GT图身份特征之间的余弦相似度或L2距离。身份损失会逼迫生成器在提升真实感的同时,确保同一个人的两张图被识别模型判定为同一个人。
这个损失的引入也解释了GPEN内部结构的取舍。如果没有全局编码分支提供的真实信息,仅靠StyleGAN生成先验,输出结果在身份特征上必然跑偏。而身份损失的存在让网络必须把输入图中那些微妙的身份细节(比如颧骨的形状、眼睑的曲度)保留下来。这就是我之前说的,“好看”和“是本人”两件事,GPEN靠损失函数组合同时进行优化。
3.4 三路损失如何平衡,才不至于训练崩溃
三路损失不是简单相加就完事。我复现训练时发现,它们之间存在明显的对抗关系:重建损失过强会造成图像模糊化,因为L1/L2对高频细节持保守态度;对抗损失过强又会让图像锐利过头甚至失真;身份损失则在两者之间做牵制。GPEN在这三者间通过经验权重做平衡,并配合多尺度判别器、学习率衰减等trick,让训练过程基本收敛稳定。
具体模型收敛时,我观察到loss曲线有几个典型阶段。前几千步重建损失下降最快,因为网络在学习最基本的图像对应关系;随后感知损失开始起作用,图像的语义细节逐步清晰;等到训练中期,对抗损失开始产生明显波动,这个阶段输出的图像逐渐变得锐利但同时也会开始出现伪影;到最后阶段,身份损失会把那些“加戏”过头的生成结果拉回来,让主体特征更贴近输入。
对比同样采用GAN先验的GFPGAN,GPEN的训练相对更好跑。这主要得益于渐进式解码器在每个尺度上都有重建监督,梯度信号不会因为网络太深而消失。训练小技巧方面,我建议在微调阶段逐步降低重建损失的权重,给对抗损失留出更多空间,这样最终输出会更锐利。
4. 训练数据与退化模拟:论文没写透的工程细节
4.1 FFHQ作为训练数据源,为什么够用
GPEN的训练数据主要来自FFHQ高清人脸数据集。FFHQ包含7万张1024×1024的高质量人脸图,涵盖不同年龄、性别、肤色、姿态和光照条件,多样性非常好。
但直接用FFHQ训练有个问题:拿去跟真实低质量照片比,FFHQ的图太“干净”了——每张图都是专业相机拍的高清图,几乎没有噪声和模糊。所以训练时的核心思想是:拿干净高清图作为GT,再人为制造低质量版本作为输入,让模型学习去退化(degradation)过程。这个思路在超分领域并不新鲜,但是退化模型的设计直接决定了模型在真实场景中的泛化能力。
4.2 退化模拟的关键参数:模糊、下采样、噪声、JPEG压缩
GPEN论文中,低质量数据的生成遵循一个典型组合退化公式:先做模糊处理(高斯模糊核,尺寸从7×7到21×21随机),然后下采样(缩放因子4、8、16甚至32),再加入高斯噪声,最后做JPEG压缩。
实际操作中,这些参数并不是固定的。随机性非常重要——模糊核的大小和方向要随机采样,下采样比例要随机选择,噪声强度要在一个范围内浮动,JPEG品质参数也要变化。这样训练出来的模型才不会过拟合特定退化模式,才能应对真实世界中几乎无限的退化组合。
如果你自己复现训练,我建议重点调一下模糊核的下限。模糊核太小(比如只有3×3),退化太轻,模型学不到太多东西;但模糊核太大(超过31×31),输入图的信息几乎被抹除干净,身份特征已经不存在了,再怎么修复也只能得到一张“平均脸”。我在实验中发现,模糊核在15×21左右配合4倍下采样,得到的退化难度跟实际老照片最接近。
还有一个比较容易踩的坑——训练时尺寸的匹配。FFHQ的高清图是1024×1024,但GPEN的解码器终点是512×512,所以GT一般要预先缩到512。低质量图则根据退化因子缩到32、64或128不等。输入太小会导致提取不到身份特征,输入太大又会让编码器学到“偷懒”的捷径——不靠GAN先验也能大致恢复,进而影响对极端退化场景的泛化能力。
4.3 多尺度训练策略与颜色增强的细节
GPEN训练的另一个特色是多尺度训练。它不会把输入固定缩到同一个尺寸,而是随机选择不同的退化尺度(例如某个minibatch是64×64输入,下一个batch是128×128),让模型同时处理不同分辨率级别的输入。这个操作的作用是让网络的多尺度特征融合模块真正学“活儿”——它必须学会根据不同输入分辨率调整融合权重。
同时论文还设置了颜色变换增强。真实老照片普遍存在偏色问题,泛黄、褪色、偏青都很常见。如果不做颜色增强,模型看到一张偏黄的老照片时,可能直接按照“干净肤色”的分布强行纠正,结果输出一张肤色发紫或发灰的可疑图像。训练中添加小幅度的色相、饱和度、亮度随机扰动,能提升模型对颜色偏移的鲁棒性。
4.4 真实照片微调与伪GT:让模型从实验室走进现实
仅靠合成的低质量图训练出来的模型,在真实老照片上的效果可能还不够。GPEN在论文里给了两种训练阶段:第一阶段在合成退化数据上训练,第二阶段用真实低质量人脸图做微调。微调时需要用到伪GT策略:先用第一阶段训练好的模型对真实低质量图做一次修复,再把修复结果当作权重很大的训练目标来继续训练。这个思路跟自监督学习非常接近,目的是让模型逐渐适应真实分布的数据,而不是只对人工退化规律有效。
伪GT有一个潜在风险——第一阶段模型的错误修复结果会作为“正确答案”被放大。所以实际操作中要人工筛选质量较高的伪GT样本,去掉那些五官扭曲、脸色异常的坏样本。这一步没有捷径,我当初为了微调模型,手动过滤了两千多张修复效果不佳的老照片,虽然费时间,但过滤后模型在真实照片上的表现明显上了一个台阶。
5. 论文实验结果与代码复现踩坑记
5.1 论文里的评测:PSNR、SSIM、FID与用户调研
GPEN论文的实验部分,除了常规的PSNR和SSIM指标,还引入了FID(Fréchet Inception Distance)和用户调研。这是一个很重要信号——PSNR高不代表修复效果好,在盲人脸修复场景中,感知质量比像素对齐更有说服力。论文里呈现的对比结果显示,GPEN在PSNR上未必超过所有方法,但在FID和用户偏好比例上明显领先。
更值得关注的是论文与GFPGAN、HiFaceGAN等同期工作的对比。GPEN在低分辨率输入下(比如缩小8倍甚至16倍)依然能保持稳定的身份一致性,而其他方法在这么强的退化下要么模糊一片,要么走向“整容怪”。我自己拿了一组32×32的微型头像测试,GPEN能恢复出可辨认的五官,GFPGAN多少也能做到,但细节上稍逊一筹;而HiFaceGAN输出的脸型有明显变形。
不过这里我要说句公道话:GFPGAN和GPEN在高质量输入下(比如128×128以上分辨率)差距并不大,普通人肉眼甚至很难分辨。差距主要出现在极端退化场景。所以选择哪个模型,要看你的输入图质量分布。如果用户上传的照片基本在80×80以上,两者皆可;如果大量是缩略图级别的模糊小图,GPEN优势更明显。
5.2 推理环境准备:PyTorch版本、facexlib与预训练权重
先说明,GPEN官方开源代码基于PyTorch实现。部署推理环境时,需要准备:PyTorch、torchvision、facexlib、numpy、opencv-python,以及下载官方的预训练权重。GPU显存建议8G以上,我用6G显存的卡跑512分辨率,修复一张图大概3-5秒,勉强能接受;如果要跑批量任务,最好上12G或更高。
推理的核心代码非常简洁,先做一次人脸检测和对齐,把原图中的人脸框出来并裁剪成正方形,然后用GFPGAN或GPEN模型做修复,再把修复后的人脸贴回原图。GPEN官方仓库里提供的是GPEN-BFR-512模型,它已经是在FFHQ+FlickrFace等数据上训练好的权重,开箱即用。
5.3 我踩过的几个坑:Windows编译、装饰器兼容与对齐定位
说到具体踩坑,我有几个记忆犹新的。
第一个是Windows环境编译。官方代码依赖StyleGAN2中使用的DCN(deformable convolution),编译时需要Ninja支持。在Windows上,如果你没安装对应版本的Ninja和Visual Studio构建工具,第一次运行时会直接报shape mismatch或者找不到编译器的错误。解决方法是提前安装ninja,并把VS的C++生成工具链配好。这个步骤卡了我差不多一个下午,倒不是说多难,而是报错信息比较隐晦,Google半天才能定位到是编译环境的问题。
第二个是PyTorch版本的兼容性问题。官方代码里有一段用于推理时关闭梯度计算的装饰器,旧版本写法在PyTorch 2.x下会报错甚至间接导致模型输出错乱。解决方法非常简单,把原来的装饰器换成了@torch.no_grad()。如果你直接用最新的PyTorch跑官方demo,很可能会遇到这个坑,提前改掉省得排查半天。
第三个坑是人脸检测的对齐精度。GPEN官方对代码用MTCNN做检测,对一般正脸照片效果很好,但遇到大角度侧面照或者闭眼照片,很容易检测失败,修复程序直接崩掉。针对这种情况,我补充了一个降级策略:当检测不到人脸时,就按图像中心做裁剪修复,虽然效果不如检测对齐好,但至少不会报错。这个兜底逻辑在实际项目中非常重要。
5.4 实测效果:偏色、遮挡、大角度侧脸的边界在哪
代码环境配好后,我在一批真实老照片上做了效果测试。第一组是偏色特别严重的照片(黄色调),GPEN能够基本纠正肤色,但背景中原本泛黄的墙和衣物也会被一起“纠正”成偏蓝灰色调,说明颜色校正逻辑主要还是以人脸为中心的,场景内其他物体的颜色偏移控制不够精准。
第二组是戴眼镜的人脸照片。GPEN对普通近视眼镜的还原效果还不错,基本能保留眼镜边框结构;但对反光很强烈的镜片,修复结果经常出现镜片区域的纹理混乱,像是把镜片当成了皮肤去生成。这不算GPEN的锅,任何基于GAN先验的修复方法遇到眼镜反光都会有类似问题,因为FFHQ里戴眼镜且反光的训练样本太少了。
第三组是大角度侧脸。当人脸偏转角度超过45度时,GPEN的身份保持能力会明显下降,输出结果趋近于一张正脸的“融合面孔”。说白了,还是因为FFHQ数据集中正脸和微侧脸的数据占绝对主导,极端角度的覆盖不够。在真实产品中,建议用额外的侧脸检测和针对性模型来处理这批case。
5.5 批量推理时的高效处理思路
如果你打算用GPEN处理成百上千张照片,有几件事值得提前准备。第一是先跑一遍人脸检测和人脸对齐,把所有检测到的人脸和对应的仿射变换矩阵保存下来。第二是分批推理,如果显存充足,可以一次batch处理多张人脸,大幅提升吞吐率。第三是写好后处理逻辑,把修复好的人脸按原来的位置贴回原图。这里要特别提醒:贴回时要用羽化融合,直接用硬mask会留下明显的边缘接缝。业界常用的做法是对mask做距离变换后再做高斯模糊,模糊半径根据人脸大小动态调整,接缝会自然很多。
颜色匹配也非常关键。修复后人脸和周围背景的亮度、白平衡可能不一致,在贴回前需要对修复区域做一次色彩迁移,让肤色跟周围环境的光照条件协调。我见过不少团队实现到最后一步,就因为没做颜色匹配,贴回后的人脸像一块膏药一样贴在照片上,一眼假。
5.6 下一步的扩展思路:从静态修复到视频、风格迁移
GPEN的架构天然适合扩展到其他任务。我在自己项目中做过一个尝试:把GPEN的预训练权重接到视频人脸修复的流程中,对每一帧做人脸检测、修复、贴回,再通过时域一致性模块平滑帧间闪烁。效果虽然不能跟商用的视频修复算法比,但已经能明显改善老录像中的人脸清晰度。
另外一个有趣的扩展方向是风格迁移。既然GPEN的渐进式解码器是从StyleGAN里借来的,那StyleGAN支持的一切操作(比如风格混合、属性编辑)理论上都可以在GPEN修复后的潜空间里进行。这意味着你不仅能修复一张模糊老照片,还能顺便改变照片里人物的光线方向、年龄甚至表情。当然这些都是后话,需要额外叠加属性编辑的网络,但至少底子是通的。
回过头来看,GPEN这篇论文之所以能在人脸修复领域留下名字,核心不在于它用了多复杂的网络结构,而在于它对“先验”这件事想得很透彻——把预训练GAN当作知识库,把修复任务变成“在知识库的引导下逐步还原信息”的过程。这套方法论放到今天依然是很多生成式修复工作的基础框架。如果你正在做人脸修复、老照片翻新或相关方向的开发,花时间把这篇论文和开源代码吃透,绝对是一笔稳赚不赔的投入。