Papers/2019 ICCV 最佳论文 -- SINGAN

Papers/2019 ICCV 最佳论文 -- SINGAN

Title

SinGAN: Learning a Generative Model from a Single Natural Image 主要思想是通过单张自然图片来训练生成对抗网络

Summary

GAN 包含生成器和判别器:

  1. 神经网络G(Generator,生成器),作用是生成分布。输入属于均匀分布/高斯分布的随机变量z,输出G(z),其分布尽量接近真实数据分布。

  2. 神经网络D(Discriminator,判别器),作用是判别分布。输入数据点x,输出D(x)表示x属于真实分布的概率。

一般来说训练 GAN 来生成图像,都需要大量的数据。目前已经有部分研究尝试使用单张图像训练生成式模型,但这些研究大多是条件式生成模型,只能完成某种特定的图像到图像的转换任务(如超分辨率等),另外一些非条件式生成模型也只局限在纹理这样简单结构的图像生成上。

而该论文提出的 SinGAN 只需要单张自然图像,就可以训练一个生成式模型,是第一个非条件式的、使用单张自然图像训练的生成式模型。也就是说,训练后的 SinGAN 可以接受一个随机噪声的输入,生成新的自然图像,并且在各种图像操作任务上都有着很好的应用。

SYSTEM OVERVIEW

  1. 如下图所示,SinGAN 使用多个 GAN 结构分别学习了不同尺度下分辨率 11x11 的图像块的分布,并从粗糙到细致、从低分辨率到高分辨率逐步生成真实图像。

  2. 对于每一层 GAN 来说,只有一张图片输入是不够的。因为 GAN 的思想是估计真实数据的分布,而一张图像仅仅是从真实数据分布中采样的一个样本点。但实际中无法只通过一个样本点估计出原始分布,一个直观的想法是,我们可以把这一张图像切成块,这样我们就有了很多张图像。

  3. 所以每一层 GAN,对应着不同的图像分辨率,从上往下逐步降采样,分辨率逐步降低,图像块分辨率越低,越容易训练,并且也保留了图像的整体信息。举个例子,对于原先 200x200 分辨率的图像,先降采样到 40x40,再切成若干个 11x11 的块,能切出约 800 个,再用这 800 多个图像块训练 GAN,生成的图像块应当保留了图像整体的布局信息。

  4. 虽然最下面一层 GAN 生成的图像很模糊,但已经有了一个整体的大致结构,只需要给图像上加上细节就可以了。所以逐步上使用分辨率更高的图片,对应的 GAN 层可以学习到更加精细的图片细节,从下往上最模糊的图像逐步加入细节。

  5. SinGAN 由 N+1 个 GAN 结构组成,从粗糙到精细分别为(\(G_{n}\), \(D_{n}\)),…(\(G_{0}\), \(G_{0}\))。对于其中第 i 层,\(G_{i}\) 学到了该尺度下 11x11 图像块的分布,并能够结合上一尺度的输出生成该尺度下的真实图像;\(D_{i}\) 能够判别一个 11x11 图像块是否是该尺度下的真实图像块。这里要注意的是 所有的 G 和 D 都拥有相同的网络结构,都由 5 组 3x3 的卷积组成,都拥有 11x11 的感受野,将一张图像输入一个拥有 11x11 感受野的网络,网络输出的每个位置的值,等价于原图以该位置为中心,大小为 11x11 的图像块输入网络后的输出值。在这样的设计下,输入完整的图像,和把图像切成 11x11 的块分别输入,是等价的

  6. SinGAN 的判别器:对于第 i 层判别器 \(D_{i}\),输入为降采样 \(r^{i}\) 倍的训练图像 \(x_{i}\),设其大小为 NxMx3。首先输出大小为 NxM 的矩阵,其中每个位置的值都表示了输入图像以该位置为中心 11x11 的图像块属于真实图像块的概率。\(D_{i}\) 最终的输出是这 NxM 个值的算术平均值。用这种方式,\(D_{i}\) 判别了某个 11x11 图像块是否来自该尺度下真实的图像块分布。这种判别器叫做 Markovian Discriminator。

  7. SinGAN的生成器:输入噪声图 \(z_{n}\),经过生成器 \(G_{n}\),得到图像\(D_{n}\);将 \(\tilde{x}_{n}\) 放大 r 倍后,连同另一个噪声图\(z_{n-1}\)一起输入生成器 \(G_{n-1}\),生成细节更多的图像 \(\tilde{x}_{n-1}\)。以此类推,直至经过生成器 \(G_{0}\) 得到拥有丰富细节的图像 \(\tilde{x}_{0}\)。如下式:

    \(\tilde{x}_{N}=G_{N}\left(z_{N}\right)\)

    \(\tilde{x}_{n}=G_{n}\left(z_{n},\left(\tilde{x}_{n+1}\right) \uparrow^{r}\right) = \left(\tilde{x}_{n+1}\right) \uparrow^{r}+\psi_{n}\left(z_{n}+\left(\tilde{x}_{n+1}\right) \uparrow^{r}\right), \quad n<N\)

    对于 i<N, 每一个生成器 \(G_{i}\) 的输入是一张噪声图加上放大后的上一层生成器的输出,经过 5 层卷积输出,再原图叠加后作为最终的输出,类似于残差网络中的skip connect。而且由于生成器是全卷积网络,我们可以在测试时通过改变噪声图生成任意大小和纵横比的图像,每一个 \(G_{i}\) 网络如下图所示:

  8. 训练过程与损失函数。SinGAN 采用逐层训练的方式,从第N层(最粗糙的层)开始,每层训练结束后参数就固定下来,接着训练下一层。损失函数如下所示:\(\min _{G_{n}} \max _{D_{n}} \mathcal{L}_{\mathrm{adv}}\left(G_{n}, D_{n}\right)+\alpha \mathcal{L}_{\mathrm{rec}}\left(G_{n}\right)\),损失函数由 adversarial loss 和reconstruction loss 两部分组成。其中 adversarial loss 使用了 WGAN-GP loss,是 GAN loss 的升级版,可以提升训练稳定性。reconstruction loss 的目的是希望存在一组随机噪声输入,最终输出的图像就是原图。每一层的随机噪声如下:\(\left\{z_{N}^{\mathrm{rec}}, z_{N-1}^{\mathrm{rec}} \ldots, z_{0}^{\mathrm{rec}}\right\}=\left\{z^{*}, 0, \ldots, 0\right\}\),其中 z* 是训练前随机选取的一个值,开始训练之后不再改变。reconstruction loss 形式化如下: \[ \mathcal{L}_{\mathrm{rec}}=f(x)=\left\{\begin{array}{c} {\left\|G_{n}\left(0,\left(\tilde{x}_{n+1}^{r e c}\right) \uparrow^{r}\right)-x_{n}\right\|^{2}} , n<N\\ {\left\|G_{N}\left(z^{*}\right)-x_{N}\right\|^{2}}, n=N \end{array}\right. \] 上式表示第 i 层生成器的输出与该层尺度下的原图之差的二范数尽可能小,也就是生成图片与真实图片的偏差尽可能小。

Evaluation

定量分析

  1. AMT 用户研究:设计两组实验:一组实验展示真实图片和生成图片,并让用户选出真实图片(paired);另一组实验是展示图片(unpaired),让用户判断是真实图片还是虚假图片,下图是实验结果。

  2. Fr´echet Inception Distance(FID),用于测量生成图像的深度特征分布与真实图像的深度特征分布之间的偏差,但是在本论文中只有一张图片,因此提出 Single Image Fr´echet Inception Distance,用以衡量每一层 GAN 的真实图片和生成图片之间的分布差异。


    它在各种图像操作任务上都有着很好的应用,在所有测试任务下,生成的样本成功地保留了物体的全局结构,以及精细的纹理信息。

  3. 超分辨率:在一张低分辨率图像上训练SinGAN,不断将图像上采样,并输入最精细级别的生成器中,可以达到超分辨率的效果。超过目前最先进的内部方法和外部方法,和 SRGAN 的效果相当。
  4. 绘画图像转换:在一张图像上训练 SinGAN(第一列),将一张绘画风格的图像(第二列)输入某较粗糙尺度的生成器中,输出的结果将该绘画转换成了真实图像。在视觉质量方面超过最先进的分割转换方法。
  5. 图像编辑:在一张背景图像上训练 SinGAN,然后把图像部分区域复制并粘贴到其他位置,将经过编辑的图像输入某中间尺度生成器,输出的结果恢复了图像的真实感。
  6. 图像和谐化:在一张图像上训练SinGAN,在图像中加入“不和谐”因素(无关物体),输入某中间尺度生成器后,输出的结果实现了图像整体风格的和谐化。
  7. 根据单张图片生成一系列动画:沿着图像中物体的所有外观的流形移动,可以从单个图像合成连续的运动图片帧。

Conclusion

SinGAN可以生成新的具有真实感的图像样本,在保留了原始的图像块分布的基础上,创造了新的物体外形和结构。

SinGAN的局限性主要表现在:

  1. 当图像块的差异较大时,无法学到很好的分布,容易导致不真实的现象出现。直接使用人脸图像训练SinGAN,生成的图像非常不真实。

    下图是一些示例。第一列生成的图像不真实,后两列是将原图降采样后输入N-1层和N-2层产生的输出结果,虽然不真实感有所降低,但图像和原图的差异也变得非常小。


image.png

  1. 生成图像的内容高度受限于训练图像提供的语义信息,换句话说就是“创造性”较差。

评论