生成|深度伪造(Deepfake)原理分析及实战( 二 )


生成|深度伪造(Deepfake)原理分析及实战
文章插图
在Deepfake的场景下,通过使用生成对抗网络可以生成更逼真的图像/视频。
但是在过去要使用Deepfake进行生成时,需要额外的信息。比如,如果想要生成头部的移动,则我们需要脸部的landmark,如果想要生成全身的移动,还需要姿势估计(pose-estimation)。此外,使用这些传统技术如果想把源脸替换到目标脸上的话,需要使用大量的双方人脸图像的数据进行事先训练训练。
而本文将介绍的技术不需要这些附加约束条件,原文发在NIPS2019上,名为《First Order Motion Model for Image Animation》。
First Order Motion Model for Image Animation从论文的题目就可以看出,其希望完成的任务是image animation,输入一张源图像(source image)和一个驱动视频(driving video),输出是一段视频,其中主角是源图像,动作是驱动视频中的动作。如下所示,源图像通常包含一个主体,驱动视频包含一系列动作。
生成|深度伪造(Deepfake)原理分析及实战
文章插图
第一列是给定的图片,而第一排图像是给定的动作序列,通过人脸和表情的迁移,分别使其完成了一系列的动作。换句话说,把提取到的动作特征用作图像的动作依据。
作者采用了一种源于Monkey Net(见参考文献[6])的自我监控策略。在训练时,作者使用了大量包含相同对象类别的对象的视频序列。模型通过组合一个单一的帧和一个学习的动作的潜在表示来重建训练视频。通过观察从同一视频中提取的帧对,它会学习到将动作编码为特定于动作的关键点位移和局部仿射变换的组合。在测试时,将模型应用到由源图像和驱动视频的每一帧组成的对上,并根据源对象生成对应的图像动画。
整个模型的运作流程如下
生成|深度伪造(Deepfake)原理分析及实战
文章插图
整个模型分为运动估计模块和图像生成模块两个主要组成部分。在运动估计模块中,该模型通过自监督学习将目标物体的外观和运动信息进行分离,并进行特征表示。而在图像生成模块中,模型会对目标运动期间出现的遮挡进行建模,然后从给定的名人图片中提取外观信息,结合先前获得的特征表示,进行视频合成。
1)运动估计模块
输入:源图像S , 驱动图像D
输出:
1、密集运动场:表征了驱动图像D中的每个关键点到源图像S的映射关系
2、贴图遮罩:表明了在最终生成的图像中,对于驱动图像D而言,那部分姿态可以通过S扭曲得到,哪部分只能通过impainting得到
在这里,S到D有一个较大的形变,直接映射,误差较大,采用的技巧是提出了一个过渡帧R,首先建立R帧到S帧、R帧到D帧的映射,然后再建立D帧到S帧的映射
运动估计模块中有两个子模块:
1、关键点检测器:检测图片中的关键点信息。接着采用局部仿射变换,在关键点附近建模它的运动,主要用一阶泰勒展开来实现。同理,R帧到D帧通过这种方式并行得到
2、稠密运动网络:根据前面得到的映射关系J和源图像S产生上面说的2个输出。
2)图像生成模块:图像生成模型,根据输入的图片和第一部分得到的信息,生成一个新的图片
这里有论文原作者的分享报告:
https://www.youtube.com/watch?v=u-0cQ-grXBQ&feature=emb_imp_woyt,感兴趣的师傅们可以看看
要点分析在上图中我们看到Motion module(黄色底色)实际上有两个子模块(一左一右),分别是关键点检测器(keypoint detector)和稠密运动网络(dense motion),这是论文的核心,在本节接下来的部分我们会依次介绍关键点检测器、稠密运动网络、训练损失、测试阶段的关键细节,帮助大家更容易理解本文的工作思路(注意,原论文文后还有10页的附录都是关于公式细节的,我们这里均略过,下面只会分析、推导正文给出的关键公式)。