使用卷积神经网络快速换脸



文章目录

* 摘要 <https://blog.csdn.net/qq_31531635/article/details/83107711#_5>
* 1 引言和相关工作 <https://blog.csdn.net/qq_31531635/article/details/83107711#1__9>
* 2 方法 <https://blog.csdn.net/qq_31531635/article/details/83107711#2__25>
* 2.1 转换网络 <https://blog.csdn.net/qq_31531635/article/details/83107711#21__33>
* 2.2 损失函数 <https://blog.csdn.net/qq_31531635/article/details/83107711#22__41>
* 3 实验 <https://blog.csdn.net/qq_31531635/article/details/83107711#3__62>
* 3.1 CageNet和SwiftNet
<https://blog.csdn.net/qq_31531635/article/details/83107711#31_CageNetSwiftNet_64>
* 4 讨论和未来工作 <https://blog.csdn.net/qq_31531635/article/details/83107711#4__86>
* 5 结论 <https://blog.csdn.net/qq_31531635/article/details/83107711#5__94>
论文名称:Fast Face-swap Using Convolutional Neural Networks


<>摘要


我们考虑在图像中的换脸问题,在保留姿势、面部表情以及光照的情况下将输入身份换成目标身份。为了执行这种映射,我们使用训练过的卷积神经网络来从非结构化的目标身份的图像中捕捉到他的外观信息。这种方法通过将换脸问题转化为风格迁移来实现,目标是以另一个人的脸来渲染图片。这一领域的最新进展,我们设计了一种新的损失函数来使网络生成高度逼真的结果。通过利用简单的预训练和后处理步骤结合神经网络,我们旨在在没有用户输入的情况下实时进行人脸交换。

<>1 引言和相关工作


人脸替换或者换脸在大多场景下都是相关的,包含提供隐私,整容,视频合成和其他创造性的应用。这个问题的确切公式根据不同的应用而变化,相较于其他的应用,有些应用的目标实现更容易。
“Face swapping: Automatically replacing faces in
photographs.2008”中利用基于外观和姿势的相似性的大型图像数据集中选择一张人脸来自动替换输入的脸。这个方法替换了脸上的眼睛、鼻子和嘴巴,更进一步的为了融合两张脸,适应了颜色和亮度的变化。这个设计有两个主要的限制:不能控制输出人的身份以及输入人的脸的表情被改变。
更困难的问题被“Video face
replacement.2011”提出,他们的工作集中于在视频中替换人脸,在两个对象扮演相似角色的视频片段中可用。与静态图像相比,连续的数据带来了时间对齐、面部跟踪和确保结果片段中的时间一致性等额外困难。最终的系统是复杂的且仍然要求大量的时间和用户引导。
解决相关问题的一个重要途径就是在另一张脸上控制一个脸的表情,在“What makes Tom Hanks look like Tom
Hanks.2015”中被提出。核心思想就是对来自大量图片的输入和目标脸进行三维建模,也就是说,其只有在有几百张图像可用的情况下可用,但是不能应用在单张图像。

上面提到的方法都是机遇发砸的多平台系统结合人脸重建、跟踪、对齐和图像合成等算法。这些系统实现了令人信服的结果,有时候和真实图片也难以辨别,然而,他们全部都没有设计我们下面介绍的部分。
问题提纲:我们考虑到一个案例即给定任何一个A的单张输入图片,我们想要替换他的脸成其他B,同时保持输入姿势,面部表情,视线方向,发型和相同光照。如图1所示。

我们提出了一个最新的解决方案,其受到了最新的风格迁移的启发“Imagestyletransfer using convolutional neural
networks.2016”和“Combining markov random fields and convolutional neural
networks for image
synthesis。2016”,其目标在于以另一个图像的样式来呈现一个图像的语义内容。“Imagestyletransfer using
convolutional neural
networks.2016”定义了内容的概念和在为目标识别训练的卷积神经网络的特征空间中的风格的样式。风格化使用一个相对慢且消耗内存的优化过程来执行。它逐渐改变了一张图像的像素值直到它的内容和风格统计值与给定的内容图像以及风格图像分别相匹配。
“Texture networks: Feed-forward synthesis of textures and stylized
images.2016”和“Perceptual losses for real-time style transfer and
super-resolution.2016”提出了非常昂贵的替代方案,他们训练反馈神经网络来转换图像到它的风格版本,因此,在训练阶段,移动耗费了大量的计算,在测试时,风格化只需要一个单一的前向过程,从而能够实时完成,这个提升对于每个风格都要训练一个单独的网络。

神经风格迁移方法在许多艺术品风格的迁移上取得了显著的效果,但其不适合照片逼真感的迁移。原因是使用Gram矩阵来表达风格没有捕捉到图像空间布局的足够信息。这引入了不自然的失真,在艺术照中没有注意到,但是在对于真实图像则不行。“Combining
markov random fields and convolutional neural networks for image
synthesis.2016”通过利用一个patch-based loss替换correlation-based style
loss来减轻这个问题,从而保持更好的局部结构。他们第一个提出使用风格迁移对脸部照片生成逼真可控可修改的结果是有可能的。然而,他们的方向就像“Imagestyletransfer
using convolutional neural
networks.2016”一样,还没有完全被挖掘。这个方法依赖于昂贵的优化。之后的patch-based loss对于反馈神经网络只探究纹理合成与风格迁移。
本文在“Combining markov random fields and convolutional neural networks for
image synthesis.”

上更进一步,我们提出了一个反馈神经网络,其在生成的换脸图上得到了高度逼真的效果。关键要素是我们不像先前风格迁移的方法,我们使用一个多图像风格loss,因而近似对一个风格有多种多样的描述,而不是使用单个参考点。而且,我们还扩大损失函数到匹配图像之间的光照情况,尤其是,训练的网络允许接近实时的进行换脸。对于我们方法的主要要求就是由一系列目标和替代品的图像。对于名人,在网上很容易获得他们的图像。

由于我们的方法在换脸上是独一无二的,和其他基本的视觉理论方法或者使用图像编辑软件看起来不同,虽然很难与专门从事此项工作的艺术家们相比,但是我们的结果表明,通过快速和自动的方法可以实现人类级别的性能。

<>2 方法

有一张A的图像,我们能够将其换成B的脸,同时保持姿势和表明以及光照情况。就风格迁移而言,我们考虑到输入A的姿势和表情作为内容content
,输入图像B的身份作为风格style。光照作为一个单独的方法在下面会讲到。
我们使用一个权重W参数化的卷积神经网络来转换内容图像x,如输入图像A,输出图像则为xˉ=fW(x)\bar{x}=f_{W}(x)xˉ=fW​(x)
,不像先前的工作,我们假定我们被给定不止一张风格图像,而是大量的风格图像,定义为Y=y1,...,yNY={y_{1},...,y_{N}}Y=y1​,...,
yN​,这些图像描述了我们想要匹配的人的身份,并且只在训练的时候使用。

我们的系统有另外两个组成成分执行人脸对齐和背景/头发/皮肤分割。我们假定所有的图像(content和style)都与一个正面视图参考图对齐。这由使用一个仿射变换来实现,其对其给定图像和68个面部参考关键点。面部关键点由
dlib提取,分割被用来对恢复输入图像x的背景和头发,目前不由我们的转换网络保留。我们使用opencv中的泊松克隆
来缝合背景和结果换脸图像。虽然存在又快且相对准确的分割方法,包含一些基于神经网络的方法,我们认为给定一个分割掩膜会更加简单,并且只需要注重于剩下的问题。整个系统给定在图2中。

下面,我们将介绍转换网络的结构和训练时使用的损失函数。

<>2.1 转换网络

我们转换网络的结构是基于“Texture networks: Feed-forward synthesis of textures and stylized
images.”,如图3所示。


这是一个有不同下采样版本的输入图像x的带分支操作的多尺度结构。每个分支都有一个0填充卷积层伴随ReLU的块,分支通过由两个因子组合的最近邻上采样组合并且在通道维数上进行串联。最后一个分支是网络的结尾,有一个1x1卷积带3个颜色通道。

网络设计为128x128的输入,有1M参数。对于更大的输入,256x256或者512x512,直接加到其他分支上是很直接的,网络的输入只由最高的分辨率的分支决定。

我们发现首先在128x128的输入上训练非常方便,然后使用其作为起始来训练更大的图像。这样,我们能够不需要重新训练整个模型来实现更高分辨率。尽管,我们对模型训练高质量的图像数据的可用性受到限制。

<>2.2 损失函数

对于每一个输入x,我们旨在生成一个xˉ\bar{x}xˉ
,其联合了最小化content和style的损失。这些损失在19层的VGG网络的特征空间中定义。我们定义VGG在第l层的x的表达为Φl(x)
\Phi_{l}(x)Φl​(x)。我们假定x和每个风格图像y都与参考脸对齐了,所有图像都有3xHxW的维度。
content loss:对于VGG网络的第l层,content loss定义为Lcontent(xˉ,x,l)=1∣Φl∣∣Φl(xˉ)−Φl(x)∣∣22
.(1)
L_{content}(\bar{x},x,l)=\frac{1}{|\Phi_{l}}||\Phi_{l}(\bar{x})-\Phi_{l}(x)||^{2}_{2}.
(1)Lcontent​(xˉ,x,l)=∣Φl​1​∣∣Φl​(xˉ)−Φl​(x)∣∣22​.(1),其中∣Φl(x)∣=ClHlWl
|\Phi_{l}(x)|=C_{l}H_{l}W_{l}∣Φl​(x)∣=Cl​Hl​Wl​。
通常来说,content loss能够在网络的所有层上被计算,以至于整个content loss为Lcontent(xˉ,x)=∑lLcontent(xˉ,
x,l).(2)L_{content}(\bar{x},x)=\sum_{l}L_{content}(\bar{x},x,l). (2)Lcontent​(xˉ
,x)=∑l​Lcontent​(xˉ,x,l).(2)。
style loss:我们的损失函数受到了基于patch-based损失的启发,遵循他们的概念,令Ψ(ϕl(xˉ))
\Psi(\phi_{l}(\bar{x}))Ψ(ϕl​(xˉ))表示所有生成的patches的列表,其通过在Φl(xˉ)\Phi_{l}(\bar{x})Φl
​(xˉ)在HlWlH_{l}W_{l}Hl​Wl​上循环可能的位置,然后对每个点提取一个kxk的方形邻域。这个过程拥有M=(Hl−k+1)(Wl−k+1)
M=(H_{l}-k+1)(W_{l}-k+1)M=(Hl​−k+1)(Wl​−k+1)个神经patches,其中第i个patch为Ψi(ϕl(xˉ))
\Psi_{i}(\phi_{l}(\bar{x}))Ψi​(ϕl​(xˉ)),其维度为Cl×k×kC_{l}\times{k}\times{k}Cl​×k×k

对于每一个来自xˉ\bar{x}xˉ的patch,我们发现匹配最好的patch是从Y中提取的,并且是它们之间的最短距离的那个,对于误差度量,我们使用余弦距离
dcd_{c}dc​,即dc(u,v)=1−uTv∣∣u∣∣⋅∣∣v∣∣.(3)
d_{c}(u,v)=1-\frac{u^{T}v}{||u||\cdot{||v||}}. (3)dc​(u,v)=1−∣∣u∣∣⋅∣∣v∣∣uTv​.(3)
。Lstyle(xˉ,Y,l)=1M∑i=1Mdc(Ψi(ϕl(xˉ)),Ψi(ϕl(yNN(i)))).(4)
L_{style}(\bar{x},Y,l)=\frac{1}{M}\sum_{i=1}^{M}d_{c}(\Psi_{i}(\phi_{l}(\bar{x})),\Psi_{i}(\phi_{l}(y_{NN(i)}))).
(4)Lstyle​(xˉ,Y,l)=M1​∑i=1M​dc​(Ψi​(ϕl​(xˉ)),Ψi​(ϕl​(yNN(i)​))).(4)

其中NN(i)为每个patch选择一个对应的风格图像。不像patch-based,他们只使用一张风格图像y和所有可能的patches中的一个patch,我们只搜索相同位置i的patches,但是在不同的风格图像中搜索:
NN(i)=argminj=1,...,Nbestdc(Ψi(ϕl(xˉ)),Ψi(ϕl(yj))).(5)NN(i)=arg
min_{j=1,...,N_{best}}d_{c}(\Psi_{i}(\phi_{l}(\bar{x})),\Psi_{i}(\phi_{l}(y_{j}))).
(5)NN(i)=argminj=1,...,Nbest​​dc​(Ψi​(ϕl​(xˉ)),Ψi​(ϕl​(yj​))).(5)。
我们发现只有选择最佳匹配Nbest<NN_{best}< NNbest​<N
的风格图像来作为考虑效果更好,这里被假定为通过欧式距离来在面部的标记点和输入图像x的标记点来进行分类。这样,每个训练图像都有一系列有相似姿势和表情的风格图像。
与等式2相同,我们能够在VGG的多个层上计算风格损失。
light loss:不幸的是,内容图像x的光照条件在生成图像xˉ\bar{x}xˉ
种没有被保留,当只使用上面提到的在VGG特征空间中定义的损失的话。我们针对这个问题对我们的目标通过引入一个额外的项来惩罚光照的改变。为了定义光照惩罚项,我们运用使用和风格特征以及内容特征在预先训练的VGG中提取特征相同的方式来使用特征空间,这样如果特征空间能够代表光照条件的不同,那么就可以运用成功。VGG网络对于这项任务不是非常合适,其被训练用来对目标进行分类,然而光照信息与其不是特别的相关。

为了得到光照灵敏度的可取属性,我们构建一个小型的孪生卷积神经网络,其被训练来在要么相同光照要么不同光照条件的一对图像,成对的图像总是有相同的姿态,我们使用Exteded
Yale Face Database B“From few to many: Illumination cone models for face
recognition un- der variable lighting and
pose.”,其包含测试者的9种姿势和64种光照条件下的灰度图像。网络结构如图4所示。

我们将特征表示x在光照网络最后一层的输出定义为Γ(x)\Gamma(x)Γ(x),并且介绍了下列的损失函数,其尝试防止生成图像xˉ\bar{x}xˉ
和内容图像x的光照条件不同。其中xˉ\bar{x}xˉ和x都是单通道照明图像。
Llight(xˉ,x)=1Γ(x)∣∣Γ(xˉ)−Γ(x)∣∣22.(6)
L_{light}(\bar{x},x)=\frac{1}{\Gamma(x)}||\Gamma(\bar{x})-\Gamma(x)||_{2}^{2} .
(6)Llight​(xˉ,x)=Γ(x)1​∣∣Γ(xˉ)−Γ(x)∣∣22​.(6)
Total variation regularization:使用正则化来提升空间的平滑性:
LTV(xˉ)=∑i,j(xˉi,j+1−xˉi,j)2+(xˉi+1,j−xˉi,j)2.(7)
L_{TV}(\bar{x})=\sum_{i,j}(\bar{x}_{i,j+1}-\bar{x}_{i,j})^{2}+(\bar{x}_{i+1,j}-\bar{x}_{i,j})^{2}
. (7)LTV​(xˉ)=∑i,j​(xˉi,j+1​−xˉi,j​)2+(xˉi+1,j​−xˉi,j​)2.(7)
最终的损失函数是上述损失函数的加权组合。
L(xˉ,x,Y)=Lcontent(xˉ,x)+αLstyle(xˉ,Y)+βLlight(xˉ,x)+γLTV((ˉx)).(8)
L(\bar{x},x,Y)=L_{content}(\bar{x},x)+{\alpha}L_{style}(\bar{x},Y)+{\beta}L_{light}(\bar{x},x)+{\gamma}L_{TV}(\bar(x))
. (8)L(xˉ,x,Y)=Lcontent​(xˉ,x)+αLstyle​(xˉ,Y)+βLlight​(xˉ,x)+γLTV​((ˉ​x)).(8)

<>3 实验

<>3.1 CageNet和SwiftNet


理论细节:我们训练了一个转换网络来执行换脸成Cage,我们从网上搜集了大约60张不同姿势和面部表情的图片,为了更进一步增加风格图像的数量,每个图像都被水平翻转,我们使用Celeb
A数据集来作为内容图像进行训练,其包含20万张名人形象。
网络的训练分成两个阶段,首先,网络在2.1节中描述的用来训练处理128x128大小的图像。目标为最小化公式(8),其中照明损失LlightL_{light}
Llight​由一个也使用128x128输入训练的照明网络计算得出,在等式(8)中,β=10−22\beta=10^{-22}β=10−22
来减轻光照相较于感知特征和风格特征的影响。对于总体的方差损失,γ=0.3\gamma=0.3γ=0.3。
利用Adam来训练转换网络,迭代1万次,batch大小为16,在一块Tesla M40
GPU上花费了2.5小时,权重初始化方式为正交初始化,学习率从0.001衰减到0.0001。

关于快速风格迁移的细节,我们使用下列设置,风格损失和感知损失分别使用VGG层的{relu3_1,relu4_1}和{relu4_2}来计算。对于风格损失,我们使用patch的大小为k=1。在训练期间,每一个输入图像与一系列
NbestN_{best}Nbest​风格图像进行匹配,其中NbestN_{best}Nbest​等于16,风格权重α\alphaα
在总的目标函数中是最重要的微调的参数,开始α=0\alpha=0α=0,逐渐的,增加到20,这在我们的实验中取得了最好的结果。

已经训练了一个128x128的输入和输出的模型之后,我们增加了一个额外的分支来处理256x256的图像。额外分支优化的时候保持剩下的网络不变。训练策略和上述相同。除了风格权重调整为
α=80\alpha=80α=80
,我们使用256x256输入训练照明网络。在第二个阶段,转换网络花费了12个小时来训练,得到了2M的参数,其中一半都是第二阶段训练的。

结果:图5b展示了我们换脸方法的最终结果,应用在图5a上。图5c中的神经网络的原始输出。我们发现神经网络能够保持头部姿势,面部表情和照明完整的同时,以免不外观进行明显的改变。尤其,其显著的改变了鼻子,眼睛,眉毛,嘴唇和面部皱纹,同时保持了凝视的方向,并仍然产生了可信的图像。然而,更加粗糙的特征比如整个头的形状基本上没有因为我们的方法而改变,在某些情况下,这减少了身份感知变化的影响。能够注意到当目标和输入身份又不同的肤色时,生成的结果脸有一个比较平均的肤色。这一定程度上是因为交换图像和背景使用
泊松克隆,以及一定程度上是由于转换网络,后者融合颜色是因为它的损失函数是基于VGG的,其对颜色比较敏感。
为了测试我们的结果对其他身份的繁华性能,我们训练了相同的转换网络,使用大约60张Taylor的图像,我们发现结果相似,如图5b。

图6展示了光照损失在总的目标函数中的影响。当没有这个损失的时候,利用CageNet来生成的效果,没有适应到照明的变化以及阴影效果。

虽然生成的脸通常明显看起来像目标身份,在一些例子中识别人还是比较困难的,因为输入身份的特征仍然停留在输出图像中。他们能够通过增加风格损失的权重来完全消除,然而,这是以忽略输入的面部表情为代价的,如图7所示。我们不认为这是一种理想的行为,因为这改变了输入图像潜在的情感解释。事实上,在单幅输入图像上操作迁移表情的能力将我们的方法和其他方法区别开来。为了明确比较,我们实现了一个简单的换脸方法,其方法与图2中执行步骤相同,除了转换网络的应用。这步通过在风格集中选择一张图像来代替,其面部标记点与输入图像的非常接近。结果展示在图8中。当baseline方法产生尖锐的面部效果比较一般,其会改变表情,注视方向和脸部,其与图像的剩下部分混合起来效果比较差。




接下来,我们展示一些我们方法的失败案例,我们发现我们的网络对正面的处理能力比侧面更好,在图9中,我们看到从侧面视角转变到正面视角的过程中,Cage的脸变得越来越可辨别,这可能是由于数据集中的不平衡造成的。我们的训练集(CelebA)和一系列风格图像相较于侧面视角包含了大量的正面视角图像,因为这些图像在互联网中比较流行(正面图像)。图9也说明了光照迁移的失败,因为网络增强了测光,这个原因可能是训练光照网络的训练集中带有苛刻光照条件的图像比较流行。(说到底,是因为数据集覆盖的不够全面,不管是转换网络还是光照网络)

图10描述了其他的例子,这些例子,我们的方法还没有处理的很好。特别地,遮挡物体如眼镜被网络移除,并且可能导致伪影的效果。

Speed and Memory:通过转换网络的钱想过程对于一个256x256输入图像在一块GTX Titan X
GPU上花费40ms的时间。对于本文提出的结果,我们手动分割图像中的皮肤和背景区域。然而,我们训练一个简单的网络来自动分割,能够产生比较好的掩膜,大约花费5ms。近似地,和利用CPU(i7-5500U)用于图像对齐的时间相同。同时,我们使用dlib库来做面部关键点检测,这个方法非常的快,运行时间小于0.1ms。泊松克隆使用opencv大约花费35ms。
在测试阶段,不需要向网络再提供风格图像,所以内存消耗比较低。

<>4 讨论和未来工作


由于风格迁移的性质,基于损失函数的值来定量评估我们的结果是不可行的。因此,我们的分析主要限制于只有主观的评估。在换脸上,我们的方法偏离了常规的实践,这使得与之前的工作执行一个公平的比较很困难。仅对图像操作能够产生非常清晰的图像,但是他们不能再给定一个有限数量的目标身份图像的情况下准确的传递面部姿势和表情。另一方面,更复杂的方法要求来自我们想要替换的人脸的更多的图像(风格图像特别多)。

相较于之前的风格迁移的结果,我们的方法实现了更高水平的逼真程度。然而,他们仍然能够用更多的方法来进行提升。首先,生成结果的质量取决于风格图像的数量,正面换脸的结果通常比侧面的生成质量要更好,这可能是由于网上找的到的正面视角的图像会更多导致的,换句话说就是训练集中的侧面图像和正面图像比例不对等造成的。另一个问题的来源是不常见的面部表情和苛刻的光照条件输入到换脸的图像中。这可以通过选择更大且更仔细的选择照片的集合来减轻这些问题(也是通过数据集的筛选来达到目的)。一些图像也出现了过度平滑的效果,这可能在未来的工作中通过添加对抗损失来获得提升,这已经在结合基于VGG的损失的工作中看到了效果"Photo-Realistic
Single Image Super-Resolution Using a Generative Adversarial
Network"和“Amortised MAP Inference for Image Super-resolution.”。

其他潜在的提升可能是修改损失函数,以便于转换网络能够保留遮挡物如眼镜。相同的,我们能够尝试惩罚网络来改变输入图像的背景,这里我们使用后处理步骤中的分割来保留背景,这能够通过结合我们已经训练过的神经网络来做分割实现自动化。

更进一步的提升可能是通过提升面部关键点检测算来实现,在本文中,我们使用dlib库,这在只有一定程度的头部旋转的情况下是准确的,对于大角度的视角,这个算法尝试通过拟合一个平均的正脸形状来近似定位不可见的关键点位置。通常这会导致沿着jawline的点的结果不准确,其导致了换脸图像结果中的伪影效果。
其他小的收获可能是当时用VGGFace网络“Deep face
recognition.”来得到风格和内容的损失。不像这里使用的利用了各种各类的分类图像来进行训练的VGG网络,VGG-Face被训练用来识别大约3000个独一无二的个体。因此,VGGFace的特征空间更适合我们的问题。

<>5 结论


本文中,我们提出了一个可证明的利用深度神经网络对于全自动化几近实时的换脸概念。我们介绍了一个新的目标,展示了风格迁移使用神经网络能够生成人脸逼真的图像。提出的方法处理了一个特定种类的脸部替换。这里,主要的困难在于改变身份,但是不改变原来人脸的姿势,面部表情和光照。据我们所知,这个特定问题之前还没有被解决过。

虽然还存在一些问题需要克服,暗示我们感觉我们在基于神经网络的换脸这一具有挑战性的问题上取得了重大的进展。使用前向反馈神经网络有非常多的优点,比如,易于实现,易于增加新的身份,控制效果的能力,或者是有实现结果看起来更在自然的潜力。