GAN
解决的问题:
传统的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采取了金字塔的方式
- 先输出低分辨率的图片
- 将之前输出的低分辨率图片作为另一个网络的输入,然后生成分辨率更高的图片
v1.5.2