CVPR2020|Image Processing Using Multi-Code GAN Prior【论文阅读笔记】
作者
Jinjin Gu, Yujun Shen, Bolei Zhou
相关链接
- Paper:https://openaccess.thecvf.com/content_CVPR_2020/html/Gu_Image_Processing_Using_Multi-Code_GAN_Prior_CVPR_2020_paper.html
- Code:https://github.com/genforce/mganprior
- Webpage:https://genforce.github.io/mganprior/
1.前言
论文发表在2020年的CVPR上,作者是香港中文大学周博磊团队的三位成员。该论文做的工作,一句话说来就是:提出了一种mGANprior的方法,这种方法利用预训练的GAN模型通过多潜码(multiple latent codes)的方式来重建真实图像。
先上一张效果图:
2.介绍
GAN 自从2014年由Goodfellow大神提出以后,已经火到了2020年,在很多领域都取得了成功。但是在真实图像处理这一方面还是存在很多挑战。之前的工作要么是通过反向传播要么是通过训练一个encoder来将图像空间映射(invert)回潜空间。而利用这两种方法重建图像的效果总是差强人意。
由此,文中作者提出一种叫做多码GAN先验(multi-code GAN prior,简称mGANprior)的方法,将已经训练完好的GAN模型作为一种有效先验,用于多种图像处理任务中。具体而言,作者在生成器(generator)的中间层用多种潜码(multiple latent code)来生成多种特征图(feature map),并通过自适应通道重要性机制(adaptive channel importance)将他们组合起来,重建输入图像。
文中这种将潜空间过度参数化的方法大大地提高了图像重建的质量,性能比现有的很多方法都要好。该方法还可以应用在真实世界的多种任务中,像图像重建,图像上色,图像超分,图像去噪,图像修补,语义操纵等。作者还进一步分析GAN模型中学到的层级表示性质,并尝试弄明白每一层所表示的知识。
3.方法
上图为Multi-Code GAN Prior的流程图:
简单介绍一下这个流程就是:
将N个潜码(latent codes)
{
z
n
}
n
=
1
N
\lbrace z_n\rbrace_{n=1}^N
{zn}n=1N输入到生成器
G
1
(
ℓ
)
G_1^{(\ell)}
G1(ℓ)中,生成N个feature map,即
F
1
(
ℓ
)
F_1^{(\ell)}
F1(ℓ)到
F
N
(
ℓ
)
F_N^{(\ell)}
FN(ℓ),其中
ℓ
\ell
ℓ表示第
ℓ
\ell
ℓ层中间层。每个feature map对应一个
α
\alpha
α,从
α
1
\alpha_1
α1到
α
n
\alpha_n
αn,其中的
α
\alpha
α即为一个被称为自适应通道重要性(adaptive channel importance)分数的权重,用来表示feature map对应通道的重要性。
并通过公式
∑
n
=
1
N
F
n
(
ℓ
)
⨀
α
n
\sum_{n=1}^N F_n^{(\ell)}\bigodot \alpha_n
n=1∑NFn(ℓ)⨀αn
将各个中间的feature map融合,其中的
⨀
\bigodot
⨀表示通道级相乘。
然后将融合后的feature map输入生成器
G
2
(
ℓ
)
G_2^{(\ell)}
G2(ℓ)中,输出重建图像,该步骤即
x
i
n
v
=
G
2
(
ℓ
)
(
∑
n
=
1
N
F
n
(
ℓ
)
⨀
α
n
)
x_{inv}=G_2^{(\ell)}(\sum_{n=1}^N F_n^{(\ell)}\bigodot \alpha_n)
xinv=G2(ℓ)(n=1∑NFn(ℓ)⨀αn)
最后通过由MSE损失和基于VGG的感知损失组成的损失函数:
L
(
x
1
,
x
2
)
=
∥
x
1
−
x
2
∥
2
2
+
∥
ϕ
(
x
1
)
,
ϕ
(
x
2
)
∥
1
L(x_1,x_2)=\lVert x_1-x_2\rVert_2^2+\lVert \phi (x_1),\phi (x_2)\rVert_1
L(x1,x2)=∥x1−x2∥22+∥ϕ(x1),ϕ(x2)∥1
优化
{
z
n
}
n
=
1
N
\lbrace z_n\rbrace_{n=1}^N
{zn}n=1N,
{
α
n
}
n
=
1
N
\lbrace \alpha_n\rbrace_{n=1}^N
{αn}n=1N这2N个参数,由此达到最佳重建效果。
4.实验
作者通过PGGAN和StyleGAN这两个SOTA GAN模型来验证mGANprior的效果。这些模型由不同的数据集训练而来,包括人脸图像数据集CelabA-HQ,FFHQ和风景图像数据集LSUN。
4.1 Comparison with Other Inversion Methods
作者将本文方法和以下三种方法做对比:1)优化单一潜码(single latent code)的方法;2)训练编码器(encoder)来反置(reverse)生成器的方法;3)联合1)2)将编码器输出用作进一步优化的初始化设置的方法。
从上图及上表可知,定性定量比较下文中方法均比其他方法好。相比单一潜码有限的表示能力,文中的多潜码方法可以更有效重建细节丰富的图像。
4.2 Analysis on Inverted Codes
- Number of Codes:
由下图知,潜码数的变化会导致重建质量的变化,潜码越多,重建质量越好。但潜码数超过20后,潜码数增加并没有显著地改善性能。
- Different Composition Layers:
从上图可知,一般组合的层数越高,逆映射的效果会越好。但是,按照作者之前工作所提的,更高层包含的往往是一些如边界、颜色这样的局部像素模式,而不是高维的语义。所以,在GAN学习到的高层组合特征很难在语义知识方面再利用。 - Role of Each Latent Code:
按照作者之前工作所提的,对于GAN模型中的特定层,不同的单元/通道控制着不同的语义概念。下图证明了,各潜码专门用来反置不同意义的图像区域由此组成整张图像。
4.3 Image Processing Applications
-
Image Colorization
-
Image Super-Resolution
-
Image Inpainting and Denoising
-
Semantic Maniputation
4.4 Knowledge Repesentation in GANs
文中提到,单一潜码限于其有限的表示能力,无法跨越训练数据和测试图像之间的domain gap。由下图可知,使用单一潜码重建的图像仍然非常依赖于原始的training domain(比如图上第一行第一列,由CelebA-HQ训练PGGAN模型得来的潜码生成效果更像人脸,而不是卧室)。相对的,文中的多潜码方法无论是用什么数据集训练的先验,重建的图像都接近卧室。
文中通过不同层的特征组合表现来进一步分析训练充分的GAN模型的层级知识。上图告诉我们,用的层数越高,重建的效果越好。这是因为重建往往专注于恢复低维的像素值。而GAN往往在底层表示的是抽象语义,顶层表示的是内容细节。上图同样可以观察到,用bedroom训练的模型用来反映射重建图像,用4层就够了,而其他数据集训练的模型则需要8层。这是因为不同的数据集代表着不同的语义,所以来自其他数据集训练模型的底层的高维知识没法用在高层的重建上。
文中通过上图的图像上色和图像修补任务,作进一步的层级分析。从图上可以看到,在第8层图像上色任务得到了最佳的结果,而图像修补任务在第4层达到最佳。这是因为图像上色更像是一个低维的渲染任务,而图像修补则需要GAN的先验用有意义的物体来填充缺失的内容。这跟前图的结论一致:来自GAN先验的低维知识能被用在较高的层级,而高维的知识能被用在较低的层级。
以上是本人的理解,可能不准确,如有误或者需要讨论的地方,还望指出
码字不易,如果您觉得有帮助,欢迎点赞和收藏~~