CycleGAN详解

原文地址:https://arxiv.org/abs/1703.10593

图像生成领域用的比较多的是VAE和GAN。VAE可以作为一种数据降维的方法,可以尝试做特征解耦,然后做风格图像合成等任务。GAN网络简单高效,通过判别器和生成器的互相“拆台”,共同完成模型训练。(注:所谓“互相拆台”也就是造假图像经过判别器之后得到的logist向什么方向优化,生成器的参数优化时要让他和1更加接近,因此计算它和1的损失;判别器的参数优化时,需要它和0更加接近,因此计算它和0的损失)判别器参数和生成器参数分开优化。

个人认为图像风格迁移领域CycleGAN的思想是必须掌握的,CycleGAN2017年提出,后面的很多风格迁移网络都绕不开CycleGAN的影子,我在这篇博客里面对这篇文章的思想进行了总结,后面对代码进行简单的解释,力求通俗易懂。

1、风格迁移

何谓“风格迁移”?直白点就是我有一张图像,我想让它变成莫奈风格的、变成梵高风格的...,比如前段时间很火的清朝老照片上色。图像风格转换方法有很多,但最重要的是是我们在风格转换的过程中如何保证图像内容不发生变化。为了解决这个问题,我们今天的主角CycleGAN。

2、CycleGAN

CycleGAN最经典的地方是设计和提出了循环一致性损失。以黑白图片上色为例,循环一致性就是:黑白图(真实)—>网络—>彩色图—>网络—>黑白图(造假)。为了保证上色后的彩色图片中具有原始黑白图片的所有内容信息,文章中将生成的彩色图像还原回去,生成造假的黑白图,通过损失函数来约束真实白图和造假黑白图一致,达到图像上色的目的。除此之外,CycleGAN不像Pix2Pix一样,需要使用配对数据进行训练,CycleGAN直接使用两个域图像进行训练,而不用建立每个样本和对方域之间的配对关系,这就厉害了,一下子让风格迁移任务变得简单很多。

看一下CycleGAN的网络结构图:

CycleGAN详解_第1张图片

其实这个也没啥好解释的,和我上面说的黑白图上色的过程是一样的,只不过这里用的是X和Y来代表图像域。

网络结构里面再补充一句:CycleGAN网络里面包含两个生成器,分别是generator (x->y)和generator (y->x),判别器也有两个,分别是:discriminator (x)和discriminator (y)。

3、损失函数的设计

说白了上面那些图像转换来转换去,网络结构设计得再精巧,损失函数瞎了啥也白搭。在CycleGAN中,损失函数一共有两类,分别是对抗损失和循环损失。对抗损失分为生成器和判别器损失,循环损失分X->Y和Y->X的损失。

对抗损失和传统GAN的差不多:生成器损失计算造假图像经过判别器判断为1的损失;判别器计算造假图像经过判别器判断为0的损失+真实图像经过判别器判断为1的损失。

循环损失:分别计算x_real->y->x_fake 和 y_real->x->y_fake中(x_real, x_fake)的L1损失和(y_real, y_fake)的L1损失。

4、实验结果

实验结果看起来还是很不错的。

5、代码讲解

你可能感兴趣的:(GAN,深度学习)