一、Conditional GAN 之前讲到的GAN是随机输入一个向量,会产生一张图片。 conditional GAN讲的是,可以输入一行文字,产生对应文字的图片,即可以控制输出的结果。 比如我们要train一个模型,输入文字,会输出对应图片。 用传统的方法来train,即上图,将文字输入一个神经网络,输出一副图像,使得与真实图像像素之间距离足够近。那么这样的模型可能会输入多张同类图片的平均,比如火车有很多张, 朝前的火车,朝后的火车,生成这样的图片都是正确的,但是生成它们的平均就有问题了,生成的图片是模糊的。 因此要用到GAN的技术 首先将要train的文字c和一个正态分布向量z输入G,会生成一张图片,然后将该图片和c输入D,得到一个scalar,该scalar会同时考虑条件(文字),也会考虑生成图片的质量。 如果只把x送入D,而不考虑c,比如c跟汽车有关,而G生成了一张特别清晰的猫,可能D会给x打高分,这显然是不合适的。 上图中下面两种情况都会给0分。 上图为D和G的训练过程。 上图中有两种常用的discriminator,但是好多文献似乎都用下面这种,这种似乎更有道理。它会输出两个值,一个代表x是生成的还是真实的,另一个代表c和x匹配的程度。 上图中第一张图似乎没有说明为什么给低分。
二、stack GAN stack GAN的核心思想是先生成小张的图,再产生大张的图。 image-image主要用于黑白图转彩色图,或者白天转夜晚等等。 使用传统的监督学习方法来训练,可能出现的问题之前了解到过,可能会使得到的图片不清晰。 使用GAN生成的图像左上角同样有一些问题。 应该使得G生成的图片与真实图片足够接近,即把GAN和close结合起来,生成图片的效果是很好的。 实际上,在image-to-image问题中,使用的discriminator不是左图中将整张图片放进去的,而是右边,一块一块的送到discriminator中。因为直接把左图整张图片放进去,会使得参数过多,可能会过拟合或者训练困难。 所以块的大小作为一个超参数,是需要调整的。
patch GAN不仅用于image-to-image问题中
|