CVPR2021:Towards Real-World Blind Face Restoration with Generative Facial Prior

news/2024/7/21 6:55:18 标签: 计算机视觉, 图像处理

单位:腾讯PCG

论文
代码
Xintao Wang大佬(ESRGAN、EDVR作者)的力作,这篇论文和他们另一篇CVPR2021论文《GLEAN: Generative Latent Bank for Large-Factor Image Super-Resolution》想法相近,但是做的是两个不同的恢复任务。

摘要

人脸盲恢复通常依赖于人脸先验信息,如人脸几何先验信息或参考先验信息来恢复真实可信的细节。然而,极低质量的输入无法提供精确的几何先验,而高质量的参考通常难以得到,从而限制了在现实场景中的应用。

在本文中,我们提出了GFP-GAN,它利用封装在预训练脸部GAN中的丰富多样的先验信息进行人脸盲修复。这种生成性面部先验(GFP)通过空间特征变换层被纳入到人脸恢复过程中,这使得我们的方法能够实现真实性和保真度的良好平衡。得益于强大的通用人脸先验和精细设计,我们的GFP-GAN只需一次前向传递即可联合恢复人脸的细节和增强颜色,而GAN-inversion方法需要在推理时进行image-specific优化。大量的实验表明,我们的方法在合成数据集和真实数据集上都取得了优于现有技术的性能。

方法

先前方法表明,facial landmarks, parsing maps, facial component heatmaps等这些几何面部先验对于恢复准确的面部形状和细节至关重要。并表明这些几何人脸先验是恢复准确的人脸形状和细节的关键。然而,这些先验值通常是从输入图像中估计出来的,在现实世界中,当输入质量非常低时,这些先验值不可避免地会降低。此外,尽管有语义指导,上述先验知识包含很有限的纹理信息去恢复面部细节(如瞳孔)。
另一类方法采用参考先验,即高质量的人脸指导或面部组件字典。然而,高分辨率参考的不可获得性质限制了其实际适用性,而面部组件字典的有限容量限制了其面部细节的多样性和丰富性。
在本文中,我们利用生成性面部先验(GFP)进行真实世界的盲人脸恢复,即隐式封装在预训练人脸GAN模型中的先验信息,如StyleGAN。这些人脸GAN能够生成具有高度可变性的人脸,从而提供丰富多样的先验信息,如几何、面部纹理和颜色,从而能够共同恢复面部细节并增强颜色(图1)。然而,将这些生成性先验引入恢复过程是一个挑战。以前的尝试通常使用GAN-inversion。他们首先将退化图像“反转”回预训练GAN的latent code,然后进行复杂的image-specific优化以重建图像。尽管输出具有视觉真实感,但它们通常生成保真度较低的图像,因为低维度的latent code不足以指导精确的恢复。为了应对这些问题,我们提出了具有精致设计的GFP-GAN,以在单个正向传递中实现真实性和保真度的良好平衡。

网络框架

在这里插入图片描述

  • x是输入的退化人脸图像,y_hat是输出的人脸图像以求得接近GT图像y。

  • GFP-GAN is comprised of a degradation removal module (U-Net) and a pretrained face GAN (such as Style- GAN2) as prior。二者以latent code和Channel-Split Spatial Feature Trans- form (CS-SFT) layers为桥梁。

  • 具体而言,Degradation Removal 旨在消除复杂的退化,并提取两种特征,即
    1)潜在特征平坦以将输入图像映射到StyleGAN2中最近的latent code
    2)多分辨率空间特征F_spatial以调制StyleGAN2特征。

  • F_latent通过几个线性层映射到中间latent code W。给定与输入图像接近的latent code,StyleGAN2可以生成中间卷积特征,用F_GAN表示。这些特征被预训练的GAN捕捉到丰富的面部细节。多分辨率特征F_spatial用于以从粗到精的方式利用所提出的CS-SFT层对面部GAN特征FGAN进行空间调制,在保持高保真度的同时实现真实结果。

  • 在训练过程中,除了全局判别损失外,我们还引入了带有判别器的人脸成分loss,以增强重要的人脸成分感知质量,即眼睛和嘴巴。In order to retrain identity, we also employ identity preserving guidance.

Degradation Removal Module:U-Net,产生latent code和F_spatial.

之后的latent code会经过MLP映射,经过StyleGAN生成含有面部信息的特征。
Channel-Split Spatial Feature Transform:为了更好的保真度。保留输入的空间信息对于人脸恢复至关重要,因为它通常需要局部特征来保持保真度,并在人脸的不同空间位置进行自适应恢复。因此,采用空间特征变换(SFT),该变换生成仿射变换参数用于空间特征调制,并在图像恢复和图像生成中结合其他条件时显示了其有效性。

但是输入图像的特征存在退化信息,因此为了更好地平衡真实性和保真度,我们进一步提出了通道分离空间特征变换(CS-SFT)层,只调节部分空间的特征。这个想法和说法很妙!

Model Objectives


Reconstruction Loss 用的L1和感知损失。Adversarial Loss用的styleGAN的判别损失。

Facial Component Loss.用ROI align提取左、右眼、嘴巴,对于每个区域都用一个判别器去判别。此外还提到一个特征匹配损失,不同于以往的spatial-wise约束,这里用Gram矩阵,Gram matrix calculates the feature correlations and usually effectively captures texture information。

Identity Preserving Loss类似于感知损失,预训练一个face recognition model ArcFace。

实验

Datasets and Implementation
Training Dataset:FFHQ 70,000对人脸,resize为512*512大小。

Testing Datasets:1合成3真实,一共4个数据集。
Implementation:StyleGAN2作为预训练的模型提供先验。Unet一共7个下采样,上采样。

Comparisons with State-of-the-art Methods


Table1和2分别是在人脸恢复和超分辨上的指标结果。
在这里插入图片描述在这里插入图片描述在这里插入图片描述
图片5是在真实场景的效果,感觉还是挺不错的,公司做业务的注重感知结果,这质量杠杠的!

Ablation Studies


Table 4:(a)是不用SFT去调制,(b)是采用全通道的SFT去调制特征。©是不用预训练的StyleGAN2作为生成先验(d)是去掉多级的恢复损失。相应的视觉结果再Figure6中。
Figure7展现的是对Facial Component Loss的消融实验。第2张图是不用组件判别损失,第3张图是用组件判别损失,第4、5是分别在第三张图情况上加特征匹配损失和特征风格损失(Gram矩阵)。

Limitations:当输入图像为灰度图时,会造成肤色差异,如Figure8的第三组图。此外退化严重的情况下,产生的图像也会有扭曲和artifacts,如Figure 9.

看完有个问题,不知道本文方法在运行时间上怎么样,是否能够实际应用。

下次再见!


http://www.niftyadmin.cn/n/1328816.html

相关文章

ICCV2021:Focal Frequency Loss for Image Reconstruction and Synthesis

Focal Frequency Loss for Image Reconstruction and Synthesis 代码 摘要 由于生成模型的发展,图像重建和合成技术取得了显著的进步。尽管如此,生成图像和真实世界图像之间仍可能存在差距,特别是在频域。在这项研究中,我们发现…

ICCV2021:AdaAttN: Revisit Attention Mechanism in Arbitrary Neural Style Transfer

论文 代码 摘要 快速、任意的风格转换引起了学术界、工业界和艺术界的广泛关注,因为它支持各种应用的灵活性。现有的解决方案要么专注于不考虑特征分布地将风格特征融入到深层内容特征,或根据风格特征自适应地规范化深层内容特征使得他们的全局统计量是…

ICCV2021:Spatially-Adaptive Image Restoration using Distortion-Guided Networks

论文 代码(应该还没放出来) 摘要 我们提出了一种基于学习的通用解决方案,用于恢复遭受空间变化的退化图像。先前的方法通常是特定于退化的,并且在不同的图像和图像中的不同像素上采用相同的处理。然而,我们假设这样的…

torch.bmm()验证

官网的说明 torch.bmm(input, mat2, outNone) → Tensorbmm的输入必须是3维的。其他维度会出错: import torch a torch.Tensor(4,2,2,3) b torch.Tensor(4,2,3,5) c torch.bmm(a,b)Traceback (most recent call last):File "/Users/XXX/Desktop/MyCode/xxx.py",…

Leetcode237 删除链表中的节点

题目连接 请编写一个函数,用于 删除单链表中某个特定节点 。在设计函数时需要注意,你无法访问链表的头节点 head ,只能直接访问 要被删除的节点 。 题目数据保证需要删除的节点 不是末尾节点 。 代码 class Solution:def deleteNode(sel…

Leetcode496 下一个更大元素 I

题目链接 给你两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。 请你找出 nums1 中每个元素在 nums2 中的下一个比其大的值。 nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在&#x…

Leetcode575 分糖果

题目链接 给定一个偶数长度的数组,其中不同的数字代表着不同种类的糖果,每一个数字代表一个糖果。你需要把这些糖果平均分给一个弟弟和一个妹妹。返回妹妹可以获得的最大糖果的种类数。 示例 1: 输入: candies [1,1,2,2,3,3] 输出: 3 解析: 一共有三…

Leetcode739 每日温度

题目链接 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。 示例 1: 输入…