GeneGAN 源文:GeneGAN: Learning Object Transfiguration and Attribute Subspace from Unpaired Data
GeneGAN 源代码:https://github.com/Prinsphield/GeneGAN
-----------------------------------------------------------------------------------------------------------------------------------------
1 GeneGAN大体思路
GeneGAN 正是由于生成图像与真实图像的数据分布一致,从而实现生成属性交换后的图像。对于属性交换两类图像xAU 和xB0,公共子属性A和B为相同分布的元素,需要转换的是私有子属性u和0。GeneGAN 的两类生成图像数据分布为PgA0 和PgBu,分别由两个GAN 模块负责,一个负责真实分布PrB0 与生成数据分布PgA0,可以看出,由于公共子属性的数据分布相同,拟生成的数据分布PrA0 与对应的真实分布PgB0 是一致的;同理,另一个GAN 负责的真实分布PrAu与生成分布PgBu也是一致的。因此,GeneGAN能够依靠GAN实现迁移图像的数据生成。
2 源文精析
2.1 Abstract
对象变形:将图像中的对象替换为另一图像中的对象。例如,它可以执行这样的任务,“将A图中的眼镜准确地戴在B图中的人的鼻子上”。使用范例图像可以更精确地指定所需的修改,并改进条件图像生成的多样性。然而,以前的方法依赖于特征空间操作,需要成对的数据和外观模型来训练或从背景中分离对象。在这项工作中,我们提出一个模型,可以从两个未配对的图像作为学习对象进行变形:一组包含“目标”(眼镜,笑容)的图像,另一组没有,轻微的约束为两个学习对象是大约位于同一个地方。例如,训练数据可以是一组有眼镜的人脸图像,另一组是没有眼镜的图像,这两组图像都通过人脸地标进行空间对齐。尽管0/1标签很弱,我们的模型可以学习一个“眼镜”子空间,它包含不同类型眼镜的多个代表。因此,我们可以对生成的图像进行细粒度控制,例如通过交换“眼镜”子空间中的投影组件来交换两个图像中的眼镜,从而创建佩戴眼镜的人的新图像。
总的来说,我们的确定性生成模型通过对抗性训练从弱标记数据中学习解纠缠属性子空间。在CelebA和Multi-PIE数据集上的实验验证了该模型在真实世界数据上的有效性,在生成特定眼镜、微笑、发型和照明条件等图像方面。代码可以在网上找到。
2.2 Introduction
对象变形是一种条件图像生成方法,首先将图像分解为对象部分和背景部分。然后修改对象以满足特定的条件,背景保持不变。对象变形在图像编辑[2,5,18,23,27,28]和图像合成[4,13,24]中都有应用。根据任务的不同,对象可以是像眼镜这样的具体实例,也可以是像面部表情这样的更抽象的概念。生成的图像将回答诸如“如果她的眼镜戴在我鼻子上怎么样?”或者“如果我像她那样微笑呢?”
在深度神经网络提取特征的线性特征空间猜想[1]下,我们可以通过对特征向量的线性操作来实现对象的删除和移植等复杂的对象变形任务。修改后的特征向量生成的图像仍然可以是自然的,并且具有可忽略的人工影响。事实上,之前的工作[19,23]已经表明,在图像中做一个笑脸,就像在特征空间中加入一个向量一样简单:
目标检测提取特征和定位,然后gan来生成特征:比如人骑马的cycle缺陷照片
其中为图像到特征的映射,变换向量vsmiling可计算为笑脸特征聚类中心与非笑脸特征聚类中心的差。
然而,有很多风格和水平的微笑。例如,一些种类的微笑不暴露牙齿,和一些更表现在眼睛而不是嘴。因此由单个变换向量代表微笑将严重限制了微笑在生成图像的多样性。为了解决这种多样性问题,视觉Analogy-Making[20]方法提出使用一对指定参考图像变换向量,例如两个图片是同一个人,一张微笑,另一张不笑。虽然这种方法增加了多样性,这种配对数据很难获得。
另一种对象变形方法是最近提出的循环损失GAN方法,它利用双学习[8,11,26,29]来映射源图像(非笑脸)和目标图像(笑脸)。然而,对偶学习依赖于映射的可逆性来实现循环损耗。当源域和目标域的固有维数不同时,如源域没有对象而目标域有对象,则不能应用循环损失。更多的讨论将留给第2.4节。
在这项工作中,我们提出一个模型,从一个单一的图像可以产生一个对象特征向量(以下简称“对象特征”或“对象向量”)。将对象特征移植到其他图像中,生成具有相似对象的新图像。该模型由两部分组成:一是将图像分解为背景特征部分和目标特征部分的编码器,二是将背景特征和目标特征结合起来产生图像的解码器。该模型的典型使用模式:对象删除和对象移植,这都是通过一些解码器和编码器的连接来完成的。解码器和编码器的所有实例分别共享参数。
此外,解码器中的目标特征构成一个向量空间:不存在的目标被映射到原点,范数与目标的强度成正比(比如微笑的程度),线性组合产生其他可行的目标特征。虽然前人的工作[19,23]也观察到一维属性向量也具有这些性质,但由于对象特征多样性的增加,我们能够提取出更高维的属性子空间。对发型、眼镜等面部属性的实验验证了这些属性子空间的丰富性。我们在一个专有的深度学习框架中进行实验,Tensorflow实现可以在https://github.com/Prinsphield/GeneGAN上找到。
2.3 Method
在这一节中,我们正式概述了我们的方法,并提出了学习背景和对象解纠缠表示的问题。
训练数据由两个集合构成:具有属性的图像集合为{xi Au}N i=1,与之相对的集合为{xiB0}Mi =1,其中u和0分别表示对象的存在/不存在。这两组图像不需要配对。将训练数据分成两组是对所有训练数据进行有效的0/1标记。
2.3.1 Model
我们的模型是由一个编码器映射一个图像到两个补码,和一个解码器是编码器的逆。码的划分是未知的,必须从0/1标记中学习。为了实现目标特征与背景特征的分离,我们希望满足以下约束条件:
1. 没有任何对象的图像应该与集合{xiB0}Mi =1没有区别。
2. 具有对象的图像应该与集合{xi Au}N i=1没有区别。
在这里,xAu表示一个图像,它将被解码为A和u。当从上下文中看清楚时,我们有时会将图像xAu简单地称为Au。这种“无法区分”的约束可以通过引入对抗性判别器来实施[6,7],它将无法区分解释为“不存在可以给两个集合分配不同分数的判别器”。
这激发了我们为我们的模型引入如图所示的训练图,即GeneGAN。在训练过程中,Au、A0、Bu、B0四个子图像分别由Au和B0两个父图像的补码组合而成,具体如下:然后解码器将创建四个合法的子组合:Au、A0、Bu、B0。
在4个子代中,Au和B0的2个重组是完全重组,A0和Bu是新的杂交品种。通过使用一个判别器要求Au和Bu无法区别,我们可以从A和u中重建Au,我们可以执行所有对象的信息编码在u。同样,如果A0和B0无法区别,我们可以确保A不包含任何信息对象。总的来说,我们可以实现目标信息与背景信息的分离。
此外,重构损失可以让u和v包含关于对象的完整信息。纳入重构损失也稳定了判别器的训练[11,26,29]。
2.3.2 属性漂移问题与平行四边形约束
通过实验,我们有时会观察到一个“属性漂移”的问题:虽然Au和Bu之间仍然存在一一对应关系,但是Au和Bu之间的物体外观可能是不同的。图4给出了一个说明性的例子,Au是一个戴着黑色镜片太阳镜的人,B0是一个不戴眼镜的人。只要Bu的眼镜和Au的眼镜仍然是一一对应的,那么Bu就有可能成为第二个戴任何眼镜的人。
这个是训练时匹配的那一组眼镜人是各式各样的眼镜都有,所以测试时才会出现这种情况
在图像域对象是大约一致的情况下,我们建议以下平行四边形约束,而不是应用一个额外的分类器去执行将Au和Bu的目标风格相同化:Au和B0的图片像素值的总和,应该差不多等于A0和Bu的总和。在上面的例子中,一个太阳眼镜在移植时,保持为一个太阳眼镜,而不是突变成另一个眼镜。
注意,考虑循环损失的GAN的平行四边形损失是没有意义的,因为两个原始图像的变换是完全相互独立的。在这种情况下,增加平行四边形损失只会增加模型的过拟合水平。
2.3.3 loss函数
给出xAu和xB0两幅图像,可以将GeneGAN训练的数据流总结为以下方程:
我们将B0编码的“∊”强制为0,以保证A0不包含B0的任何信息,且B0对象部分包含的任何信息都可以安全丢弃的约束。
生成器接收四种类型的损失:(1)标准G损失 A0/Bu,它衡量生成的图像有多逼真;(2)重构损失 Au’/B0’,它衡量的是经过一系列编码和解码后,原始输入的重构效果如何。(3)归零损失,反映了目标特征与背景特征的分离程度;(4)(可选地)平行四边形损失,在图像像素值上强制了子元素与父元素之间的约束。我们忽略了损失的权重,将细节留给在线实现。P0和P≠0分别表示有目标物和无目标物图像的分布。
归零损失将背景信息推送到B部分。事实上,编码器的对象输出将不包含背景信息,因为“∊”被迫为零。
重构损失将有多种用途。首先,与Au和B0相关的重构损耗将确保解码器和编码器是互为倒数的。此外,A被强制包含背景信息,以允许解码器从A和u重构Au。
判别器为标准D损失:
判别器的损失将保证重新组合的性能符合要求。
当我们通过损失来实施约束时,约束只近似地存在,并且在对象和特征部件之间存在潜在的信息泄漏。我们将其作为未来的工作来探索更强有力的约束实施。
优化器是tf.train.RMSPropOptimizer.
2.3.4 替代堆叠GeneGAN
具有循环损失的GAN方法在进行目标去除和重建时存在欠定问题。例如,在图2(a)中,虽然将笑脸和非笑脸定义得很好,但是很难确定从非笑脸映射到笑脸时应该有多少笑容。
细粒度
但是,也可以添加cross-links以允许信息通信。事实上,我们还试验了一个更接近GAN方法的循环损耗训练图,如图2所示。这与图3的区别在于,只有杂交品种是作为父映像的子映像创建的。孩子们将被重新组合产生孙子,理想情况下,孙子和他们的祖父母有相同的特征。重构损失可以用来加强这种不变性,就像在循环损失GAN方法中所做的一样。
然而,我们发现这种“双置换”训练图在实验中表现较差。我们观察到,随着孙子辈经历更多的非线性转换,重建损失将显著增加。我们推测,重建损失越大,与对抗性损失的竞争越激烈,训练的不稳定性越高,生成的图像质量越差。
这段的意思就是虽然这样好,但不能一直这样换下去,稳定性会变差,生成图像质量变差;就像是Faster R-CNN检测只能两步化,再多检测效果也不咋样了。
2.4 experiments
在本节中,我们执行真实数据集的实验来验证我们的方法的有效性。训练中,我们使用5e-5的学习速率和0动量,在RMSProp[22]学习规则。在本节中使用的神经网络模型都配备BN层[10]来加速收敛。编码器有三个conV层附带非线性Leaky ReLU[16]。解码器有三个conV层附带fractional stride[21]。
2.4.1 数据集
CelebA[14]数据集是一个大型的人脸属性数据集,包括10177个身份的202599张人脸图像,每个图像具有40个属性注释和5个地标位置。地标位置可以用来在空间上对齐这些面。
Multi-PIE数据集[17]包含来自337名受试者的754,200多张图像,在15个视点和19种照明条件下拍摄。
2.4.2 属性交换
由于GeneGAN只使用了图像的弱0/1标签,并且没有关于重组版本的训练数据,所以我们在本小节中不会区分训练数据和实验数据。
一个对象可以通过传入“∊”到解码器来移除。类似地,可以通过替换解码器的输入来替换对象。由于我们的模型可以将对象部分与背景部分分开,所以图1(b)中所示的交叉使用模式也可以用来交换属性。
在下面图的每一行中,图像的对象部分被行中第一个图像的对象覆盖。特别有趣的是图5(a)。可以看出,发型与最上面一行的源图像非常接近。事实上,头发的方向与源图像是一致的。
2.4.3 Unseen Images的一般化处理及与GAN的循环损失比较
图7比较了GeneGAN和DiscoGAN。虽然DiscoGAN也可以重建出高质量的图像,但重建图像中的物体与原始图像并不完全相关。相比之下,GeneGAN进行了一致的重建。
图8给出了一个在CelebA数据集上训练的GeneGAN模型在更宽泛的面部数据集上的测试结果,该数据集包含了在更少约束环境下的面部图像。可以看出,GeneGAN模型对不可见数据的推广效果很好。
2.4.4 属性子空间内插
图9给出了属性子空间中目标特征的插值。注意背景(人类身份)是近似相同的,而对象(发型)是内插的。
2.5 Related Work
2.6 Conclusion
这篇论文提出了一种确定性条件生成模型GeneGAN,该模型能在背景不变的情况下对图像中的物体进行变形处理。该模型通过训练数据的弱监督0/1标记,将目标特征从特征空间的其他因素中分离出来。因此,我们的模型可以从一幅图像中提取出目标特征向量,并将其移植到另一幅图像中。
因此,可以对生成的图像进行细粒度控制,比如“将A的眼镜放到B的鼻子上”。这些物体可能很抽象,很难描述,比如发型和照明条件。我们的训练方法是对称的,允许利用循环重建损失,提高了训练的稳定性。
模型的建立还产生了一个属性子空间,该子空间包含多个向量,这些向量代表不同的对象。向量可以缩放、倒排和插值来处理生成图像中的对象。
在未来的工作中,研究更多的亲本之间更复杂的杂交模式是否会进一步提高训练的稳定性、质量和生成图像的多样性,将是一件有趣的事情。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:GAN生成对抗网络合集(八):GeneGAN – 子属性分离重组 – 解决对象变形问题 - Python技术站