在 CVPR 2021, 我们提出了 GLEAN, 利用预训练的 StyleGAN 作为 latent bank, 提高图像超分辨率的效能。当时,GLEAN 在 Bicubic 下采样获得非常好的效果。
之后,我们向前踏出一步,在真实人脸复原上作出尝试。今天,我们就在这里分享一下我们现在的进展。
假如你突然找到自己十年之前的童年照,但是相机性能不足,和照片老化等等问题影响了它的品质,又或者你有一个非常喜欢的自拍照,但当时环境因素影响了清𥇦度,那这个时候应该怎么办?
我们无法回到过去再拍一次,那只可以依靠后处理了。这时候,就需要依靠一个强大的图像复原算法把图片质量提升。
近年来,随着深度学习的发展,各种复原任务的能力也获得显著提升。但早年的方法一般只能在有限的场景 (例如 Bicubic 下采样) 上发挥出效果。
近年,在合成退化下的发展已慢慢成熟,大家的注意力亦开始走向现实,发展能在实际场景应用的算法。
本文内容
概述
问题
训练方式
方法
实验结果
总结
如何使用 GLEAN
1. 概述
人脸复原是图像复原的一个子领域,目的是从一个低质量的输入人脸图像,复原成一个高质量的人脸。相对于通用场景,人脸具有较强的结构信息,现有的工作一般也会利用相关的先验信息,例如五官位置,来提高复原质量。
虽然人脸有着较强的结构,但在实际情况中,网络需要适应图片中不同程度和类别的退化。这仍然是一个相当困难的问题。我们在 CVPR 2021 提出的 GLEAN, 通过利用预训练的生成网络 (StyleGAN) 来提供自然图片先验,能有效地提高超分辨率的表现。
我们猜想,这个思路在真实图像超分中可能发挥更大的作用,因为在真实图像中,除了分辨率的影响外,不同的退化(模糊,噪聲等)导致问题变得更病态,因此我们更需要额外的先验引导网络。所以,我们这次利用 MMEditing 对 GLEAN 的训练作出修改,使它能应用到真实图像当中。
2. 问题
Generative Adversarial Network (GAN) 已在超分辨率任务中被广泛使用,其目的是丰富复原图像中的纹理细节。现有方法一般可以分为两种:
1) 第一种方法(如 ESRGAN)训练生成器以处理放大任务,其中通过使用鉴别器将真实图像与生成器生成的放大图像区分开来进行对抗训练。在这种设置下,生成器既负责捕获自然图像特征,又负责保持对 ground-truth (GT) 的保真度。这不可避免地限制了生成自然细节的能力。因此, 这些方法经常产生伪像和不自然的纹理。
2)第二种方法(如 PULSE)通过优化来更好地利用 GAN 的隐空间来解决上述问题。但是,由于低维隐码 (latent code) 和图像空间中的约束不足以指导恢复过程,这些方法通常会生成低保真度的图像。
如下图所示,虽然 ESRGAN 能够恢复猫的结构(例如,姿势,耳朵的形状),但仍难以产生逼真的纹理。另一方面,尽管 PULSE 的输出是真实的,但其保真度非常低, 未能恢复物体的结构。
3. 训练方式
如上面所讲,真实图像复原除了需要提高分辨率外,还需要去除模糊,噪声等退化。因此,我们需要在训练当中让网络学习如何去除这些退化。
在这个工作中,我们在训练中加入生成的退化,例如高斯模糊和高斯噪声,而网络就跟我们 CVPR 2021 的结构保持一样。在训练中使用额外的退化,可以让网络进行超分办率的同时进行复原,在真实人脸上达到非常好的效果。
MMEditing 已经有一系列的退化,大家可以自由地组合这些退化来训练模型,非常方便。以下,我们会简单介绍我们的网络 - GLEAN
4. 方法
在大规模自然图像上训练的 GAN 模型可捕获丰富的纹理和形状先验。先前的研究表明,可以通过 GAN Inversion 来获取此类先验信息,以使各种图像恢复任务受益。但是,如何利用先验而不进行反演过程中的复杂优化仍然是一个没有被充分研究的问题。
在这项研究中,我们在一种新颖的 encoder-bank-decoder 结构中设计了 GLEAN,该体系结构允许人们只需要一个 forward-pass 就可以利用生成先验。如下图所示,给定严重降采样的图像,GLEAN 应用 encoder 提取潜在矢量 (latent vector) 和多分辨率卷积特征,这些特征捕获了重要的高层线索以及 LR 图像的空间结构,可以用于调节 latent bank,为 decoder 产生了另一组多分辨率特征。
最后, decoder 通过集成来自 encoder 和 latent bank 的特征来生成最终输出。在这项工作中,我们采用 StyleGAN 作为 latent bank。这里要强调的是这个概念可以扩展到其他网络,例如 BigGAN。
Encoder
为了产生 latent vector,我们首先使用 RRDBNet 从输入图像中提取特征。然后,我们通过以下方法逐渐降低特征的分辨率:
其中 Ei (i =1, 2, …, N)表示一个 stride-2 卷积和 stride-1 卷积的堆栈。最后,使用卷积和全连接层来生成 latent vector:
其中 C 是一个矩阵,其列表示 StyleGAN 需要的 latent vectors。C 中的 latent vector 是捕获图像的压缩表示,为 latent bank (StyleGAN) 提供 high-level 信息。为了进一步获得 LR 图像的局部结构并为结构恢复提供其他指导,我们还将多分辨率卷积特征 f_i 嵌入到 latent bank。
Generative Latent Bank
给定卷积特征 f_i 和 latent vector C,我们利用预训练的生成器 (StyleGAN) 作为 latent bank 来提供纹理和细节生成的先验。由于 StyleGAN 是为图像生成任务而设计的,因此无法直接集成到建议的 encoder-bank-decoder 框架中。在这项工作中,我们进行了三处修改,使 StyleGAN 更能配合我们的超分网络:
1)生成器的每个块都采用一个不同的 latent vector 来提高表达能力,而不是将一个latent vector作为输入。更具体地说,假设 StyleGAN 有 k 个块,那 C=(c_0, c_1, …, c_{k-1}),其中每个 c_i 代表一个 latent vector。我们发现这种修改导致输出的伪像更少。在以前的工作中也可以看到这种修改。
2)为了允许使用encoder的特征,我们在每个块中使用了一个附加的卷积来进行特征融合:
其中 S_i 表示具有附加卷积的块,而 g_i 代表第 i 个块的输出特征。
3)我们不是直接从 StyleGAN 生成输出,而是输出特征 g_i 并将它们传递给 decoder,以更好地融合 latent bank 和 encoder 中的特征。
优点: 我们的 Generative Latent Bank 与 Reference-Based SR 有着类似的想法。在 Reference-Based SR 中, 虽然使用外部 HR 信息作为图像字典可带来显着改善,但其网络性能对输入和参考之间的相似性很敏感。当参考图像或人脸部位(如眼睛、鼻子、嘴)选择不当时,不匹配的字典可能导致结果变差。另外,这些方法经常需要计算量大的全局匹配或人脸部位检测/选择来从参考中聚集适当的信息,阻碍了对具有严格计算约束的场景的应用。
相反地,GLEAN 并未构建图像字典,而是采用了 GAN-based 字典。我们的字典不依赖于任何特定的参考图像块。取而代之的是,它捕获图像的分布,并且可能具有无限的大小和多样性。此外,GLEAN 的计算效率很高,无需全局匹配和参考图像块选择。
Decoder
GLEAN 使用附加的具有渐进融合功能的 decoder 来集成 encoder 和 latent bank 中的特征以生成输出图像。它以 RRDBNet 特征作为输入,并将特征与 latent bank 中的多分辨率特征逐步融合:
其中 D_i 和 d_i 分别表示 3x3 卷积及其输出。除最终输出层外,每个卷积后面都有一个 pixel-shuffle层。通过 decoder 和 encoder 之间的跳过连接,可以增强 encoder 捕获的信息,因此 latent bank 可以将更多的精力集中在纹理和细节生成上。
5. 实验结果
我们这次的重点是在人脸复原上,所以我们多放一些在人脸上复原的效果给大家看。
如果想看更多的分析和实验结果,请到我们的论文查看。链接:https://arxiv.org/abs/2012.00739
6. 总结
1) 提出利用预训练的 StyleGAN 用作先验,提升复原质量。
2.)跟现有方法相比,GLEAN 在 质量和保质量均有明显的提升。
3.)可以拓展到真实人脸图像复原中,模型已开源到 MMEditing。
7. 如何使用 GLEAN
MMEditing 已经提供了预训练的模型。为了更方便大家使用,我们也提供了人脸对齐的工具包和人脸复原的 demo,现在,用家只需要准备好需要复原的图片,我们会自动找出图片里面的人脸,进行复原,然后贴回原来的照片中。
有了 MMEditing,现在有机会让你不用再忍受低清的痛苦,快点来把你的男神女神换成高清版本吧!
MMEditing 链接:
https://github.com/open-mmlab/mmediting