0%

GAN-pix2pix-CycleGAN-pix3pixHD

GAN

解决的问题:

minGmaxDE[logD(G(z))+log(1D(x))]\min _{G} \max _{D} \mathbb{E}[\log D(G(z))+\log (1-D(x))]

传统的GAN的不足:

  • 没有用户控制能力

    在传统的GAN里,输入一个随机噪声,就回输出一幅随机图像

    但是,用户想输出的图像是和输入有对应的、有关联的。比如输入一只猫的草图,输出同一形态的猫的真实图片(这里对形态的要求就是一种用户控制)

    这里写图片描述

  • 低分辨率(Low resolution)和低质量(Low quality)问题

    尽管生成的图片看起来很不错,但是如果放大看,就会发现细节相当模糊

    这里写图片描述

改善的目的就是(1)提高GAN的用户控制能力(2)提高GAN生成图片的分辨率和质量

步骤:

pix2pix:有条件地使用用户输入,它使用成对的数据进行训练

CycleGAN:使用不成对的数据就能训练

pix2pixHD:生成高分辨率、高质量的图片

这里写图片描述

pix2pix

对传统的GAN做了一个小改动,它不再输入随机噪声,而是输入用户给的图片:

然后建立输入和输出的对应关系:将G的输入和输出一起作为D的输入

这里写图片描述

CycleGAN

pix2pix必须使用成对的数据进行训练

而CycleGAN值需要输入数据的一个集合(比如一堆马的照片)和输出数据的一个集合(一如一堆斑马的照片)就可以了

这里写图片描述

pix2pix

这里写图片描述

CycleGAN

这里写图片描述

但是,直接使用不成对的数据是不奏效的。网络会直接忽略输入,随机产生输出!所以需要对网络增加限制

即我们如果将马变成斑马,然后再变成马,那么最后的马和开始输入的马应该是一样的

具体细节。除了之前提到的把马斑马的网络G,我们还需要一个把斑马变回马的网络F

那么,一匹马x用G变成斑马s = G(x),然后再用F把它变回马F(s),得到的马应该和一开始的马是一样的,即x = F(G(x))

这里写图片描述

翻过来,斑马变成马再变回斑马也需要满足要求,注意这一步最好不要省略。

然后同时优化G和F,最后就能拿到一个想要的网络G

CycleGAN为什么有效

CycleGAN成功的原因在于它分离了风格(Style)和内容(content)。人工设计这种分离的算法是很难的,但有了神经网络,我们很容易让它学习者去自动保持内容而改变风格

存在的问题:CycleGAN只能输出256p/512p的低分辨率图片

pix2pixHD

pix2pixHD采取了金字塔的方式

  • 先输出低分辨率的图片
  • 将之前输出的低分辨率图片作为另一个网络的输入,然后生成分辨率更高的图片

这里写图片描述

Powered By Valine
v1.5.2