一种基于生成对抗的实时人脸表情迁移方法
文献发布时间:2023-06-19 12:25:57
技术领域
本发明属于计算机视觉领域,具体涉及一种基于生成对抗的实时人脸表情迁移方法。
背景技术
人脸表情迁移是指将给定的驱动人脸图片的表情迁移到源人脸,新合成的人脸图像保持源图像的身份信息不变,但是其表情与驱动人脸一致。这项技术在远程呈现方面具有广泛应用,包括视频会议、虚拟游戏,以及影视特效领域。因此,人脸表情迁移方法在学术界和工业界均有着重要的研究价值。
传统的人脸表情合成方法通常采用计算机图形学方法或对人脸进行显式三维建模。图形学方法是将源人脸图像参数化,利用预估的光流来扭曲人脸图像,但是这种方法实现繁琐,而且生成效果不够自然逼真,尤其在人物大幅动作的情况下表现较差。在基于三维建模的方法中,驱动人脸和目标人脸的3DMM参数从单个图像中计算出来,并最终混合,通过这种方法生成的效果自然,但是会损失一些人物细节特征。
近年来,随着深度学习的迅速发展,图像生成领域涌现出大量的基于深度神经网络的人脸表情合成方法,这类方法首先利用卷积神经网络提取人脸特征,将图像从高维空间映射到低维空间,由此将目标人脸图像编码为仅包含身份信息的特征向量,然后结合输入的特定表情的特征点,利用深度神经网络合成目标人脸图像。虽然这类方法是有效的,但它们需要成对图像或大量视频的数据集,这可能很难获得,而且生成的图像中有关皮肤纹理等细节过于模糊。
发明内容
本发明的目的是为了解决上述背景技术存在的不足,提供一种基于生成对抗的实时人脸表情迁移方法。本发明主要包括两个阶段:第一阶段为表情迁移阶段,该阶段利用生成对抗的思想生成粗略的带有目标表情和源人物身份的人脸图像。第二阶段为纹理增强阶段,该阶段利用傅里叶变换以及高通滤波器得到纹理细节,并对第一阶段的图像进行细化。本发明方法克服了现有技术存在的生成图像模糊或皮肤纹理细节损失问题。
为了实现上述目的,本发明所采用的技术方案为:基于生成对抗的实时人脸表情迁移方法,该方法分为两个阶段,第一阶段为表情迁移阶段,在目标表情特征点的驱动下,使用生成对抗的思想生成粗略的带有目标表情和源人物身份的人脸图像;第二阶段为纹理增强阶段,利用高通滤波器在图像频域中进行处理,得到包含人脸纹理细节的高频分量,再对该分量进行反傅里叶变换得到纹理图,根据光流场得到扭曲的纹理图,将该扭曲的纹理图与平滑后的粗略人物图像组合成最终表情迁移后的图像并合成最终图片。
进一步的,表情迁移阶段的具体实现方式如下:
步骤一,对数据集中的每一帧图像进行数据预处理工作;
步骤二,构建生成网络,对预处理后的图像中的身份信息和表情信息进行特征编码,生成身份特征向量和表情特征向量:
所述生成网络由五个子网络构成:一个身份编码器Encoder
步骤三,利用身份特征向量和表情特征向量来生成粗略的人脸图像。
进一步的,步骤一中预处理的过程如下;
使用ffmpeg工具将数据集中的视频分解为图片序列,使用Dlib库对每一帧图片提取人脸若干个特征点,并连接各点绘制landmarks图像,以人脸中鼻尖特征点为中心,将图片裁剪至标准大小;
从数据集中随机选取同一人物的两张图片,其中一张图片作为源图像,将其裁剪后的图片记作x
进一步的,步骤二的具体实现方式如下;
首先将源图像和驱动图像通过身份编码器Encoder
进一步的,步骤三的具体实现方式如下;
将得到的源图像的身份特征向量
然后将生成图像x
进一步的,所述身份编码器Encoder
进一步的,表情迁移阶段中总的损失函数计算公式如下:
其中,公式(5)为总的损失函数,由生成对抗损失、身份特征匹配损失和感知损失加权求和得到的,λ
进一步的,纹理增强阶段的具体实现方式如下:
步骤四,计算光流场:
使用opencv计算粗略图像x
步骤五,获取源人物初步纹理图:
使用opencv将源图像变换为灰度图像,将灰度图像表示为二维函数f(x,y),x和y表示空间坐标,(x,y)上的幅值f表示该点的灰度,使用opencv将源灰度图像f(x,y)经过傅里叶变换到频域,记作F(u,v),并得到频谱,公式如下:
其中公式(9)为二维离散傅里叶变换,图像尺寸为M×N,x,y表示时域变量,u,v表示频域变量,j
然后使用高斯高通滤波器对F(u,v)进行频域处理,提取高频分量F
F
其中,公式(11)为高斯高通滤波函数,D(u,v)表示从点(u,v)到频率矩形中心的距离,D
最后通过反傅里叶变换将高频分量F
步骤六,对初步纹理图进行扭曲变换并合成最终图片:
调用pytorch的grid_sample函数,对初步纹理图施加F
至此,完成人脸表情迁移,并且保持源人物的身份不变,合成具有纹理细节的细粒度图片。
上述基于生成对抗的人脸表情迁移方法,其中的生成对抗网络模型英文缩写为GAN,全称为GenerativeAdversarial Networks,为本技术领域公知的算法,傅里叶变换是公知的信号分析方法,Dlib和opencv是开源的计算机视觉工具库。
与现有技术相比,本发明具有如下有益效果:
本发明方法基于PyTorch深度学习框架,利用驱动表情轮廓图指导网络学习驱动表情的表达,不局限于表情的种类限制,可生成用户需要的任意的表情图片。本发明使用生成对抗模型的思想生成粗略的人脸图像,并添加纹理增强阶段还原人物的皮肤、头发等纹理细节,本发明在纹理增强阶段采用的是图像频域处理方法,生成纹理图时间短、速度快,可以实时完成表情迁移。本发明在生成对抗原始模型的基础上,添加了人脸识别分类器监督训练,该人脸识别分类器的加入能够最大程度地保留源人物的身份信息,本发明方法克服了现有技术存在的生成图像模糊或皮肤纹理细节损失问题,使生成效果更加真实自然。
附图说明
图1为本发明的流程示意图。
图2为本发明中所述方法在训练阶段的网络结构图,其中源图片和驱动图片是同一人物不同表情的图片对。
图3为本发明中所述方法在纹理增强阶段采用的傅里叶变换流程示意图。
具体实施方式
下面结合附图和实施例对本发明做进一步的说明。
图1所示实施例表明,本发明基于生成对抗的实时表情迁移方法的流程如下:
基于生成对抗的人脸表情迁移方法,第一阶段中,在目标表情特征点的驱动下,使用GAN的思想生成粗略的带有目标表情和源人物身份的人脸图像。第二阶段中,利用高通滤波器在图像频域中进行处理,得到包含人脸纹理细节的高频分量,再对该分量进行反傅里叶变换得到纹理图。根据光流场得到扭曲的纹理图,将该纹理图与平滑后的粗略人物图像组合成最终表情迁移后的图像并合成最终图片。
实施例1
本实施例基于生成对抗的实时表情迁移方法,具体步骤如下:
第一阶段,表情迁移阶段,包括第一步到第三步:
第一步,对数据集中的每一帧图像进行数据预处理工作:
使用ffmpeg工具将数据集中的视频分解为图片序列,使用Dlib库对每一帧图片提取人脸68个特征点,并连接各点绘制landmarks图像,以人脸(鼻尖特征点)为中心,将图片裁剪至256×256标准大小。
从数据集中随机选取同一人物的两张图片,其中一张图片作为源图像,将其裁剪后的图片记作x
第二步,对身份信息和表情信息进行特征编码:
生成网络利用身份特征向量和表情特征向量来生成粗略的人脸图像,生成网络由五个子网络构成:一个身份编码器Encoder
首先将源图像和驱动图像通过身份编码器Encoder
第三步,合成粗略图像:
将得到的源图像的身份特征向量
然后将生成图像x
上述过程中涉及到的损失函数如下:
其中,公式(5)为总的损失函数,由生成对抗损失、身份特征匹配损失和感知损失加权求和得到的,λ
第二阶段,纹理增强阶段,包括第四步到第六步:
第四步,计算光流场:
使用opencv计算粗略图像x
第五步,获取源图像人物初步纹理图:
使用opencv将源图像变换为灰度图像,在数字图像处理中,可以将灰度图像表示为二维函数f(x,y),x和y表示空间坐标,(x,y)上的幅值f表示该点的灰度,使用opencv将源灰度图像f(x,y)经过傅里叶变换到频域,记作F(u,v),并得到频谱,公式如下:
其中公式(9)为二维离散傅里叶变换,图像尺寸为M×N,x,y表示时域变量,u,v表示频域变量,j
然后使用高斯高通滤波器对F(u,v)进行频域处理,提取高频分量F
F
其中,公式(11)为高斯高通滤波函数,D(u,v)表示从点(u,v)到频率矩形中心的距离,D
最后通过反傅里叶变换将高频分量F
其中图像尺寸为M×N,x,y表示时域变量,u,v表示频域变量,j
第六步,对初步纹理图进行扭曲变换并合成最终图片:
调用pytorch的grid_sample函数,对初步纹理图施加F
第七步,将x
至此,完成了人脸表情迁移的训练流程,将驱动人物的表情和姿态迁移到源人物面部,并且保持源人物的身份不变,合成具有纹理细节的细粒度图片。
本实施例中设置的参数如下:
应当理解的是,上述针对实施例的描述较为详细,并不能因此而认为是对本发明专利保护范围的限制,本领域的普通技术人员在本发明的启示下,本发明可以有各种更改和变化。在不脱离本发明权利要求所保护的范围。所作的任何修改、等同替换、改进等,均落入本发明的保护范围之内,本发明的请求保护范围应以所附权利要求为准。
- 一种基于生成对抗的实时人脸表情迁移方法
- 基于谱归一化的循环生成式对抗网络的人脸表情迁移的实现方法