《DeepFace: Face Generation using Deep Learning》

来源:互联网 发布:哈利波特知乎 编辑:程序博客网 时间:2024/04/30 05:30

VGG-Net框架下的人脸生成

笔者主要从以下几个方面对这篇文章进行叙述:

  • 概述
  • 作者的思路
  • 主要工作
  • 思考

概述

文章主要的工作是在VGG-Net框架基础上实现了人脸属性分类,并使用定制高斯混合模型(cGMM)由输入人脸图像生成包含特定属性的人脸。

作者的思路

在正式讨论文章的实现之前,有必要先对作者的思路进行阐述。
(1)VGG框架
作者对为何采用VGG框架在文章中作了解释,首先使用一定数量的图像(针对某个属性对图像进行标注)在VGG网络中进行测试,取FC-7层的响应作为特征(姑且这么说吧),借助t-SNE算法将高维特征映射到2维空间中,观察标注信息与空间分布信息。下图示意了young属性的分布情况:
Young
从图中看出被标注的图片具有明显的聚类效果,这也是为什么作者认为VGG能够work的原因。
同时作者也表示特征对于不同的属性描述性也有差异,比如下图的光照属性,聚类效果就不如人意。这是因为VGG学习的属性特征是以该属性对于区分人脸是否重要而定的,属性越重要,特征学习效果越好。
Soft-lighting
(2)cGMM
作者也做了实验并解释了为何使用高斯混合模型描述目标响应。
同样使用包含某一属性i的数据集Si在VGG网络中进行测试,取FC-6层响应并绘制统计分布图,下图展示了black和male两种属性的分布:
2D representation of fc-6 feature space
可以看出非常接近正态分布,因此作者对于采用高斯混合模型非常有信心,并且高斯混合模型不需要很复杂的结构以及没有繁多的参数

主要工作

符号说明:F-73种属性的集合、D-训练集
作者的主要工作可以分成两个步骤:
(1)Fine-tuning
首先采用已经预训练好的16层VGG框架,并在FC-7层后增加了42个输出节点,每个节点为包括一个全连接层FC-8和一个softmax层,每一个softmax层是一组属性的多标签分类器,这些属性高度相关(例如头发的颜色有绿色、灰色、棕色等)。前文所述作者将属性分为73类,将这些属性根据相关性分成42组而不是采用73个二元分类器的方式是为了提供给网络一些属性相关性的隐性信息。下面是修改后的网络结构:
网络结构
当然作者在fine-tuning过程中采用freeze一些层的方法,并对此做了一些相关的实验,这里不过多描述。
(2)Generation
作者首先使用了名为Class Visualization的方法作为Baseline,假设我们希望得到一张包含属性集C的人脸,C是F的子集,通过如下的迭代:
1、将训练集的平均脸加上高斯噪声生成的图片X作为网络的输入并forword;
2、根据所期望的属性各自将softmax层的梯度置为1或者0,是为1,否为0;
3、执行梯度的backward;
4、采用随机梯度下降和正则化更新X
进行该过程的主要意义在于证明了该卷积神经网络确实可以正确地表示出一些较为明显的特征,如眼睛、鼻子、嘴巴等,但依然不够,并且很显然该方法没有对人脸上的结构在数量上进行限制。

因此作者在Baseline基础上做了一些改进,输入变成了纯随机噪声,并且使用Feature Inversion代替Class Visualization,姑且将其翻译成特征反演,主要目的是找到某个结果I*使得可以最小化输入响应与目标响应的差异
这里写图片描述

给定目标响应Tl,特征反演主要过程如下:
1、将训练集的平均脸加上高斯噪声生成的图片X作为网络的输入并forword至L层;
2、在L层中根据目标函数和该层的响应得到该层的梯度;
3、执行梯度的backward;
4、采用随机梯度下降和正则化更新X

该方法的challenge在于如何得到属性集C的目标响应Tl(或者说是近似响应),在这里作者因此采用了cGMM,如前文所述,假设每一种属性是呈独立的高斯分布,那么属性集合C的响应是否可以表示为多元的高斯混合?而每一种的属性的高斯分布可分别对训练集划分子集进行训练得到,于是我们得到C属性集的近似目标响应为:
这里写图片描述
s可代替目标响应Tl,那么问题来了,这里引入了新的变量wi,即各高斯模型的权重。为了得到权重向量,作者又引入了一个新的优化问题,主要目的在于最小化输入响应和采样方式产生的目标响应:
这里写图片描述

样例:
这里写图片描述

思考

作者列出了生成的图片与原图的相似度结果,相似度高的52%,低的22%,应该说效果乏善可陈,主要在于:每种属性的生成效果不尽相同,并且生成的人脸均趋向于平均脸。
图像生成对于训练集增强和预处理具有非常重要的意义,可能训练集缺少包含某种属性的样本但又想针对该属性do something,比如戴眼镜之类的,这时候就希望通过某种手段生成一些数据,实际效果还是希望作者展示出更多的成果。

0 0
原创粉丝点击