本文为 AI 研习社编译的技术博客,原标题 : What’s In a Face (CVPR in Review V) 作者 | Sergey Nikolenko、Anastasia Gaydashenko 翻译 | 老赵 校对 | 酱番梨 整理 | 菠萝妹 原文链接: https://medium.com/neuromation-io-blog/whats-in-a-face-cvpr-in-review-v-3086f60e1f1c 注:本文的相关链接请点击文末【阅读原文】进行访问
人脸有什么(CVPR 摘要第五部分)
我说她没有面孔; 但那意味着她有一千个面孔...... - C.S. Lewis,直到我们面对面
今天我们向你介绍另一部分,我们将深入了解CVPR 2018(计算机视觉和模式识别)会议的一些论文的细节。 我们已经有四个:关于计算机视觉的GAN,关于人类的姿势估计和跟踪,关于合成数据,以及最后关于域适应。 特别在第四部分中,我们提出了三篇关于同一主题的论文,这些论文实际具有数字可比性。
今天,我们转向一个不同的问题,也需要进行详细的比较。 我们将讨论面部生成,即从头开始或通过改变真实照片的某些特征来合成人脸的真实图像。 实际上,我们刚刚在关于GAN的第一篇文章中已经触及了这个问题。 但从那时起,生成对抗网络(GAN)一直是机器学习中最热门的话题之一,难怪今天有新的进步等待着我们。 再次,我很高兴介绍Anastasia Gaydashenko,我们与他们共同撰写了这篇文章。
我们已经多次谈到模型架构和良好的数据集对深度学习的重要性。 在这篇文章中,一个反复出现的主题将是损失函数的意义和重要性,即神经网络实际代表的函数。 有人可能会说损失函数是架构的一部分,但在实践中我们通常会分开考虑它们; 例如,相同的基本架构可以提供各种各样的损失函数,只需要很小的改动,这就是我们今天将要看到的。
我们之所以选择这些特别的论文,不仅是因为我们最喜欢它们,还因为它们都使用GAN,并且都在使用它们来修改面部图片,同时保留了人的身份。 这是GAN的成熟应用; 像ADD这样的经典论文用它来预测一个人如果随着年龄的变化而变化,或者如果他们拥有不同的性别,他们会是怎样的面部。 我们今天考虑的论文使这一系列研究更进了一步,以一种可能受到操纵的方式将一个人的外表(例如,化妆或情绪)的某些部分分开。
因此在某种程度上,今天的所有论文也解决了同样的问题,并且可能相互比较。 但问题是,对模型结果的真实评估基本上只能由人来完成:你需要判断新图片的真实程度。 在我们的例子中,具体任务和数据集也有所不同,因此我们不会直接比较结果,而是提取和比较新的有趣想法。
一起看论文吧。
第一篇论文的作者,来自中国科学技术大学和微软研究院研究人员的共同工作(完整pdf),旨在从单个面部图像中解开身份和属性。 这个想法是将一个面部的表示分解为“身份”和“属性”,使身份对应人,属性基本上对应于在保留身份的同时可以修改的所有内容。 然后,使用提取的身份标识,我们可以添加从不同面部提取的属性。
像这样:
很有意思吧? 我们来研究他们是如何做到的。 本文中有许多有趣的小技巧,但这项工作的主要贡献是一个新的基于GAN的架构:
在这里,网络将两张图片作为输入:身份图片,和作为除了人的身份之外的所有事物的来源:姿势,情感,照明,甚至背景的属性图片。
该架构的主要组成部分包括:
这是用于训练的模型结构; 当所有成分都经过训练时,为了生成本身,只需使用虚线内的部分就足够了,因此网络 C 和 D 仅包含在训练阶段。
主要问题是如何从属性中分离出身份。 我们怎样才能告诉网络应该在 xˢ 应该采取什么措施以及 xᵃ ? 上面概述的体系结构本身并没有回答这个问题,这里的主要工作是通过仔细选择损失函数来完成的。 它们中有不少; 让我们逐一筛选。 NeuroNugget 格式不允许太多公式,因此我们将尝试捕获损失函数的每个部分的含义:
(声明:我为略微弄乱图片中的符号而道歉但是Medium实际上不支持子/上标,所以我不得不使用现有的Unicode符号。)
这是相当多的东西,不是吗?这就是现代基于GAN的架构通常的工作方式:它们的最终损失函数通常是许多不同术语的总和,每个术语都有自己的动机和意义。 但是由此产生的结构非常好; 我们现在可以用几种不同的方式训练它:
由于有意识和精确地选择了架构,损失函数和训练过程,结果非常棒。以下是论文中的两个选项。 在第一个中,我们看到从训练集中随机选择的面部变换,其中包含属性的随机面部:
而在第二,身份从未出现在训练集中。 这些是网络完全不为人知的人(“零标识身份”,正如论文所称)......它仍然可以正常工作:
来自普林斯顿,伯克利和Adobe的研究人员(完整的pdf)的合作与前一篇论文的工作方式相同,但解决了更为精确的问题:我们可以在照片上添加/修改化妆而不是同时修改所有属性,而保持脸部尽可能可识别。 这里的一个主要问题是,在机器学习中经常发生的数据:如果我们有一个大型数据集对齐有和没有化妆的面部照片,那么相对直接的方法是很有可能的...但当然我们没有。 那么我们如何解决这个问题呢?
网络仍然获得两个图像作为输入:我们从中获取面部的源图像和我们采用化妆风格的参考图像。 然后模型产生相应的输出; 这里有一些示例结果,它们非常令人印象深刻:
这种无监督的学习框架依赖于循环一致的生成对抗网络的新模型; 它由两个非对称函数组成:前向函数对基于示例的风格转换进行编码,而后向函数则删除风格。 下面是它的工作原理:
图为两个耦合网络,旨在实现这些功能:一个传递化妆风格(G),另一个可以消除化妆(F); 我们的想法是使其连续应用程序的输出与输入照片匹配。
让我们再次讨论损失,因为他们定义了方法并捕捉了这项工作中的主要新想法。 我们需要的唯一符号是 X 是“无化妆”域,Y 是化妆图像的域。 现在:
论文不仅仅是损失函数。 例如,另一个问题是如何获取训练集的照片数据集。 作者找到了一个有趣的解决方案:使用来自YouTube的美女博主。 他们从化妆教程视频中收集了一个数据集(在亚马逊机械土耳其人手动验证),从而确保它包含高分辨率的各种化妆风格。
结果再次令人印象深刻:
如果你与艺术模特化妆转移之前的状态对它们进行比较:结果会特别令人印象深刻:
我们有一种感觉,下一个Prisma很可能潜伏在附近的某个地方......
随着今天的最后一篇论文(完整pdf),我们从化妆转向另一种非常特殊的面部特征:情绪。 我们怎样才能解开身份和情感?
在这项工作中,提出的架构包含两个学习过程:第一个是学习通过条件GAN(cGAN)生成标准中性面部,第二个是从生成的生成器的中间层学习。 为了训练 cGAN,我们使用显示一些表情(输入)的面部图像对和相同主题的中性面部图像(输出):
像往常一样学习 cGAN:生成器基于输入图像重建输出,然后将元组(输入,目标,是)和(输入,输出,否)给予鉴别器。 鉴别器试图区分生成的样本和背景实况,而生成器不仅试图混淆鉴别器而且还生成尽可能接近目标图像的图像(复合损失函数再次,但这次相对简单)。
本文将此过程称为去表达(从脸部去除表达),并且其思想是在去表达期间,与实际情绪相关的信息仍被记录为发生器的中间层中的表达组件。 因此,对于第二学习过程,我们固定生成器的参数,并且中间层的输出被组合并用作进行面部表情分类的深度模型的输入。 整体架构如下所示:
在生成中性面部之后,可以通过在像素级别或特征级别比较中性面部和查询表达面部来分析表达信息。然而,由于图像之间的变化(即,旋转,平移或照明),像素级差异是不可靠的。即使表达式没有任何变化,这也会导致较大的像素级差异。特征级差异也是不稳定的,因为表达信息可能根据身份信息而变化。由于查询图像和中性图像之间的差异被记录在中间层中,因此作者直接利用来自中间层的表达成分。
下图说明了去表达残基的一些样本,它们分别是愤怒,厌恶,恐惧,快乐,悲伤和惊讶的表达成分;图片显示了每个表达组件的相应直方图。我们可以看到,表达组件和相应的直方图都是可以区分的:
以下是不同数据集的一些示例结果。 在所有图片中,第一列是输入图像,第三列是同一面部的背景真实中性面部图像,中间是生成模型的输出:
结果,作者都获得了用于去表达的良好网络,即,从脸部移除情绪,并且通过在由去表达网络捕获的丰富特征上训练情绪分类器来改善用于情感识别的现有技术结果。
谢谢你的阅读。 有了这个,我们终于完成了2018年的CVPR。很难对这么大的会议做出正确的判断; 当然,有数百篇非常有趣的论文是我们无法涵盖的。 但是,我们仍然希望它是一个有趣和有用的选择。 我们很快会在下一个NeuroNugget分期介绍中再次见到你。好运。
Sergey Nikolenko Chief Research Officer, Neuromation
Anastasia Gaydashenko former Research Intern at Neuromation, currently Machine Learning Intern at Cisco