作者 | Jason Brownlee
译者 | Freesia,Rachel
编辑 | 夕颜
出品 | AI科技大本营(ID: rgznai100)
【导读】图像到图像的转换技术一般需要大量的成对数据,然而要收集这些数据异常耗时耗力。因此本文主要介绍了无需成对示例便能实现图像转换的 CycleGAN 图像转换技术。文章分为五部分,分别概述了:图像转换的问题;CycleGAN 的非成对图像转换原理;CycleGAN 的架构模型;CycleGAN 的应用以及注意事项。
图像到图像的转换涉及到生成给定图像的新的合成版本,并进行特定的修改,例如将夏季景观转换为冬季。
训练图像到图像的转换模型通常需要一个大的成对数据集。这些数据集准备起来既困难又昂贵,而且在某些情况下是不可行的,比如已故许久的艺术家的画作照片。
CycleGAN 是一种无需成对示例便可自动进行图像到图像转换的技术。这些模型是采用一批无需关联的来自源域和目标域的图像,以一种无监督的方式训练的。
这一简单的技术非常强大,在一系列应用领域中取得了令人印象深刻的视觉效果,最著名的便是将马的照片转换成斑马(或相反)。
在这篇文章中,你将了解非成对的 CycleGAN 图像到图像的转换技术。
读完这篇文章,你将了解到:
图像到图像翻译涉及到对图像的受控修改,需要大量成对图像的数据集,这些数据集很复杂,准备起来很麻烦,有时甚至不存在。
CycleGAN 是一种通过 GAN 架构训练的无监督图像翻译模型的技术,采用来自 GAN 两个不同领域的非成对的图像集合。
CycleGAN 已经有了一系列应用,包括季节转换、物体变形、风格转换和将照片转化为画作。
在我关于 GANs 的新书中,我将通过 29 步的教程和完整的源代码教你如何开发 DCGAN,有条件 GANs,Pix2Pix,CycleGANs 等更多深度学习模型。
我们这就开始吧。
CycleGAN简介(图片为 Trish Hartmann 拍摄,保留部分版权)
概览:
这一教程分为五部分,分别为
图像到图像转换的问题
CycleGAN 的非成对图像转换
何为 CycleGAN 架构模型
CycleGAN 的应用
CycleGAN 的操作建议
图像到图像转换的问题
图像到图像的转换是一个图像合成任务,它要求生成一个对给定图像受控修改后的新图像。
图像到图像的转换是一种视觉图形问题,其目的是使用对齐图像对的训练集,学习输入图像和输出图像之间的映射。
— Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks, 2017. (https://arxiv.org/abs/1703.10593)
图像到图像转换的示例包括:
将夏季景观转换为冬季景观(或相反)。
把画作转换成照片(或相反)。
把马转换成斑马(或相反)。
传统意义上,训练图像到图像的转换模型需要一个由成对示例组成的数据集。这个大型数据集要包含一张输入图片 X (如夏季景观),以及带有预期修改的可作为输出预期图像 Y 的照片(如冬季景观)。
训练时数据集必须要成对这一要求是其局限性所在。这些数据集具有挑战性,准备成本也很高,例如不同条件下不同场景的照片。
在许多情况下,数据集根本不存在,比如名画和它们对应的照片。
然而,获取成对的训练数据是困难和昂贵的。[…]为图形任务(如艺术风格化)获取输入-输出对可能更加困难,因为所需的输出非常复杂,通常需要艺术创作。对于许多任务,例如物体变形(例如,斑马<->马),所需的输出甚至没有很好的定义。
— Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks, 2017. (https://arxiv.org/abs/1703.10593)
因此,我们需要一种不需要成对示例的图像到图像翻译系统训练技术。具体来说,这种技术可以使用任意两个不相关图像的集合,并从每个集合中提取一般特征,并用于图像转换过程。
例如,首先应用大量夏季景观照片集合和大量场景和位置都不相关的冬季景观照片集合,要求能够将特定的照片从一组转换到另一组。
这就是所谓的非成对的图像到图像的转换问题。
CycleGAN 非成对图像转换
CycleGAN 是一种成功的非成对图像到图像的转换方法。
CycleGAN 是一种利用生成对抗网络,或者说 GAN 模型架构训练图像到图像转换模型的方法。
我们提出了一种方法,可以学习[捕获]一个图像集的特性,并找出如何在没有任何成对训练示例的情况下,将这些特征转换为另一个图像集。
— Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks, 2017.(https://arxiv.org/abs/1703.10593)
GAN 架构是一种训练图像合成模型的方法,它由两个模型组成:发生器模型和判别器模型。生成器将来自潜在空间的一个点作为输入,并从域中生成新的可信图像,判别器将图像作为输入,并预测它是真的(来自数据集)还是假的(生成的)。在游戏中训练这两个模型,这样生成器可以不断更新以更好地 “欺骗” 判别器,判别器也会不断更新以更好地检测生成的图像。
CycleGAN 是 GAN 架构的一个分支,它可以同时进行两个生成器模型和两个判别器模型训练。
一个生成器从第一个域获取图像作为第二个域的输入和输出图像,另一个生成器从第二个域获取图像作为输入图像并从第一个域生成图像。然后使用判别器模型确定生成的图像的合理性,并相应地更新生成器模型。
仅此扩展就足以在每个域中生成可信的图像,但不足以生成输入图像的转换图像。
单独的对抗性损耗不能保证习得的函数可以将单个输入 xi 映射到期望的输出 yi 。
— Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks, 2017.(https://arxiv.org/abs/1703.10593)
CycleGAN 对架构的扩展之处在于使用了循环一致性。第一个生成器输出的图像可以用作第二个生成器的输入图像,第二个生成器的输出图像应与原始图像匹配。相反地,第二个生成器的输出图像可以作为第一个生成器的输入图像,结果应该与第二个生成器的输入图像相匹配。
循环一致性是机器翻译的一个概念,指从英语翻译成法语的短语同样可以从法语翻译回英语,语意不变。反之亦然。
我们遵循翻译应该具有“循环一致性”的性质,即如果我们把一句话从英语翻译成法语,然后再把它从法语翻译成英语,就应该得到原来的句子。
— Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks, 2017.(https://arxiv.org/abs/1703.10593)
CycleGAN 通过增加额外的损耗来测量第二个生成器生成的输出图像与原始图像之间的差异,来强化循环一致性,反之亦然。这是对生成模型的规范化,这引导着新领域中的图像生成过程走向图像转换过程。
何为 CycleGAN 架构模型?
初识 CycleGAN,其架构似乎很复杂。
让我们花点时间来逐步了解所有涉及的模型及其输入和输出。
来考虑一下我们在完成从夏天到冬天及从冬天到夏天的图像转换中需要关注的问题。
我们有两组不成对的图像,这意味着它们是在不同时间不同地点的照片;冬季和夏季的图像中没有完全相同的场景。
集合1:夏季景观图像。
集合2:冬季景观图像。
我们将开发一个包含两个 GANs 的架构,每个 GANs 都有一个判别器和一个生成器模型,这意味着架构中总共有四个模型。
第一个 GAN 可以根据夏天的图像生成冬天的图像,第二个 GAN 会根据冬天的图像生成夏天的图像。
GAN 1: 把夏季图像(集合1)转换成冬季图像(集合2)。
GAN 2: 将冬季图像(集合2)转换成夏季图像(集合1)。
每个 GAN 都有一个有条件的生成器模型,该模型将合成给定的输入图像。每个 GAN 都有一个判别器模型来预测生成的图像来自目标图像集合的可能性。GAN 的判别器和生成器模型就像标准 GAN 模型一样,在正常的对抗损耗下训练。
我们可以将 GAN 1 的生成器和判别器模型总结如下:
生成器模型 1:
输入:选取夏季图像 ( 集合1 ).
输出: 生成冬季图像 ( 集合2 ).
判别器模型 1:
输入: 从集合 2 选取冬季图像,从生成器 1 输出。
输出: 图像来自集合 2 的可能性。
同样,我们可以将 GAN2 的生成器和判别器模型总结如下:
生成器模型 2:
输入:选取冬季图像 ( 集合2 ).
输出:生成夏季图像 ( 集合1 ).
判别器模型 2:
输入: 从集合 1 选取夏季图像,从生成器 2 输出。
输出: 图像来自集合 1 的可能性。
到目前为止,这些模型足以在目标域中生成可信的图像,但不能转换输入图像。
每个 GAN 也根据循环一致性损耗进行更新。这是为了强化目标域中由输入图像转换而来的合成图像。
循环一致性损耗将输入照片与 Cycle GAN 的生成照片进行比较,并计算两者之间的差异,例如使用 L1 范数或像素值的绝对差之和。
有两种方法计算循环一致性损耗,并用于更新每个训练迭代的生成器模型。
第一个 GAN (GAN 1) 将获取夏季景观的图像,生成冬季景观的图像,该图像作为第二个 GAN (GAN 2) 的输入,又将生成夏季景观的图像。循环一致性损耗计算了 GAN 1 的图像输入和 GAN 2 的图像输出之间的差异,并相应地更新了生成模型,以减少图像中的差异。
这是一个循环一致性损耗的正向循环。同样的过程在生成器 2 到生成器 1 的反向循环一致性损耗时会逆转过来,还会将冬季原始照片与冬季生成照片进行比较。
正向循环一致性损耗:
向 GAN 1 中输入夏季图像(集合 1 )
从 GAN 1 中输出冬季图像
从 GAN 1 向 GAN 2 输入冬季图像
从 GAN 2 中输出夏季图像
将夏季图像(集合 1 )与 GAN 2 中的夏季图像作对比
反向循环一致性损耗:
向 GAN 2 中输入冬季图像(集合 2 )
从 GAN 2 中输出夏季图像
从 GAN 2 向 GAN 1 输入夏季图像
从 GAN 1中输出冬季图像
将冬季图像(集合 2 )与 GAN 1 中的冬季图像作对比
CycleGAN 的应用
CycleGAN 有许多有趣的应用。本部分中介绍了五类具体的应用,以展示 CycleGAN 这一技术的应用能力。
风格转换
风格转换指学习一个领域的艺术风格并将该艺术风格应用到其他领域,一般是将绘画的艺术风格迁移到照片上。
下图展示了使用 CycleGAN 学习莫奈、梵高、塞尚、浮世绘的绘画风格,并将其迁移到风景照上的结果。
风格转换示例,使用 CycleGAN 将名画的艺术风格迁移到风景照上。
物体变形
物体变形指将物体从一个类别转换到另一个类别,例如将狗转换为猫。在下面的示例中, CycleGAN 实现了斑马和马的照片间的相互转换。由于马和斑马除了在皮肤颜色上有所差异外,其大小和身体结构都很相似,因此这种转换是有意义的。
物体变形示例,使用 CycleGAN 实现马和斑马之间的相互转换。
在下面的示例中,CycleGAN 将图片中的苹果和橘子进行了相互的转换。与上一个示例的相同之处在于,苹果和橘子的大小和结构相似,因此这一转换同样合理。
物体变形示例,使用 CycleGAN 实现苹果和橘子之间的相互转换。
季节转换
季节转换指将在某一季节拍摄的照片转换为另一个季节的照片,例如将夏季的照片转换为冬季。在下面的示例中, CycleGAN 实现了冬天和夏天拍摄的风景照之间的相互转换。
季节转换示例,使用 CycleGAN 对冬夏风景照进行相互转换。
使用绘画生成照片
使用绘画生成照片指使用给定的绘画合成像照片一样逼真的图片,一般使用著名画家的画作或著名的风景画进行生成。在下面的示例中, CycleGAN 将莫奈的一些名画合成为了类似照片的图片。
绘画翻译示例,使用 CycleGAN 将莫奈的绘画转换为近似照片的图片。
图像增强
图像增强指通过某种方式对原图片质量进行提升。下面的示例通过增加景深对近距离拍摄的花卉照片进行了增强。
照片增强示例,使用 CycleGAN 增加绘画照片的景深以增强图片。
使用 CycleGAN 的注意事项
CycleGAN 的论文给出了一些使用 CycleGAN 时需要注意的内容。
在 CycleGAN 中,生成器的使用基于 Justin Johnson 在2016年发表的关于风格迁移的论文,论文名称为:
“Perceptual Losses for Real-Time Style Transfer and Super-Resolution”(https://arxiv.org/abs/1603.08155)。
CycleGAN 的生成器使用深度卷积 GAN 进行构建,该结构使用了多个残差块。鉴别器使用PatchGAN 进行构建, PatchGAN 的具体内容可参考 Phillip Isola 等人在2016年发表的论文:
“Image-to-Image Translation with Conditional Adversarial Networks”(https://arxiv.org/abs/1611.07004)。
鉴别器的作用为判断当前 n*n 的 patch 为真或假。我们在整个图片上卷积地使用这个鉴别器,并求所有结果的平均值作为 D 的最终输出。
在鉴别器中使用 PatchGAN 的目的是对输入图片中大小为 70*70 的 patch 进行判断,查看是否属于当前领域或是一个生成的图片。模型对每一个 patch 的计算结果求均值,并作为最终输出。
CycleGAN 中的对抗损失的构建基于一个最小二乘损失函数,该函数的具体内容可参考 Xudong Mao 等人在2016年发表的论文“Least Squares Generative Adversarial Networks”。
本文提出了最小二乘生成对抗网络(LSGANs),该网络的鉴别器使用了使用最小二乘损失函数。其原理为,最小二乘函数对距离正确一侧较远的样本施加惩罚,以使假样本向决策边界移动。
——“Least Squares Generative Adversarial Networks”,2016
另外, CycleGAN 增加了一个大小为50的生成图片缓冲器而不是直接将生成图片输出,该缓冲器用于对鉴别器模型进行更新,具体可参考 Ashish Shrivastava 在2016年发表的论文:
“Learning from Simulated and Unsupervised Images through Adversarial Training”(https://arxiv.org/abs/1612.07828)。
本文介绍了一个提升对抗训练稳定性的方法,该方法通过使用经过加工的图片训练鉴别器,而不再使用原始图片。
——“Learning from Simulated and Unsupervised Images through Adversarial Training”,2016
CycleGAN 的训练使用了 Adam 随机梯度下降,首先使用较小的学习速率进行100个 epoch 的学习,之后再进行100个 epoch 的学习并使学习率逐渐衰减,在每一个图片处理完成后对模型进行更新。
CycleGAN 的更多细节可参考论文附录中关于每个数据集的说明,该说明对模型的架构进行了详细解释。
拓展阅读
本部分提供了一些相关文章,可作为参考。
论文
Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks, 2017.(https://arxiv.org/abs/1703.10593)
Perceptual Losses for Real-Time Style Transfer and Super-Resolution, 2016.(https://arxiv.org/abs/1603.08155)
Image-to-Image Translation with Conditional Adversarial Networks, 2016.(https://arxiv.org/abs/1611.07004)
Least squares generative adversarial networks, 2016.(https://arxiv.org/abs/1611.04076)
Learning from Simulated and Unsupervised Images through Adversarial Training, 2016.(https://arxiv.org/abs/1612.07828)
文章
Understanding and Implementing CycleGAN in TensorFlow
(https://hardikbansal.github.io/CycleGANBlog/)
CycleGAN Project (official), GitHub
(https://github.com/junyanz/CycleGAN/)
CycleGAN Project Page (official)
(https://junyanz.github.io/CycleGAN/)
原文链接:
https://machinelearningmastery.com/what-is-cyclegan/?fbclid=IwAR0DBMSN4nTQTdH8F4F3jSEEw9yxNpKKUZUEVBmcN2x8HBOT0Cdd9JlyGPs
(*本文为 AI科技大本营原创文章,转载请联系微信 1092722531)
◆
福利时刻
◆
入群参与每周抽奖~
扫码添加小助手,回复:大会,加入福利群,参与抽奖送礼!
AI ProCon 2019 邀请到了亚马逊首席科学家@李沐,在大会的前一天(9.5)亲授「深度学习实训营」,通过动手实操,帮助开发者全面了解深度学习的基础知识和开发技巧。还有 9大技术论坛、60+主题分享,百余家企业、千余名开发者共同相约 2019 AI ProCon!距离5折优惠票结束还有4天!
你点的每个“在看”,我都认真当成了喜欢