深度学习-李宏毅GAN学习之CGAN

深度学习-李宏毅GAN学习之CGAN

  • 提出问题
  • Conditional GAN
  • Stack GAN
  • Image-to-image
  • Patch GAN
  • Speech Enhancement
  • Video Generation
  • 总结

提出问题

如果我们要做输入一段文字生成图片,比如:
深度学习-李宏毅GAN学习之CGAN_第1张图片
传统的方法是将文字放入一个神经网络,然后输出一张图片,希望图片跟真实的图片越接近越好:
深度学习-李宏毅GAN学习之CGAN_第2张图片
但是这么做产生的图片会模糊,甚至很奇怪,比如说,输入的文字是train火车,真实的图片可能有好多张:
深度学习-李宏毅GAN学习之CGAN_第3张图片
那为了减小跟真实图片的差距,就会产生模糊的图片,因为他要跟所有真实图片尽可能的差距小,只能取他们的平均啦,所以就会模糊。这个时候就有让人提出来了CGAN。

Conditional GAN

深度学习-李宏毅GAN学习之CGAN_第4张图片
如果用传统的GAN就是将图片跟文字一起输入生成器,然后输出一张图片,然后再弄个判别器,来判别生成的图片是真是假,但是这样可能会忽略了输入的文字,生成器为了骗过判别器而直接不管输入的文字了,就生成真实的图片,生成出来的图片或许够真实,但是可能跟输入的文字没关系。

所以就需要CGAN出场啦:
深度学习-李宏毅GAN学习之CGAN_第5张图片
同样还是一样的生成器和输入,但是判别器这里需要将图片和文字一起输入,然后同时判断图片的真实,以及图片的真实和文字是否匹配,也就是有个匹配对,我们需要的是(火车,火车图片),不需要(其他文字,真实火车)和(火车,其他真实图片),这样就能保证是文字和图片的搭配。

所以基本的改变在判别器,那对于判别器的结构,又有两种不同的:
深度学习-李宏毅GAN学习之CGAN_第6张图片
很多基本都是第一种方式,2个网络,将2个输入编码成2个向量,然后输入到另一个网络中,然后输入一个数,来表示输入的图片是否真实,输入的文字和图片是否匹配。

第二种方式是图片先输入到一个网络,判断是否真实,然后将文字和刚才输出的结果再输入一个网络,破案端是否匹配。

貌似第二种方式更加直观,能知道是是什么原因导致图片的问题,是因为真实性不够,还是因为文字不匹配,只需要调整某一个网络参数即可。第一种可能出现2种不匹配的情况(真实图+不匹配的文字,不真实的图+匹配文字),他给出的都是不好的分数,但是无法分别是那种情况,那可能需要调整多个网络参数了。

我们的弘毅老是喜欢动漫,所以拿了个动漫头像的例子,输入的头发和眼睛的描述,输出头像:
深度学习-李宏毅GAN学习之CGAN_第7张图片

Stack GAN

如果要生成分辨率大的图,用普通的GAN很难,分辨率太大,参数就多了,很容易过拟合,坏掉。
所有提出了Stack GAN,分成2步去做,这样就等于渐进的去训练,结果应该会比较好,据说英伟达可以承受1024x1024的图片,就是类似的思路。

深度学习-李宏毅GAN学习之CGAN_第8张图片

Image-to-image

前面说的是文字产生图片,当然也可以图片产生图片啦:
深度学习-李宏毅GAN学习之CGAN_第9张图片
传统做法就是弄张图片扔进网络里,希望他能生成真实的图片,但是往往会比较模糊,因为产生平均结果,道理跟文字一样的:
深度学习-李宏毅GAN学习之CGAN_第10张图片
所以我们也跟图片的思路一样,给判别一对数据,希望他生成的图片既真实又符合我们输入的图片:
深度学习-李宏毅GAN学习之CGAN_第11张图片

Patch GAN

在图片转图片过程中,因为图片太大,很容易出现参数过多,过拟合,或者训练过慢,因此提出了分块检测的方案,让判别器每次都判别一块区域当然这个区域大小是可以选择的,如果区域是整个图片,那估计效果也不会好,跟传统的GAN一样了,如果是小到一个像素,那就是PixelGAN了,所以这个区域基本是要调出来的。
深度学习-李宏毅GAN学习之CGAN_第12张图片

Speech Enhancement

当然前面的技术也可以用于音频处理,用来去噪。
传统的做法是拿清楚的音频,然后加噪声,将加噪声后的图片输入网络,然后输出,希望输出的和清楚的音频越近越好,中间都是用梅尔语谱图(频谱图),用CNN网络。可想而知这样出来的声音跟图片一样,也比较模糊。
深度学习-李宏毅GAN学习之CGAN_第13张图片
所以我们要加上GAN,跟前面一样,需要一对数据,相匹配:
深度学习-李宏毅GAN学习之CGAN_第14张图片

Video Generation

同样的,也可以用在视频上:
深度学习-李宏毅GAN学习之CGAN_第15张图片
上图是用GA生成小精灵的视频,如果不用GAN,会出现小精灵走着走着消失了,因为走到一个口子上,小精灵可能向左走,也可能向右走,都是对的,然后一平均就消失了。

总结

总的来说,CGAN就是我们希望对输出的东西有所约束,不至于出现不可控的情况,所以输入和输出都需要有匹配的数据。

好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵,图片来自李宏毅课件,侵删。

你可能感兴趣的:(生成对抗网络GAN,深度学习,李宏毅机器学习,CGAN,GAN,深度学习,生成对抗网络,李宏毅机器学习)