基于Keras的生成对抗网络(6)——利用Keras搭建CycleGAN实现风格迁移

时间:2024-09-29 14:36:11

目录

    • 0、前言
    • 一、CycleGAN介绍及其结构
    • 二、函数代码
      • 2.0 前提准备
      • 2.1 生成器Generator
      • 2.2 判别器Discriminator
      • 2.3 train函数
    • 三、结果演示
    • 四、完整代码

0、前言

CycleGAN的英文全称是Cycle GAN,即循环生成对抗网络,论文链接:/abs/1703.10593

一、CycleGAN介绍及其结构

CycleGAN 是一种无需成对示例便可自动进行图像到图像转换的技术。这些模型是采用一批无需关联的来自源域和目标域的图像,以一种无监督的方式训练的。
CycleGAN提出了一种在没有成对图像的情况下,学习将图像从源域x转换为目标域y的方法。它使用两个镜像对称的GAN,构成了一个环形网络,两个GAN共享两个生成器,并各自带一个判别器,即共有两个判别器和两个生成器,一个单向GAN两个loss,两个即共四个loss,叫做CycleGAN。给定两个图像集合,这个算法可以进行两个图像集合之间的翻译,如从斑马到马之间的互换、从冬天到夏天之间的互换。

二、函数代码

2.0 前提准备

由于CycleGAN要用到InstanceNormalization,而这个库在keras中是不存在的,因此需要自行安装。
安装方法:
(1)下载keras-contrib
下载地址:/keras-team/keras-contrib
(2)利用cmd进入下载后的文件夹,并输入命令python install进行安装。
在这里插入图片描述
(3)把keras_contrib和keras_contrib.egg-info复制到anaconda环境中,放到Lib文件夹下的site-packages中。
在这里插入图片描述
ok!完成~

2.1 生成器Generator

生成器的目标是:输入一张图像,转换成自己期望的风格的那张图片。
比如:输入苹果图像,将其转换为橙子。
在这里插入图片描述
因此对于CycleGAN而言,它的输入是一张图像,输出也是一张图像。

生成器AB的作用是将物种A转换成物种B,生成器BA的作用是将物种B转换成物种A;

2.2 判别器Discriminator

判别器A的作用是判断输出图像是否为A,判别器B的作用是判断输出图像是否为B;

2.3 train函数

CycleGAN的主要功能如下:
(1) 将物种A图像输入生成器,生成器AB将物种A转换成物种B,判别器B判别B是否为真,根据这个判别结果,对生成器AB和判别器B进行训练,目的是利用生成器AB生成的假图像欺骗判别器B;
(2) 将物种B图像输入生成器,生成器BA将物种B转换成物种A,判别器A判别A是否为真,根据这个判别结果,对生成器BA和判别器A进行训练,目的是利用生成器BA生成的假图像欺骗判别器A;
(3) 将物种A图像输入生成器,生成器AB将物种A转换成物种B,生成器BA再将生成的B还原成物种A,将生成的图像与原图像进行对比,进而训练生成器AB和BA;
(4) 将物种B图像输入生成器,生成器BA将物种B转换成物种A,生成器AB再将生成的A还原成物种B,将生成的图像与原图像进行对比,进而训练生成器AB和BA;
(5) 将物种B图像输入生成器AB,理论上生成器AB不会发生任何改变,将生成图像与原图像进行对比,进而训练生成器AB;
(6) 将物种A图像输入生成器BA,理论上生成器BA不会发生任何改变,将生成图像与原图像进行对比,进而训练生成器BA;

由于CycleGAN的训练数据不是一一配对的,因此还需要给每个像素点用循环的方式贴上标签。

三、结果演示

暂无

四、完整代码

由于代码量较大,需要代码请参考:/download/didi_ya/18148193

参考:
1./p/45394148
2./p/27539515