本文介绍CycleGAN原理以及在tensorflow中实现。
一、CycleGAN 的原理
cGAN 和对应的 pix2pix 模型,都能够解决一类“图像翻译 ”问题 。 但是 pix2pix 模型要求训练样本必须是“严格成对”的,这种样本往往比较难以获得,CycleGAN 不必使用成对样本也可以进行“图像翻译”。CycleGAN与 pix2pix的不同点在于,它可以利用不成对数据训练出从 X 空间到 Y 空间的映射 。 例如,只要搜集了大量照片以及大量油画图片,可以学习到如何把照片转换成油画。
CycleGAN 的原理:算法的目标是学习从空间 X 到空间 Y 的映射,设这个映射为 F。 它对应着 GAN 中的生成器, F 可以将 X 中的图片 x 转化为 Y 中的图片 F(x)。对于生成的图片,还需要 GAN 中的判别器来判别器是否为真实图片,由此构成对抗生成网络 。但由于没有成对数据,这个网络是无法训练的。对此,作者又提出了所谓的“循环一致性损失”( cycle consistency loss )。让再假设一个映射 G,它可以将 Y 空间中的图片 y 转换为 X 中的图片 G(y)。 CycleGAN,同时学习 F 和 G 两个映射,并要求 F(G(y)) = y,以及 G(F(x)) = x。也就是说,将 x 的图片转换到 Y 空间后,应该还可以转换回来。
循环一致性损失定义:
总损失定义:
CycleGAN 的主要想法是上述的“循环一致性损失”,利用这个损失 3 可以巧妙地处理 X 空间和 Y 空间训练样本不一一配对的问题。
二、在 TensorFlow 中用训练 CycleGAN 模型
1、下载数据集并进行训练
(1)下载数据集
apple2orange数据集包含了苹果和橘子的图像,运行命令下载数据集:bash download_dataset.sh apple2orange,运行报错:wget: command not found,显然是因为没有安装wget导致的,wget用英语定义就是the non-interactive network downloader,翻译过来就是非交互的网络下载器。这里使用homebrew安装wget,Homebrew为macOS提供缺失的软件包管理器,使用Homebrew可以安装Apple没有预装但你需要的东西,Homebrew会将软件包安装到独立目录,并将其文件软链接至 /usr/local。Homebrew 不会将文件安装到它本身目录之外,所以可将 Homebrew 安装到任意位置。先安装homebrew,命令为:/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)",安装成功后,利用homwbrew安装wget,命令为:brew install wget,安装成功。download_dataset.sh文件内容如下:
URL=https://people.eecs.berkeley.edu/~taesung_park/CycleGAN/datasets/$FILE.zip
ZIP_FILE=./data/$FILE.zip
TARGET_DIR=./data/$FILE/
wget -N $URL -O $ZIP_FILE
mkdir -p $TARGET_DIR
unzip $ZIP_FILE -d ./data/
rm $ZIP_FILE
运行报错:时间戳与 -O 结合使用没有任何效果,去掉wget的 -N参数即可。-N参数表示只获取比本地新的文件,-O参数表示将文档写入$ZIP_FILE中。至此,运行下载数据集命令不报错,数据集下载