CycleGan实现图像转换

CycleGan实现图像转换

作者:王镇

引言

1873年的一个春日,在阿让特伊的塞纳河畔,莫奈用纤细的笔触和明亮的调色板记录下了眼前塞纳河畔美丽的田园风光。我们不免想象如果当时有相机的话,会留下一张怎样的照片呢。在一个凉爽的夏日傍晚,面对卡西斯港口的美丽景色,我们拿起相机时是否又会想象莫奈会如何来记录眼前的此番景象呢。
尽管我们没有看到莫奈画作的场景照片,在有了一组莫奈风格画作和真实风景照片后,利用 CycleGan,我们能够将其中一组转换为另一组。换言之,我们能够从一幅莫奈画作中尽可能真实地还原莫奈眼中的 19 世纪法国风光,也能从一张真实的照片看到莫奈画笔下的世界。
除了实现画与照片的转换,CycleGan 还可以实现斑马与马,猫与狗,苹果与橘子,夏天与冬天,男人与女人,卫星地图与行政地图等图片之间的转换。
       
图 1

CycleGan原理

初识Gan

Gan(Generative Adversarial Network) 又称作“生成对抗网络”,用于生成与训练集风格类似的图片,其主要由两部分结构组成,即生成器(Generator)和判别器(Discrimator)。

图 2
以生成小狗的假图片为例。如上图所示,输入一个随机噪声,送入生成器模型将产生一张小狗的假图片,然后将假图与真图配对,打上标签(假图为0,真图为1),用于训练判别器,经初步训练,判别器已有了一定的精度。此后,保持判别器参数不变,不断调整生成器参数直至判别器无法区分生成器生成的假图与真图;然后,保持生成器参数不变,调整判别器参数直至判别器能最大程度地区分生成器生成的假图与真图。如此重复上述两个步骤,最终生成器将能产生人眼无法分辨的图片。

公式(1)
上式中 G( ) 表示生成器,输出一张生成图片,D( ) 表示判别器,输出判别为真图的概率,x 为真图,z 为噪声。即我们训练 D 使其有最大的判别精度(使上式中第一项和第二项都最大),又训练 G 使其能生成最容易骗过判别器的图片(使上式第二项最小)。

初识CycleGan

Gan 能生成与训练集风格类似的图片,但无法指定具体的图片。以上文生成小狗图片为例,生成器可能一直输出同一张最像小狗的图片,而无法针对输入图片输出对应的小狗图片。CycleGan 有效解决了这个问题。
图 3
上图是 CycleGan 的原理图解。图(a)中 X,Y 对应两个领域,我们希望将 X 领域中的图片转换为 Y 领域中的图片;G,F 分别对应正向和逆向 Gan 中的两个生成器,即 G 将 X 领域中的图片 x 转换为 Y 领域中的图片 G(x),然后用判别器 DY 判别是否属于 Y 领域的图片,以此构成生成对抗网络,此即为 Gan 的基本结构。图(b)相较图(a)增加了部分结构,即要求 G(x) 再经过逆向 Gan 中的生成器 F 生成 F(G(x)),使之与原输入 x 尽可能接近,即 cycle-consistency loss 尽量小,由此即可解决 Gan 无法针对性地输出对应图片的问题。图(b)过程 x->G(x)->F(G(x))≈x,我们将之称为 forward cycle consistency。为了提高训练效果,类似地,我们又训练从 Y 领域到 X 领域的转换,如图(c)过程 y->F(y)->G(F(y))≈y, 我们称之为 backward cycle consistency。

深入CycleGan


公式 (2)

公式 (3)

公式 (4)

公式 (5)
通过上文对 CycleGan 的定性介绍,相信大家对 CycleGan 的工作原理已有了大致的理解,以下将通过公式定量地分析 CycleGan 的工作原理。公式(2)与公式(1)一样,是Gan的基本表述,需要训练的是生成器 G 和判别器D,X,Y 分别是两个领域;公式(3)指出通过训练 G,F 模型使 F(G(x))≈x,使 G(F(y))≈y;公式(4)是 CycleGan的完整表述,λ 作为参数调整分项的重要性;我们最终的目的是通过训练得到最合适的 G,F 如公式(5)所示,用来完成图片从一个领域到另一个领域的转换。以下是训练好后的 G,F 的变换效果。

图 4

CycleGan应用

      CycleGan 实现图片从一个领域转换到另一个领域,与 pix2pix 模型相比,它无需成对数据进行训练,因此它具有更广泛的适用范围。
CycleGan 可实现图像风格转换,但它不同于 neural style transfer 模型仅实现单幅作品风格(如星空)的转换,相反,它能学习到莫奈(或其他画家)全部作品的艺术风格,从而实现照片向莫奈艺术风格画的转换,如图5。它还可实现物体转换(Object transfiguration),如图6,7;季节转换,如图8;从油画生成照片,如图9。

图 5

图 6

图 7

图 8

图 9

总结

对于 Unpaired 问题来说,只是用普通 GAN 的话可以学到的模型有很多种。种类数目为领域 X 和领域 Y 之间的随机映射数目,所以只是用普通 GAN 损失函数无法保证输入 x 能够得到对应领域的 y。而 Cycle 一致性的出现,降低了随机映射的数目,从而保证得到的输出不再是随机的,因此能够实现图片从一个领域到另一个领域的转换。
项目源码地址:https://momodel.cn/explore/5d76cd483ca4fc49fa06f9e1?type=app

参考文献

  1. Generative Adversarial Networks,Ian J. Goodfellow, etc. https://arxiv.org/abs/1406.2661
  2. Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks, Jun-yan Zhu, etc. https://arxiv.org/abs/1703.10593
  3. https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix
  4. GAN网络详解(从零入门)csdn博客。 https://blog.csdn.net/LEE18254290736/article/details/97371930
  5. CycleGAN-Unpaired图像翻译 csdn博客。https://blog.csdn.net/stdcoutzyx/article/details/78823249

关于我们

Mo(网址:https://momodel.cn)是一个支持 Python 的人工智能在线建模平台,能帮助你快速开发、训练并部署模型。


Mo 人工智能俱乐部 是由人工智能在线建模平台(网址:https://momodel.cn)的研发与产品团队发起、致力于降低人工智能开发与使用门槛的俱乐部。团队具备大数据处理分析、可视化与数据建模经验,已承担多领域智能项目,具备从底层到前端的全线设计开发能力。主要研究方向为大数据管理分析与人工智能技术,并以此来促进数据驱动的科学研究。


目前团队每两周(周六)在杭州举办线下沙龙,进行机器学习相关论文分享与学术交流。希望能汇聚来自各行各业对人工智能感兴趣的朋友,不断交流共同成长,推动人工智能民主化、应用普及化。

你可能感兴趣的:(机器学习,人工智能,python)