基于深度学习的人脸虚拟表情样本生成

2021-09-17 04:54李燕
电子制作 2021年16期
关键词:人脸卷积样本

李燕

(华北科技学院电子信息工程学院,北京,065201)

0 引言

在模式识别与多媒体研究等相关计算机视觉领域,基于深度学习的卷积神经网络已经成为近年来的最为新兴、热门技术,凭借着简洁、有效、易训练等优势迅速在图像处理领域得到了广泛的应用[1],尤其是在人脸识别相关的领域,卷积神经网络的出现极大程度上提升了人脸识别和人脸属性识别的准确率和精确度,俨然已经成为目前人脸领域的主流技术和最具前景的技术发展方向。作为神经网络另外一个方向的演变,对抗生成网络初期其实是为了探究神经网络的内部构造原理。但随着相关技术的不断进化,借助其可以生成逼真图像的特性,深度卷积神经网络在图像重建领域也体现出了很强的实用价值。生成对抗网络,是由深度学习领域的重量级人物Ian.Goodfellow在2014年新提出的深度学习模型,该模型一经提出就收到了广泛的关注和应用[6]。但是GAN也存在不足,如网络层数太浅,网络能力有限[2-6]。除此之外,经由大量尝试证明GAN的训练还存在不够稳定的问题,该网络经常生成不出和我们预期相同或者类似的图片。为解决这些问题,AlecRadford将CNN与GAN结合,提出了深度卷积生成对抗网络,将GAN中的生成器和鉴别器由两个多层感知机替换为CNN,提高了样本的质量和图像收敛的速度。

1 生成对抗网络模型概述

Generative Adversarial Network即学术界耳熟能详的GAN,该网络是由Ian Goodfellow首先提出,一经问世就受到大家的广泛关注,成为深度学习领域最热门的东西,仿佛没有什么东西是GAN做不出来的。首先我们要弄清楚什么是生成,其实生成就是构造一个生成模型,然后让其学习一些数据,最后生成类似的数据。要让计算机先看人脸的图片,再来产生人脸的图片。GAN是如何凭空捏造人脸表情的?我们必须明确一点这里的捏造并不是什么都没有的盒子,而是由一些没有意义的随机数生成有意义的作品。生成器会根据随机数据来生成有意义的数据,而判别器会学习如何判断哪些数据是真实数据,哪些是生成数据,然后将学习到的经验反向传给生成器,生成器能够根据随机数生成更真实的数据。计算机是怎样把生成网络和判别网络巧妙地结合在一起的呢?为了使生成出的数据跟真实数据更接近,一方面要让生成网络学习图像的权重参数,结果就是要让判别网络判别不出生成图片的真和假。这个过程就类似二人博弈的问题,最终生成模型的生成类似真实图片的概率1/2,而判别网络判别的概率是1/2。

2 生成对抗网络的数学模型和解释

一个判别模型,它必须要提高自己的能力以此确定样本是来自模型分布还是来自数据分布。生成模型可以被认为类似于一组伪造者,试图制造仿品并在不被发现的情况下使用它,而鉴别模型类似于鉴定古字画的权威专家,试图检测仿品。这个游戏的对抗促使两队改进他们的造假能力和鉴别能力,直到仿冒品无法从真品中辨别出来。在这一系列不间断的对抗过程中双方能力都在不断增强。在本论文中,我们研究了生成模型是怎样通过一个多层感知器传递随机噪声进而生成虚拟样本的特殊情况,而且判别模型本身也是一个多层感知器。在这种情况下,我们可以只应用表现不俗的反向传播和dropout算法来训练两个模型,并且只使用正向传播从生成模型中提取样本,这种方法的一大优点是不需要近似推理或马尔可夫链。生成器组成的生成模型以及判别器组成的判别模型组成了生成对抗网络[7]。生成器和鉴别器两者相互竞争的共同目标是生成与训练中的数据点非常相似的数据点,即本论文的目标虚拟人脸表情,生成同一个人的不同表情,从而丰富我们的样本库。

生成对抗网络的训练过程是:生成器从随机噪声或潜在变量中生成类似于真实数据的样本,判别器对生成的数据和真实数据进行判断,并将结果反馈给生成器。同时对生成器和鉴别器训练,生成器接收反馈信息后,不断调整权重参数,直至达到纳什均衡,而鉴别器不断训练自己的鉴别能力。即生成器生成的数据与真实样本几近相同,鉴别器无法准确辨别该数据是生成的数据还是真实的数据。下图是对抗生成网络结构。

图 1 对抗生成网络结构

当模型是多层感知器时候,对抗性建模框架最容易应用。我们为了了解数据x上的生成器的概率分布Pg,我们定义了基于输入噪声变量的先验概率Pz(z),然后用G(z)表示到数据空间的映射;在G(z;θg)中G是一个可微函数表示为一个多层感知器和参数θg。我们还定义了第二个多层感知器D(x;θd)。D(x)表示x来自数据而不是Pg的概率。我们对D进行训练,使其能够最大限度地为来自G的训练示例和样本分配的正确的标签。

简单解释该公式:

x表示来自样本集中的真实的图片,z表示输入生成器中的噪声。Ex~Pdata(x)表示样本的分布,Ez~Pz(z)表示噪声分布,通过一个数据空间的映射得到Pg,即生成器的分布,模型的最终目的即让Pg尽可能拟合Px[6]。

D(x)表示D网络判断真实图片是否是真实的概率,这是因为x就是来自数据集的真实样本,所以对于D来说,这个值越接近1越理想[6]。而D(G(z))是D网络判断G生成的图片的是否为真实的概率。

G应该希望自己生成的图片“越接近真实越好”。也就是说,G希望D(G(z)尽可能的大,此时V(D,G)会变小,因此我们看到式子的最前面的记号是minG。D的能力越强,D(X)应该越大,D(G(X))应该越小。这时V(D,G)会变大。因此式子对于D来说是求最大maxD[6]。

换句话说,D和G用值函数V(G;D)来进行两者博弈游戏。博弈的最终结果有唯一的特解的存在,即G可以生成非常接近输入的图片G(z)。对于D来说,它难以判断G生成的图片究竟是不是真实的,因此D(G(z))=0.5,D(G(X))=0.5。图2是本次使用的流程。

图 2 实验流程图

图 3 生成器模型

图 4 判别器的结构

(1)生成器的定义

下面对该模型进行解释:100表示生成网络做了一次初始化,它代表一个噪声向量,里面的值是没有任何意义的,我们要把这100维的向量转换成64×64×3的真实数据。首先要把100维的向量转换成跟特征图相似的东西,此时我们需要借助一个简单的全连接层,将其变成一个维数更大的向量,然后对这个新的向量进行reshape操作变成4×4×512特征图格式,接着我们争取把特征图格式转化成图像格式,并希望特征图的长和宽不断扩大最终扩大到64。此时我们就需要使用一种叫做反卷积的方案,每经过一次反卷积长和宽变为原来的2倍,在这个过程中特征图的个数在不断缩小。在实际写代码时我们只需要指定层的大小和反卷积的结构计算机就可以自己学习权重,让网络进行迭代和优化。当权重参数学习完成就可以进行图片生成。

(2)判别器的定义

首先我们输入一张64×64×3的图片,然后利用上面定义的卷积层,构造深度卷积生成对抗网所需的鉴别器,图像输入卷积层,卷积层输出特征映射个数,输出减少到原来的四分之一,卷积层的输出大小分别为32×32、16×16、8×8、4×4。判别器其实就相当于一个二分类器,这个二分类器对输入图片进行判别若判为真则输出为1,否则判为假输出为0。

3 CNN网络模型概述

CNN网络其实可以看做一个一个函数或者黑箱。当输入为一个二维像素阵列x,由于CNN的鲁棒性和抗干扰能力非常强,经过平移、压缩、加厚以及旋转之后输出的图像依旧是输入的图像。对于我们人眼来讲,识别这些图片非常简单,而对计算机而言它只能看到像素的阵列或者灰度图里的+1和-1,+1代表亮部,-1代表暗部,所以对于计算机而言如何把它进行数字特征提取是非常重要的。如果一个人脸上有几万个特征,若是用几万个卷积和去对原图进行处理,得到几万个featuremap,那么运算量就会非常大,对于自动驾驶或者人脸识别要求毫秒级的运算。例如马路上躺着一个人,你要马上判断是否要绕开他,需不需要减速,那么这其中的运算量非常大,时间上又来不及,所以需要我们把图像进行缩小,此时用到的就是池化,池化也称下采样。池化的原理就是把大矩阵化为二维矩阵,但是会丢失一些数据,但这是在我们可接受的范围内的。池化分为两种一种是maxpooling,另外一种是averagepooling。我们用大量图片去训练模型,接着通过一种叫做反向传播的方法把生成出的图片跟真实的图片进行比较,比如是一只猫,而计算机却将其识别为一只狗,接着进行误差计算,产生损失函数。我们的目标就是讲损失函数降到最低,对损失函数进行求导,然后找到它最小值,通过调节参数使损失函数达到最小。经过不停的训练,不断让它学习猫的各种图片,那么计算机自己就学会了采用哪些卷积和,接着全连接网络中的每个神经元的权重是多少,它自己就学会了。我们认为是人为指定一个卷积和来识别人的面部表情的特征,其实并非如此,是通过计算机自己训练,它知道它要得到什么特征,而不需要人为给它指定。这就是深度学习强大的地方。

4 在TensorFlow中用DCGAN生成图像

本次设计我们采用的是GitHub上的开源代码来实现DCGAN。利用该代码训练CelebA数据集,最终生成带表情的人脸图像。

本实验使用的数据为CelebA数据集[7]。CelebA数据集是由香港中文大学开发的一个大型人脸属性数据集。它包含20多万张名人头像,每张都有40个属性注释。共训练5个epoch,每个epoch有3072张训练图片,每个100步采样生成器,最后可以得到155个生成器生成的测试图表。您可以看到带有历元的生成器测试图为0,步骤数也为0。查看历元0和3000步的测试图,经过一轮的训练,生成器已经能够生成人类的基本带有表情的面孔。然而,很明显,生成的脸是相对畸形的,眼睛还没有正确生成。大部分的头发都被其他噪声干扰。将训练好的discrimination networks用于特征提取,然后分类,和其他一些无监督的效果进行了比对,效果还不错。

图 5 标记为A的人脸表情生成图片集

经过数天在实验室GPU上运行程序,跑出来的标记为A的人脸表情还是比较丰富,但是A人物的头发还是失真得很严重,我们知道在DCGAN生成图片的过程中受样本的光照情况,遮挡情况等等的影响,结果生成的表情并不是很多,后期还需继续查找原因进行改善。

5 结论

基于TensorFlow的深度学习框架,结合了深度卷积生成对抗网络,实现了虚拟人脸图像的生成,取得了较好的效果。除了图像生成外,深卷积生成对抗性网络在图像超分辨率领域的应用也是值得考虑的。image超分辨率的机理是通过对低分辨率图像的变换,输出细节清晰丰富的高分辨率图像。当前图像超高分辨率的问题是在转换过程中丢失了高频细节,这与它的目的相反。然而,生成式对抗网络能够很好地解决这一问题,因为生成式对抗网络能够在训练过程中,然后输出一个好的高分辨率的原版的形象。从结果来看,生成的人脸清晰度不高,希望在以后的研究中能够对模型进行完善以达到更好的虚拟人脸效果。

猜你喜欢
人脸卷积样本
基于全卷积神经网络的猪背膘厚快速准确测定
基于FPGA的卷积神经网络加速优化方法
基于图像处理与卷积神经网络的零件识别
玻璃窗上的人脸
基于深度卷积网络与空洞卷积融合的人群计数
规划·样本
智力考场:有趣的图片测试
随机微分方程的样本Lyapunov二次型估计
“领家系”可爱脸VS“高冷系”美人脸
基于支持向量机的测厚仪CS值电压漂移故障判定及处理