singan:learning a generative model from a single natural image

ICCV2019最佳论文SinGAN全面解读,看这一篇就懂了_我爱计算机视觉的博客-CSDN博客点击我爱计算机视觉标星,更快获取CVML新技术轻沉 发自 浅度寺量子位 出品 | 公众号 QbitAI在韩国首尔举办的ICCV 2019会议上,SinGAN: Learning a G...https://blog.csdn.net/moxibingdao/article/details/106667524

singan的任务叫Internal Learning,通过一张图即可从噪声中生成相似图,其实我原本寄希望singan能做图像补全,这里的补全,指的是图像的延展,就是原本可能只是一部分图像不够两侧长度,延伸一下,包括在智能尺寸拓展中如果能够生成比较真实的场景,其实会有很惊艳的效果,但是看完全文,singan是借助金字塔模型,从patch中学习隐式信息,从而从单张图中建模出图像信息。

1.abstract

        非条件gan,我们的模型可以抓住图像块内在分布,singan包含了一个金字塔全卷积GAN,每个GAN负责学习每个尺度的patch分布,允许生成任意大小和纵横比的新样本,这些新样本具有显著的可变性,同时又可以保持训练图像的整体结构和精细纹理,从这一点上好像也可以做一些补全的任务,拉开图像的尺寸。

2.introduction

        本文引入一个新领域,从单个自然图像中学习的无条件gan,单个图像中的patch块的内部统计信息对学习一个强大的生成模型是足够的,长期以后,对单个自然图像中patch块分布进行建模是个挑战,比如去噪,去模糊,超分,去雾和图像编辑。

2 related work 

2.1 single image deep models. 

        将深度模型过度拟合为单个训练示例。

2.2 generative models for image manipulation

        我们对捕获同一类图像之间的共同特征并不感兴趣,而是考虑不同的训练数据-所有重叠的块都在单个自然图像的多个尺度上,可以从此数据中学习到强大的生成模型。

3.Methods

        学习单个训练图像x的内部统计数据的无条件gan。与常规的gan不同之处在于此处训练的样本是单个图像的patch,不是整个图像。

        我们选择go beyond texture generation.这需要许多不同的比例来捕获复杂图像结构的统计信息,捕获全局属性,图片中大型物体的排列和形状以及精细的细节和纹理信息。如下图所示,由patch-GANs的层次结构组成,patch-GAN可以抓住样本在不同尺度上的patch分布。

3.1 Multi-scale architecture

      Gn和Dn是一对,图像样本的生成从最粗糙的级别开始,并依次通过所有生成器直到最精细的级别,并且在每个级别都注入了噪声。所有的生成器和判别器的感受野都相同,因此随着生成过程的进行,感受野的大小逐渐减小,如上图所示,在最粗糙的尺度上,生成是在噪声上开始的,将白高斯噪声映射到图像样本,上图是singan的核心图,在代码层面如何实现patch呢?我们图像通常的patches输入,是将图片切成多个patches,分别求特征,singan是有区别。singan中数据处理使用金字塔的思想,将原始输入图像resize成9个尺度,但是9个尺度是resize的,因此都是原图,在输入到8个层级的gan上,将一张图输入到一个有11x11感受野的网络,网络输出的每个位置的值,等价于原图以该位置为中心,大小为11x11的图像块输入网络后的输出值。

具体的描述细节如下:

  • 我们之前提到,GAN估计了真实数据的分布。
  • 一张图像是从真实数据分布中采样的一个样本点。
  • 我们没法只通过一个样本点估计出原始分布。就好比现在有一个均值、方差都未知的正态分布,告诉你一个从该分布随机抽样的样本值,我们无法估计出原始分布的均值和方差。
  • 一个直观的想法是,我们可以把这一张图像切成块,这样我们就有很多张图像了!
  • 切成多大的块?
  • 假设我们切成比较小的块。举个例子,对于200x200分辨率的图像,切成若干11x11的块。最多能切出多少个?三万多个。用这三万多个11x11的小图像块,训练一个GAN,生成接近真实的11x11分辨率的图像块。听着很靠谱?但我们不知道怎么把这些小块拼起来组成一张高分辨率的图像……
  • 假设我们切成比较大的块。举个例子,对于200x200分辨率的图像,我们切成若干个150x150分辨率的块。最多能切出多少个?大约2500个。样本空间多大?256^(150x150x3)。样本空间相比我们拥有的样本数目来说太大了,换句话说,很难只用2500张图像训练就能生成分辨率高达150x150的真实图像(与此对比,MNIST数据集是分辨率28x28的二值图,训练数据都有55000张)。
  • 11x11的图像块容易训练,但是捕捉的内容太细,对生成整体图像帮助不大;150x150的图像块描绘了图像的整体信息,但是又太难训练……
  • 或许,我们可以先将图像缩小,再切出大图像块来训练。这样图像块分辨率低,容易训练,并且也保留了图像的整体信息。举个例子,对于原先200x200分辨率的图像,我们先降采样到40x40,再切成若干个11x11的块,能切出约800个,再用这800多个图像块训练GAN,生成的图像块应当保留了图像整体的布局信息。
  • 虽然这样生成的图像很模糊,但我们已经有了一个整体的大致结构,只需要给图像上加上细节就可以了。不难想到,我们之前在原始图像上切出的11x11小图像块训练的GAN模型就有了意义,里面包含了我们目前所需要的细节信息。
  • 再多加几个尺度进来,从最模糊的图像逐步加入细节。
  • 我们有了SinGAN。

        每个层级的有效感受野通常是图片高度的一半,因此Gn会生成图像的总体布局以及对象的全局结构。

         每个层级除了输入噪声之外,还输入了上一个层级生成器的输出图。

3.2 training

        从粗糙层到细节层,依次训练多尺度体系结构,训练完每个GAN后,会保持固定,对第n个GAN的训练损失包括一个对抗损失和一个重建损失:

在结构上,我们可以看到除了梯度惩罚的损失之外,还是多一个重建损失的,重建损失可能更多还是考虑到训练的稳定性。

猜你喜欢

转载自blog.csdn.net/u012193416/article/details/125558033