GANILLA - 幻想增强
当人工智能和杰出的插画师联手点燃我们的想象力时
撰写者 利奥-达根-莱布 Liron Soffer和 Dafna Mordechai.
在儿童故事中,世界充满了奇迹,疯狂的事情每天都在发生,发现自己坐在人行道上靠近精灵或仙女的情况并不少见。这种魔力在儿童书籍中是活生生的,在故事中可以找到美妙的插图。
但是,如果机器可以为我们创造这种魔力呢?GANILLA 是一个神经网络,正是这样做的,在这篇博文中,我们将向你展示如何做到这一点。
什么是GANILLA?
GANILLA是一种GAN**(生成对抗网络**),它解决了图像到图像的翻译问题,在儿童书籍插图领域。在实践中,当你向训练有素的GANILLA模型提供一张照片时,它将根据特定插画家的风格,输出输入图像的插图。
在下图中,你可以看到左边是一张输入图片,右边是十张不同的输出图片--这是输入图片提供给十个训练好的模型的结果,每个模型都是用不同的插画家的数据训练的。

GANILLA在行动:一张输入图像,和十个不同的输出结果,模仿不同的插画艺术家(图片来源:GANILLA的论文:arXiv:2002.05638v2)
尽管在GANILLA之前已经存在其他伟大的图像到图像的翻译模型,但这项工作有两个主要的创新点。虽然目前最先进的图像对图像的翻译模型成功地转移了风格或内容,但它们有时不能同时转移两者。在下面的图片中,你可以看到一个例子,GANILLA同时保留了原始输入照片的内容和所需插画师的风格。

GANILLA的输出与CycleGAN和DualGan比较的两个例子(图片来源:GANILLA的论文:arXiv:2002.05638v2)
除了模型本身,该论文还引入了一种新的定量方法来评估图像到图解的模型。他们没有主观地评价图像,而是通过定义考虑内容和风格的指标,使用单独的分类器来制定评价过程。
未配对的图像到图像翻译的数据集
在处理图像到图像的翻译问题时,我们的数据可以是两种类型之一:成对的图像或无对的图像。成对的数据集是一个集合,其中每个输入图像都有一个预定的输出图像。这是一种标记的数据形式。pix2pix数据集就是一个配对数据的例子。

pix2pix数据集中图像对的例子
非配对数据集由来自两个不同领域的两组图像组成,它们之间没有标签,也没有预定的关联性。两个领域之间的映射是一个无监督的学习问题。输入域是自然照片,预期输出域是儿童书籍的插图。

一个未配对的数据集:景观照片(第一行)和图解(第二行)。 宫崎骏(第二行)
架构概述
GANILLA的生成器
该模型的核心是生成器。训练后,它将被用于推理,即生成器将接收一张风景照片作为输入,并返回一个插图图像作为输出。
生成器有两个部分;下采样(编码)阶段是基于ResNet的,负责从原始图像中提取特征(输入图像内容)。上采样(解码)阶段是一个特征金字塔网络(FPN),负责从之前提取的信息中创建输出插图(输出图像样式)。
另一个在GANILLA中实现的概念是跳过连接。它在下图中用蓝线表示,顾名思义,它连接了模型的各个部分,但不是以直接的方式,而是跳过一些层,在模型中不连续的层之间传递信息。

GANILLA的生成器架构(图片来源:GANILLA的论文:arXiv:2002.05638v2)
GANILLA的判别器
与GAN模型一样,训练过程需要一个鉴别器 来评估发生器的输出质量。从技术上讲,鉴别器是一个分类器,用于评估生成的图像是 "真 "还是 "假"。
随着生成器和鉴别器一起被训练,两者的作用都变得更好、更准确,生成器生成更高质量的图像,而鉴别器在区分真假图像方面也越来越好。
GANILLA的判别器实现了**PatchGAN,**这是pix2pix论文中介绍的一种方法。PatchGAN判别器,或称马尔科夫判别器,并不将整个图像分为真假,而是将图像分为NxN个片段,并对每个片段进行单独分类。鉴别器在整个图像上卷积运行,对所有反应进行平均,以提供一个结果。PatchGAN判别器的参数较少,运行速度比对整个图像进行分类要快,同时强制执行更多的约束条件,以鼓励生成的图像中出现鲜明的高频细节。
下面的图片比较了不同N值的结果。70x70的Patch被发现产生了最清晰的结果,减少了吸引人眼球的尾部伪影,但代价是在空间和光谱维度(细节和色彩)上都不太准确。

PatchGAN对不同N值的结果(图片来源:pix2pix论文:arXiv:1611.07004v3)
无监督的双重学习
GANILLA使用DualGAN论文中介绍的方法,从两个领域的两组未标记的图像中进行训练。受自然语言翻译的双重学习的启发,这种方法在训练过程中使用两对生成器和判别器。
第一对也是主要的一对,G,是用于推理的发生器。第二个生成器F,学习相反方向的映射:从目的域(Y,插图)到源域(X,风景照片)。训练的损失函数与CycleGAN 论文中的函数相似。
损失函数与周期一致性和同一性属性
GANILLA的损失函数是几个值的总和。其中两个是两个生成器的minmax损失(BCE)。
将二级发生器F:Y→X训练成一级发生器G:X→Y的反函数,它将由两个损失函数完成。
- 循环一致性损失。 F(G(x)) ~ x和G(F(Y)) ~ Y通过L1距离执行。
- 身份损失: G(Y)=Y和F(X)=X也通过L1距离强制执行。

F(G(X))~X的循环一致性属性的说明,G(F(Y))~Y也是一样的。

身份属性的说明。G(Y) = Y和F(X) = X
轮到我们了!
在阅读了GANILLA的论文并了解其架构后,我们从头开始实施,并得到了我们的结果。我们使用与GANILLA相同的风景图片作为我们的源域。在目标域中,我们选择了 "我 "的作品。 宫崎骏,这是我们从网上搜刮来的。我们的代码可以在这里找到,这里是我们的一些结果。

我们实现GANILLA模型的例子。上面的图片是原始照片,下面的是模型输出的插图。
想开始使用GANILLA吗?
这里有一些有用的网址。
GANILLA - Fantasy Enhanced最初发表于Towards Data Scienceon Medium,在那里人们通过强调和回应这个故事继续进行对话。