SinGAN解读: Learning a Generative Model from a Single Natural Image(如何从单张自然图片学习一个生成模型)

拟解决问题

在SinGAN之前已经有很多工作尝试使用单张图像训练生成式模型,但这些工作大多是条件式生成模型,只能完成某种特定的图像到图像的转换任务(如超分辨率等),另外一些非条件式生成模型也只局限在纹理这样简单结构的图像生成上。

提出方法

提出一个非条件的,可以通过一张简单图片学到信息的生成模型,模型可以学到一副图像上的图像块的内部分布,然后利用学到的信息,生成高质量、更多样性的样例,这些样例有着与原图相似的图像内容。
SinGAN是一个包含金字塔模型的全卷积GAN模型,每一层GAN学到图像上不同尺度的图像块的分布,通过这种金字塔型的GAN网络,可以生成任意尺寸和比例的样例。这些样例有着相当大变化性,同样保留了训练图片的全局结构个精细的纹理。

具体方法

  • 我们可以先将图像缩小,再切出大图像块来训练。这样图像块分辨率低,容易训练,并且也保留了图像的整体信息。举个例子,对于原先200x200分辨率的图像,我们先降采样到40x40,再切成若干个11x11的块,能切出约800个,再用这800多个图像块训练GAN,生成的图像块应当保留了图像整体的布局信息。
  • 虽然这样生成的图像很模糊,但我们已经有了一个整体的大致结构,只需要给图像上加上细节就可以了。不难想到,我们之前在原始图像上切出的11x11小图像块训练的GAN模型就有了意义,里面包含了我们目前所需要的细节信息。
  • 再多加几个尺度进来,从最模糊的图像逐步加入细节。
    SinGAN使用多个GAN结构分别学习了不同尺度下分辨率11x11的图像块的分布,并从粗糙到细致、从低分辨率到高分辨率逐步生成真实图像。

方法详解

SinGAN解读: Learning a Generative Model from a Single Natural Image(如何从单张自然图片学习一个生成模型)_第1张图片

如果理顺了之前的思路,上面这个架构图应该很好从整体上理解。SinGAN由N+1个GAN结构组成,从粗糙到精细分别为(GN, DN),…(G0,D0)。对于其中第i层,Gi学到了该尺度下11x11图像块的分布,并能够结合上一尺度的输出生成该尺度下的真实图像;Di能够判别一个11x11图像块是否是该尺度下的真实图像块。

SinGAN解读: Learning a Generative Model from a Single Natural Image(如何从单张自然图片学习一个生成模型)_第2张图片

Gi输入一张噪声图和放大后的上一层生成器输出,作者采用了一种残差学习的方式。即将噪声图和图像叠加后输入网络,将网络输出与原图叠加后作为最终的输出。网络学习到的将是图像中缺失的细节信息。如上图所示

SinGAN的损失函数形式如下:
在这里插入图片描述
损失函数由adversarial loss和reconstruction loss两部分组成。其中adversarial loss使用了WGAN-GP loss,可以认为是文初提到的GAN loss的升级版,可以提升训练稳定性。reconstruction loss的目的是希望存在一组随机噪声输入,最终输出的图像就是原图。

结果

SinGAN在(1)Super-Resolution(超分辨率)、(2)Paint-to-Image(图画-图像转换)、(3)Harmonization(协调)、(4)Editing(编辑)、(5)Single
Image Animation(单图动画)都可以用到。

SinGAN解读: Learning a Generative Model from a Single Natural Image(如何从单张自然图片学习一个生成模型)_第3张图片

参考文献

从一张风景照中就学会的SinGAN模型,究竟是什么神操作?| ICCV 2019最佳论文.
ICCV2019最佳论文SinGAN全面解读,看这一篇就懂了.

你可能感兴趣的:(GAN,深度学习,人工智能,计算机视觉)