[ICCV2019 Best Paper Award] SinGAN: Learning a Generative Model from a Single Natural Image

本篇是刚刚召开的ICCV2019获得Best Paper Award的一篇文章。
[arxiv] : 链接
[homepage] : 链接
[code] : github链接
[demo动画] :youtube链接


Too Long; Didn’t Read

本篇文章是一篇关于GAN作图像生成和图像编辑的文章。

  1. 在GAN领域首次尝试使用单张图作为训练数据生成保证结构不变而具有多样性的图片。(图1)
    单张图训练
图1. 单张图训练生成大小、内容均不同的图片
  1. 能够在各种不同的任务:图画转换、图像编辑、图像平滑、超分辨率、动画等领域都能达到很高的质量。(图2)
    处理不同的任务
图 2. 对不同的任务都有很好的效果

信息摘要

模型:Unconditional GAN
方法:用一张图不同大小的patch叠加训练,让不同大小的GAN模型叠加成金字塔型,用噪声来增加多样性即图片上的变化。
亮点:只用一张图训练大大减小了训练开销,能够处理在原始图像上的多种不同问题。
缺点:对于不同图像的任务都需要重新训一遍模型(或通过放缩scale),不具备很好的泛化能力。


Motivation & Related Work

作者对于本文提到的两点:单图像训练和图像编辑都进行了阐述。

  • 对於单图像训练问题,以往的方法有些事由原始图像指导的任务(图像翻译)、而无条件的任务则是基本都有语义描述作为辅助,本文的模型可以是说是完全脱离了对其他辅助信息的依赖,仅仅需要原图像训练后就可以由模型生成模仿图像。(图3)
    图3
图 3. 与传统的通过语义模型辅助的生成器相比,更能保留住结构特征信息
  • 对于图像编辑问题,传统的方法都主要是用GAN去抓住同一类别图像的特征。而作者这里提出了一个更大胆的想法:去抓住图像共有的块(patches)的特征。通过这些特征在不同scale上的叠加从而学习出图像的结构特征。这一点也是说明了本模型如何能够通过一张图像的训练去做这么多任务(因为他们本质还是相同的)。

Model

本文的模型结构稍微比较复杂,但是很好理解:(图4)
图4

图 4. 模型结构

模型整体由多个不同大小的生成器和判别器叠加而成,下面是一次训练的流程。

  • step1. 首先从一个很小的patch出发,构建一个小patch的噪声图ZN,通过生成器(full conv保证大小不变)后,生成同样大小的图像与Ground Truth相同块进行对比,构成损失。
  • step2. 将生成器生成的图像上采样r倍,与同样大小的噪声叠加(图5),再用同样的方法生成图像传给判别器。
    图5
图 5. 每个生成器内部结构
  • stepN. 扩大后的图像与原图大小相等,用最后一层生成器生成图像,产生损失。损失回传更新参数。
    具体计算方法参考下面算法部分。

算法 & 参数定义

生成器部分

对于第一层,由于没有上层图像,直接由噪声过Conv生成:
在这里插入图片描述
对二层及以后,增加了上层传来的结构信息:
在这里插入图片描述
对于每一层的生成器(参考上图5),采用residual learning的思想去学习如何补充信息:
在这里插入图片描述
两个加号运算分别对应了图5中的两次相加。

损失函数部分

损失函数采用的是最基本的GAN中的对抗损失及图像的重构损失:
在这里插入图片描述
对抗损失即GAN为判断图像真假,生成器与判别器博弈产生的损失,详细可以看GAN的基本原理。重构损失则是判断生成的图像和真实图像在pixel-wise的不同:
在这里插入图片描述
这里直接很暴力地用了RMSE。

参数定义
  • Conv-blocks: Conv(3*3)-BN-LeakyReLU
  • GAN loss function: WGAN-GP
  • min patchsize: 25
  • max patchsize(image size) : 250
  • r : 4/3 ( (4/3)8 ≈ 10 ) 即8层后可以扩大到最大size。

Results

作者在定性分析和定量分析展示了本模型很有说服力的结果。

随机生成不同size图像

在这里插入图片描述

超分辨率

右上角是原始图像
在这里插入图片描述

模型优化讨论

对于模型编辑的问题,这里作者做了从模型金字塔的哪一层开始生成图像的对比实验:(图8)
在这里插入图片描述

图 8. 从不同层生成图像的不同结果

这里作者从不同层的意思就是在该层之后,将噪声替换成input image对应patch的图像。如图8所示,如果全部都是噪声生成,很可能产生如最左边一列比较奇怪的结构。

同时作者还探讨了对于金字塔深度对生成图像质量的影响(图9)
在这里插入图片描述
可以看到模型如果过于浅也无法学习到足够的结构信息进行重构,从而使生成的图像产生混乱。

下面图10-13均是模型在不同图像编辑上的结果。
在这里插入图片描述

图 10. 超分

在这里插入图片描述

图 11. 画到图像的转化任务

在这里插入图片描述

图 12. 图像编辑的平滑
这里作者采用的对比(c)是photoshop中的插件,而(d)的表现比PS显得更加真实。

在这里插入图片描述

图 13. 图像平滑

Thoughts

本篇文章的亮点非常能吸引人,仅用单张图的训练就能达到如此好的效果。笔者这里用实验室的机器基本只用两个小时就可以跑完一次完整的训练,但是对于较为复杂的图像生成效果还并不是很好(用了人像结果十分扭曲)。作者也提到了如果这个模型应用到工具,那么对于每一个不同的任务都需要去训练一次,这样是十分低效的。
尽管如此,本篇的学习图像内在分布,从而简化训练集并且将模型对应的单任务扩充到多任务的思想还是值得这个Best Paper Award。


My Experiments

用自己的几张图跑了下这个模型,效果出乎意料的好
在这里插入图片描述
可以看到除了在第一张图和第四张图(图形语义过于简单或过于复杂)的情况下,对于一般的图像都能随机生成逼真切充满变化的样本。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章