cycle GAN

来源:互联网 发布:如何启动蜂窝移动数据 编辑:程序博客网 时间:2024/06/06 02:13

tensorflow 代码:https://github.com/XHUJOY/CycleGAN-tensorflow

原理:

传统的gan需要图像对x-y,本文提出了循环gan,模型包含两个生成网络,分别为G:X->Y,F:Y->X,两个生成网络分别对应两个判别网络,.引入cycle consistency losses”,,.

模型结构如下图:

损失函数:

(1)对于生成网络G:X->Y,以及判别网络,目标函数为:

这里,生成网络G尽量生成图像Y,使得Y与真实图像Y中的图像尽量相似.

同理可以构建生成网络F:Y->X,以及判别网络的目标函数.

(2)Cycle Consistency Loss

从理论上来说,对抗网络G,F可以生成输出与目标Y,X相同的分布,但严格地说,这需要生成网络G,F为随机函数.然而当有足够大的容量是,一个网络可以生成同样的输入图像到任何随机排列的图像,这使得任何生成模型可以产生一个输入分布以匹配目标图像分布.因此,仅仅用抗网络损失函数更新约束网络参数不能保证学习到的函数可以对输入x生成理想的目标y.为了进一步减小可能的生成函数的空间,我们加上学习到的生成网络是cycle-consistent,如上图所示,对于Y集合中的每个图像y,生成函数G,F应该满足backward cycle consistency:,因此我们可以得到cycle consistency loss:

(3)Full Objective

总的目标函数为:

用于控制两个目标函数的重要性,我们的目标是求使得目标函数值最小的生成网络G,F.

训练

由于采用损失函数least square loss训练时更加稳定,且可以产生更高质量的效果,将的损失函数,即log likelihood 目标函数用least square loss代替.

其实,为了减小模型振荡,我们采用文献41的策略,更新判别网络 用之前生成的图像,而不是当前生成的图像.我们保存之前50次生成的图像.

对于所有的实验,,使用Adam,batch size为1,前100 epoch的学习率为0.0002,之后100个epoch每个epoch decay至0.