GAN系列:李宏毅老师GAN课程P2+P3——Conditional GAN

本文介绍了Conditional GAN的原理和应用场景,包括Text-to-Image和Image-to-Image转换。通过条件的引入,GAN能够实现更具体的图像生成任务。文中探讨了Direct Transformation和Projection to Common Space两种方法,以及Cycle GAN和StarGAN等模型,阐述了如何在无监督条件下进行条件生成,并讨论了训练过程中的一些挑战和解决方案。
摘要由CSDN通过智能技术生成

看这个课程的时候,有弹幕说P1后直接看P4,然后再看P2和P3,这个顺序确实更好一点。这部分主题是条件GAN(Conditional GAN),所谓的条件就是我们对要生成的图片的要求和限制。之前生成器的输入是一个随机噪声向量,生成器根据向量产生任意的图像。在实际应用中,产生的图像一般是有特定限制的,比如要产生火车的图像,人脸的图像等。因此Conditional GAN更有实用价值。Conditional GAN中,整个GAN结构有所改变。生成器的输入不再只有一个低维向量,增加了条件(condition),这个条件的形式有多种,可以是文本(Text-to-Image),可以是图像(Image-to-Image)。这样生成器在条件的限制下产生特定的图像(限制就指导了图像生成的方向,之前的GAN只能通过判别器来指导图像生成的真假)。产生的图像若是直接输入到判别器中,判别器无任何改变,仍然只会判断真假,无法判断是否符合条件。因此这个限制条件也要和图像一起输入到判别器中,这样生成器的输入和输出均被关联到判别器中(判别器中会不会隐藏着生成器的结构呢),此时判别器就拥有了判断真假和判断条件两种作用。

在这里要明确一下,普通的GAN中,训练集的信息就只有真实图像的矩阵,图像没有任何标签,这样直接生成图像就是无监督学习(unsupervised learning);但Conditional GAN训练集的图像是有标签的,就是所谓的条件condition,那就相当于监督学习(supervised learning)了。

举例1. Text-to-Image:

输入文本信息,产生相应的图像和一般的图像分类问题刚好反过来,如果也用传统的监督学习方法来训练网络(如下图所示:训练目标就是生成的图片和数据集中图片尽可能接近——让网络学习到狗这个图像的结构,然后生成各种各样的狗)。这时会存在的问题是,普通的监督学习会产生各种狗的图像叠加后的平均图像(可以理解为网络学习到的是一个平均结果,而图像一平均就会产生非常模糊的结果)。GAN不同的是,判别器会区分真假图像,这些模糊的结果其实就是假图像,所以判别器的存在会导致这些图像被排除掉,指导生成器产生真正的图像,而不是单纯地对各种各样的图像取平均。

如下图所示:因为有各种火车的图像,都对应同样的train文本,导致网络学习时学到了各种火车图像的平均结果(输入是一样的,都是train,然而对应的标签却不同,是各种各样的火车图片,所以学习的结果就是一个模糊的标签。就相当于图片分类的网络,输入同一张图片,然而一会标签为1,一会标签为0,网络肯定学习到的是混乱的结果),根本就不能算作一张火车的图片。

和普通的GAN相比,conditional GAN的判别器输入加上了条件,那么输出所代表的意义也改变了:图片正确(真实)且和文字匹配才给高分,图片很假以及图片真实但不和文字(条件)匹配也是低分,如下图所示:

判别器所输出的标量包含了两个判别,其优化算法如下图所示:和普通的GAN相比,首先从数据集中采样得到的不仅是图像向量,而是图像向量和其文本标签组成的pairs(c, x),c就是condition也就是文本,x和之前相同;上面采样得到的标签还要和随机噪声向量组成pairs(c, z),输入到生成器中产生图像;产生的图像和其对应的标签(就是用来产生这个图像的标签)组成pairs(c, x~)输入到判别器中;由于判别器的目的有所改变(通过判别真假和条件与图像是否匹配),用来优化判别器的目标函数V增加了一项:log(1-D(c^{i},\hat{x}^{i})),注意这里的\hat{x}^{i}是从数据集中重新采样的真实图像向量(这是因为函数V里增加的那项而增加的步骤,普通GAN中没有此步),这一项里的条件c和图像向量x都是正确的,但是是不匹配的(因为条件标签是第一步时采样的,图像向量是此步之前刚刚采样的,采样的随机性保证了它们的不匹配),所以这对pair进入判别器的得分是越低越好,log函数就是越高越好,和前面那一项形式一样(其实只要是被视为错误的pairs都会是判别器给分越低越好,所以它们在目标函数中的形式就是一样的。如果又给判别器增加一项任务,a情况下判别器要给高分,那么a这种pairs和现在的既是真实图像又是条件匹配的那组pairs都是得分越高越好,所以在目标函数中的形式也是一样的:logD(...))。

判别器通过k次迭代训练后,开始训练生成器,和之前不同的是:重新从数据集中采样条件标签,和随机噪声向量组成pairs用来训练。下图里最后一步的参数更新估计写错了,因为是maximize所以应该是加上梯度吧。

在上述的Conditional GAN中,若是判别器给了一组pair低分,有两种可能性:图像是假的;图像和条件不匹配。这种打分方式作为指标用来指导(优化)这个对抗网络可能会有一定的模糊性:生成了假图像和生成了不匹配的pairs这两种情况的界限并不明显。因此在此基础上可进行一定的改进:判别器输出两个结果,图片正确与否和文字匹配与否分别打分。这导致判别器的结构有所改变,如下图所示:

上面的结构是只输出一个标量的判别器结构,和上一篇代码阅读里的判别器网络结构似乎不太一样,因为那个GAN中判别器的输入就是图像向量,而Conditional GAN的输入有图像(object)有文字(condition),是两种不同形式的信息,首先要各自通过一个network统一到同一种形式(这里的network应该就是编码器吧)。有共同的编码形式后,组成pairs输入判别器主体的神经网络中。

下面的结构是分别输出图像真假得分和条件匹配得分的判别器结构。图像通过普通的GAN判别器网络后输出真假的得分,然后结合条件c一起输入到一个network中得到标签匹配得分。注意图像object接的网络是绿色的,说明和上面那种结构中的判别器主体网络接近(卷积神经网络,而且是降维的,实现分类功能),而条件condition接的网络是蓝色的,说明和上面那种结构中紧挨着两个输入的网络是近似的,那就应该是个编码器类似的,把condition编码到一定维度,刚好图像object从绿色神经网络到这个蓝色编码器的箭头表示的应该也是一定维度的向量(不知道这个箭头表示的就是最后那个判别器得分还是判别器中间某一层的结果,如果是全连接层的结果,也是向量的形式),这两个向量都经过编码到同样维度后判断匹配度(如果是编码为只含0和1的向量,计算匹配度很简单,向量间进行异或就可以吧)。

另一种改进的结构:stack-GAN,看到stack就知道肯定是叠加的结构了。stack-GAN整体上就相当于两个GAN堆叠,如下图所示,若想生成256*256大小的图片,由于维度太高可能不好训练,可以先第一个GAN生成64*64大小的图片,第二个GAN再生成256*256的(是不是相当于网络深度增加了,但感觉这种结构块的叠加比直接增加网络深度效果好,比如VGG,resnet什么的都是结构块叠加吧,又开始瞎想了)。这种stack-GAN应该会生成质量更高的图片,因为中间也有判别器啊,相当于中级监督吧。

这个结构还挺复杂的,因为只是在课程里听了一点点,没有看论文,结构就没仔细研究,不知道上面的猜想都对不对。

举例2. Image-to-Image:

无知限制了我的想象力,在看到下图前我都想不出来几个Image-to-Image的例子。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值