GAN生成对抗网络的原理及CycleGAN、Pixel2Pixel、starGAN的的原理即实现

生成对抗网络

1.生成对抗网络的定义

生成式对抗网络是一种深度学习模型,是近年来复杂分布上无监督学习最具前景的方法之一。模型通过框架中(至少)两个模块:生成模型和判别模型的互相博弈学习产生相当好的输出。原始 GAN 理论中,并不要求 G 和 D 都是神经网络,只需要是能拟合相应生成和判别的函数即可。但实用中一般均使用深度神经网络作为G和D 。

2.生成对抗网络的结构

在这里插入图片描述
GANs是以两个独立的对抗网络组成:生成器和判别器。当仅将嘈杂的图像阵列作为输入时,会对生成器进行训练以创建逼真的图像。判别器经过训练可以对图像是否真实进行分类。
生成器G:通过一个参数化概率生成模型(通常用深度神经网络进行参数化)进行概率分布的逆变换采样,得到一个生成的概率分布。
判别器D:给定样本,判断(通常也是深度卷积神经网络)这个样本来自真实数据还是伪造数据。
其中生成器帮助训练判别器,而判别器又帮助训练生成器。它们同时变得更强。

3.GAN生成模型中的自编码器

在这里插入图片描述
自编码器可以帮助我们对数据进行自动编码,它由两部分构成:编码器和解码器。它的输入和输出是一致的,目标是使用稀疏的高阶特征重新组合来重构自己。

4.GAN–如何定义损失

在这里插入图片描述
通过优化目标,使得我们可以调节概率生成模型的参数,从而使得生成的概率分布和真实数据分布尽量接近。 但是这里的分布参数不再与传统概率统计一样,这些参数保存在一个黑盒中:最后所学到的一个数据分布Pg(G),没有显示的表达式。

5.GAN–损失函数

在这里插入图片描述
这个Loss其实就是交叉熵。对于判别器D,它的任务是最小化 -L(G,D)。如果采用零和博弈,生成器G的目标是最小化L(G,D),而实际操作发现零和博弈训练效果并不好,G的目标一般采用最小化。
在这里插入图片描述

6.GAN的训练方法

优化函数的目标函数:
在这里插入图片描述
D(x)表示判别器认为x是真实样本的概率,而1-D(G(z))则是判别器认为合成样本为假的概率。训练GAN的时候,判别器希望目标函数最大化,也就是使判别器判断真实样本为“真”,判断合成样本为“假”的概率最大化;与之相反,生成器希望该目标函数最小化, 也就是降低判别器对数据来源判断正确的概率。
在训练的过程中固定一方,更新另一方的网络权重,交替迭代,在这个过程中,双方都极力优化自己的网络,从而形成竞争对抗,直
到双方达到一个动态的平衡,此时生成模型 G 恢复了训练数据的分布,判别模型再也判别不出来结果,准确率为 50%,约等于乱猜。
在这里插入图片描述
在这里插入图片描述

7.GAN的收敛性

如果G和D的学习能力足够强,两个模型可以收敛。但是GAN模型的收敛性和均衡点存在性需要新的理论突破,模型结构和训练稳定性需要进一步提高。 GAN的收敛是很困难的。
第一,就是梯度消失的问题,当优化的时候,对于公式里生成器、判别器的损失函数会存在梯度消失的问题,那么我们需要设计一些更好的损失函数,使得梯度消失问题得到解决。第二个就是模式发现问题,也就是说我们的生成器可能生成同样的数据而不是多样的数据。

8.DCGAN

把有监督学习的CNN与无监督学习的GAN整合到一起提出了 DCGANs,是生成器和判别器分别学到对输入图像层次化的表示。
在这里插入图片描述
DCGAN的生成器和鉴别器都舍弃了CNN的pooling层,鉴别器保留CNN的整体架构,生成器则是将卷积层替换成了反卷积层;在鉴别器和生成器中使用了BN层,加速模型训练,提升了训练的稳定性。但是在生成器的输出层和鉴别器的输入层不使用BN层;生成器网络中使用ReLU作为激活函数,最后一层使用Tanh(),让模型更快地学习,以饱和和覆盖训练分布的颜色空间;使用Adam优化器,一阶矩估计的指数衰减率的值设置为0.5。

9.WGAN

①为什么要提出WGAN

因为GAN网络训练的重点在于均衡生成器与判别器,判别器越好,生成器梯度消失越严重。
在最优判别器的下,我们可以把原始GAN定义的生成器loss 等价变换为最小化真实分布与生成分布之间的JS散度。 我们越训练判别器,它就越接近最优,最小化生成器的loss也就会越近似于最小化真实分布与生成分布之间的JS散度。
在这里插入图片描述
在这里插入图片描述
PG和Pdata是高维空间的低维流形。判别器最优,最小化生成器的目标函数等价于最小化真实分布Pdata与生成分布Pg与之间的JS散度,而由于真实分布Pdata与生成分布Pg几乎不可能不可忽略的重叠,所以无论它们相距多远,JS散度都是常数。最终导致生成器的梯度(近似)为0,造成梯度消失,造成GAN难以优化。

②Wasserstein距离

即使两个分布没有重叠或可忽略不计,Wasserstein距离仍然能够反映它们的远近。

Ⅱ(Pr, Pg) 是 Pr 和 Pg 组合起来的所有可能的联合分布的集合,对于每一个可能的联合分布γ而言,可以从中采样得到一个真实样本 x 和一个生成样本 y样本的距离 ||x - y||,inf是所有可能的下界。

③WGAN算法实现

在这里插入图片描述

  1. 判别器最后一层去掉sigmoid激活函数:原始GAN中,最优的D是一个概率形式,属于[0,1],因此用sigmoid可以加速D的训练。WGAN中,D是任意满足利普斯次连续的函数,因此不需要用Sigmoid激活。
    在这里插入图片描述
  2. 生成器G 和判别器D 的损失不取对数:根据Wasserstein距离的定义可知,不需要取对数。
  3. 每次更新判别器D 的参数之后,权重绝对值截断到不超过一个固定常数c:使得判别器D 满足利普希茨连续。
    4.不基于动量的优化算法(momentum和Adam)推荐RMSProp或SGD。

10.Image-Translation-GANs

①CycleGAN

在这里插入图片描述
●G_A2B:将真实的图片变成相同状态的图片(假的)或者将生成的假的的图片变成橘子。
●G_B2A:将真实的图片变成相同形状的的图片(假的)或者将生成的图片变成苹果。
●D_A:鉴别真实的苹果或者鉴别生成的苹果。
●D_B: 鉴别真实的橘子或者鉴别生成的橘子。
CycleGAN由两个判别器(DxDx和DyDy)和两个生成器(G和F)组成。
在这里插入图片描述
为什么要连用两个生成器和两个判别器呢?
是为了避免所有X都被映射到同一个Y,采用两个生成器的方式,既能满足X->Y的映射,又能满足Y->X的映射,这一点其实就是变分自编码器VAE的思想,是为了适应不同输入图像产生不同输出图像。
在这里插入图片描述
X(苹果)经过生成器G(G_A2B)来生成带有原来形状的橘子图片,紧接着我在用另一个生成器F(G_B2A)来将我刚刚生成的橘子图片还原成之前苹果的样子,最后两个鉴别器分别来判断生成的橘子和真实的苹果的真假。反过来原理也是一样,我将Y(橘子)放入生成器(G_B2A)中来生成假的带有原来形状的苹果,紧接着我在用另一个生成器(G_A2B)把生成出来的苹果来变成原来形状的橘子,紧接着两个鉴别器分别来判别生成的苹果和真实的橘子的真假。
以下为训练中的各种损失值变化,存储的model文件以及测试结果图:
在这里插入图片描述

②Pixel2Pixel

在这里插入图片描述
图片x作为条件需要输入到G和D中。G的输入是x(需要转换的图片),输出是生成的图片G(x)。D则需要分辨出{x,G(x)}和{x, y}。

把图像等分成patch,批量加载数据判断每个Patch的真假。
生成网络用来根据输入图片得到假图片,两个鉴别器根据输入图片与假图片或真图片的组合,分辨出图片的真假。
以下为测试结果图:

③starGAN

在这里插入图片描述
StarGAN 包含 鉴别器D 和 生成器G 两个部分。鉴别器D 学习去辨别真实图像和生成图像,以及对图像进行所属域的分类(两个输出)。生成器接受图像和目标域标签(两个输入),生成假的图像。
在这里插入图片描述
鉴别器Discriminator:一个多任务鉴别器,由多个输出分支组成。
每个分支Dy学习二元分类,确定图像x是域y的真实图像还是G生
成的伪图像G(x,s)。
在这里插入图片描述
生成器 Generator:将输入图像x转换到输出图像G(x,s),后者体现的是指定domain的风格码s,该码由映射网络F或样式编码器E提供。其中,使用的是自适应实例归一化(AdaIN)将s注入G。s被设计为表示特定域y的样式,这消除了向G提供y的必要性,并使G可以合成所有域的图像。
提出StarGAN解决了图像转换的两个主要挑战:将一个域的图像转换为目标域的多种图像,并支持多个目标域。以下为测试结果图:
在这里插入图片描述

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值