基本介绍
从今日开始,要今日应用实践中的生成式模型,将会实践体验用生成式模型进行诸如风格迁移的有趣的应用。今日要实践的模型是CycleGAN,用于图像风格迁移。使用的数据集里面的图片来源于ImageNet,该数据集共有17个数据包,本文只使用了其中的苹果橘子部分。图像被统一缩放为256×256像素大小,其中用于训练的苹果图片996张、橘子图片1020张,用于测试的苹果图片266张、橘子图片248张。本文会先简单介绍CycleGAN模型,然后展示自己的运行结果,不作代码展示,最后进行总结。
CycleGAN模型简介
CycleGAN(Cycle Generative Adversarial Network) 即循环对抗生成网络,来自论文 Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks 。该模型实现了一种在没有配对示例的情况下学习将图像从源域 X 转换到目标域 Y 的方法。
CycleGAN 网络本质上是由两个镜像对称的 GAN 网络组成,其结构如下图所示(图片来源于原论文):
为了方便理解,这里以苹果和橘子为例介绍。上图中 𝑋 可以理解为苹果,𝑌为橘子;𝐺 为将苹果生成橘子风格的生成器,𝐹为将橘子生成的苹果风格的生成器,𝐷𝑋 和 𝐷𝑌为其相应判别器。模型最终能够输出两个模型的权重,分别将两种图像的风格进行彼此迁移,生成新的图像。该模型一个很重要的部分就是损失函数,在所有损失里面循环一致损失(Cycle Consistency Loss)是最重要的。循环损失的计算过程如下图所示(图片来源于原论文):
图中苹果图片 𝑥经过生成器 𝐺得到伪橘子 𝑌̂,然后将伪橘子 𝑌̂ 结果送进生成器𝐹又产生苹果风格的结果 𝑥̂,最后将生成的苹果风格结果𝑥̂与原苹果图片𝑥一起计算出循环一致损失,反之亦然。循环损失捕捉了这样的直觉,即如果我们从一个域转换到另一个域,然后再转换回来,我们应该到达我们开始的地方
- 生成器结构
- 判别器:判别器其实是一个二分类网络模型,输出判定该图像为真实图的概率
CycleGAN代码实践
官方给的代码实践是经典的深度学习流程。即数据集预处理,模型搭建,模型训练,模型评估,模型推理,详细的可直接参考官方的代码实践,这里给出我自己的运行结果和部分代码
- 数据集部分可视化结果
- 模型训练结果
由于时间原因,我只训练了一轮,这可能会导致风格迁移效果一般,如果有时间最好多训练几轮
- 模型推理结果
结果中第一行为原图,第二行为对应生成的结果图。感觉就是换了个颜色,如果多训练,可能效果更好些
总结
Cycle模型也是GAN模型的一种,主要用于图像风格迁移。之前有所耳闻,接触使用过,挺有意思的,今天由于训练轮次比较少,效果比较差,只有颜色发生变化,多训练一点,会看到不一样的东西,下次有时间训练长一点看看。