《Augmented CycleGAN: Learning Many-to-Many Mappings from Unpaired Data》读后感

介绍

经典的CycleGAN的主要缺陷是只能在领域之间学习一对一的mapping,也就是每一种输入都只会有单种的输出图像。而本文作者相信域之间的大部分关系都是十分复杂的,倾向于多对多的mapping。因此作者想学习一个mapping去捕获输出的多样性,实现多对多的mapping(也就是对于一个输入图像,能产生不同风格的多个输出图像)。
本模型的做法是把source domain的样例和潜在变量作为输入,然后输出一个target domain的样例和一个潜在变量,如下图:


模型对比,在加入了潜在变量后,在增广空间中是一对一的,但是对于原领域来说,却是多对多的。

CycleGAN模型

CycleGAN满足以下约束:
1)Marginal matching,每一个mapping的输出都必须匹配target domain的经验分布。
2)循环一致性(Cycle-consistency),把一个元素从领域A mapping到领域B,再从领域B mapping到领域A,所生成的样例应该跟原始元素接近。
约束1)由以下对抗loss达到:


训练G的时候就最小化,训练D的时候就最大化。p_d(b)和p_d(a)为真实的样本分布。

约束2)由以下loss达到:


最小化该误差

完整的loss:
完整的loss

CycleGAN的成功原因

约束1保证了生成目标领域中真实的图像,约束2保证了两个领域之间紧密的关系。同时,如果对于不同的输入都生成同一副图像的话,是不可能重构回原来的输入图像的,因此也避免了模式崩塌。

CycleGAN的限制

CycleGAN只能学习决定性的mapping是它最基本的弱点。当面对复杂的跨域关系时,这会导致CycleGAN学习任意的一对一映射,而不是更忠实地捕获真实的、结构化的条件分布。同时,在大幅度不一样的域间时,决定性的mapping对优化循环一致性也是一个障碍。如一个域是label,一个域是真实图像,实际上这样的关系往往是一对多。

CycleGAN的扩展

把CycleGAN扩展为多对多mapping的一个直接方法是在A和B域中构建一个随机mapping,也就是每一个mapping都把一个辅助噪声向量和source domain中的样本共同作为输入,对应的loss如下:


GANloss,p(z)为标准正态先验分布。

循环一致性loss

完整的loss与等式3类似,把这种模型称为Stochastic CycleGAN。

Stochastic CycleGAN的缺点

循环一致性会鼓励这种mapping忽略z。就像在等式5中,强迫G_BA这种mapping变成多对一,因为在条件为a的情况下所生成的任何b,都必须在所有的z下map回a。在另一条链上,G_AB也是如此。因此为了使G_BA和G_AB为多对一,并且相互可逆的唯一办法就是崩塌到一对一。
因此在本文将会讨论一些方法去在域间学习复杂的随机mapping。

Augmented CycleGAN(本文方法)

本文提出了要在(a,z_b)∈A×Z_b和(b,z_a)∈B×Z_a之间构建mapping。Z_a和Z_b是一个潜在空间,它能够捕获把一个元素从A转换到B过程中丢失的信息,反之亦然。例如,在根据一个男人面孔(a∈A)生成女人面孔(b∈B)时,z_b能够捕获女性面孔的变化信息(如头发长度或者风格,这是独立于男人面孔a的)。类似的,z_a也能在生成男性面孔图像时获得男性面孔的变化信息(同样是独立于给定的女性面孔)。
该过程能被形容为在两个增广空间(augmented spaces)A×Z_b和B×Z_a中构建mapping,如下图:


Augmented CycleGAN

通过这样的学习,我们能够做到:1)通过不同的z_b∈Z_b,能够把a map到B中不同的items中,实现随机mapping。2)能推断出包含a信息的潜在编码z_a,这种信息在所生成的b中是没有捕获的。有了z_a我们就能够很好地重构a了。

Augmented CycleGAN的详细实现

本模型包括四个部分:
1)首先是两个mapping,分别是G_AB:A×Z_b——》B和G_BA:B×Z_a——》A,这个和Stochastic CycleGAN是类似的,也是source domain的图像加上Z转换成target domain的图像。
2)然后是两个encoder,分别是E_A:A×B——》Z_a和E_B:A×B——》Z_b。
以上部件都是使用神经网络实现,以下是具体mapping定义,其中p(z_a)和p(z_b)是标准正态先验:
在给定pair(a,z_b)~p_d(a)p(z_b)下(这两个概率是独立的),我们能够生成:


z_a能够捕获从A转换到B时丢失的信息,也就是包含了所生成的b图像中没有捕获的关于a的信息。

也就是说,我们首先生成领域B的样例b~,然后使用它和a去生成潜在编码z_a~。这里需要注意的是,通过抽样出不同的z_b~p(z_b),在给定的相同条件a下,我们能够生成多个b~。在给定pair(a,b~)下,我们能恢复出关于a的但是在b~中没有被捕获到的信息,也就是z_a~。类似地,给定pair(b,z_a)~p_d(b)p(z_a),有另外一个方向:

另一方向的mapping

构建Marginal Matching Loss

首先在B×Z_a空间上定义Marginal Matching。本文使用两个独立的判别器(D_B和D_Z_a)去分别判别生成的pair和从两个独立的先验(p_d(b)和p(z_a))中抽样的真实样例。在B上的Marginal Matching Loss跟公式4一致,在Z_a上的Marginal Matching Loss由以下给出:


在Z_a上的Marginal Matching Loss

和CycleGAN一样,在B上的marginal matching是确保生成的样例是真实的。而在Z_a上的marginal matching扮演着规范化的作用,鼓励潜在编码的分布是跟先验p(z_a)接近。同理,另一个方向在A×Z_b空间上的Marginal Matching Loss也能随之而定义。

构建Cycle Consistency Loss

我们给开始于两个增广空间的循环一致性约束进行定义。如,在开始于A×Z_b的循环一致性约束中,我们要确保在给定pair(a,z_b)~p_d(a)p(z_b)下,在map到(b~,z_a~)后,还是有能力去对pair(a,z_b)进行重建,如下图:


循环一致性约束的流程图

因此,开始于A×Z_b的循环一致性约束由以下两个loss实现:


对a~p_d(a)进行重构

对z_b~p(z_b)进行重构

和CycleGAN一样,公式9使得所生成的属于B中的样例依赖于A中的样例(也就是依赖生成器的输入)。这里归功于编码器E_A,使得本模型有能力去重构出a,因为通过z_a~,我们能够恢复出在生成b~时丢失的信息。另一方面,公式10使得生成的b~依赖于给定的潜在编码z_b,实际上,这也提升了在a的条件下z_b和b的互信息。

最后,在A×Z_b到B×Z_a的方向,训练Augmented CycleGAN的总体优化目标为:


A×Z_b到B×Z_a方向的优化目标

B×Z_a到A×Z_b方向的优化目标类似,最后同时对两个方向的优化目标进行优化。

Augmented CycleGAN半监督学习

如果我们拥有成对匹配的数据,我们也就能够利用它对Augmented CycleGAN进行半监督训练,如下图:


半监督训练流程图

因此,在给定成对的pair(a,b)~p_d(a,b)下,我们能为G_BA定义一个有监督的损失函数:


有监督的损失函数

该损失函数能够确保z_a~(由E_A(a,b)生成)能够通过G_BA,在给定的b条件下生成出a。同时,我们也在encoder中应用了形式为公式8的对抗规范化损失。最后,类似的监督和规范化损失能够定义在G_AB和E_B中。

如何更好地构建随机的mapping

本文发现,为了允许潜在编码能够捕获生成样例的多样性,应该要把潜在编码注入到生成网络中离输入最近的层。这允许使用更多的剩余层来处理注入的编码,从而捕获输出的高级变化,而不是小的像素级变化。
本文还发现为了在生成器中加条件,相比于拼接,Conditional Normalization技术(不清楚,需要去研读一下论文,目测是把编码z输入到两个线性函数,生成标准化层中的scale和shift参数,然后把这个标准化层应用在输入图像上)更加有效。

实验结果

一对多实验

定量分析

定性分析

作者在这里发现,其实当输入轮廓为真实图像的时候,StochCGAN的表现也十分好。但是实际上这可能是因为“steganography” 效应。当把输入轮廓变成生成图像时,效果如下:


可以明显感觉到StochCGAN退化为一对一了

face转换实验

再次地,StochCGAN退化为一对一

属性转换face实验

~~~~~~~~

你可能感兴趣的:(《Augmented CycleGAN: Learning Many-to-Many Mappings from Unpaired Data》读后感)