人脸互换是计算机视觉领域比较热门的一个应用,它可以应用于视频合成,提供隐私服务,肖像更换等各个应用。本课程将从自编码器,上采样,数据增强等知识点出发,对深度学习下的人脸互换进行讲解。并且利用 TensorFlow 2 实现川普和道格拉斯·凯奇的人脸互换。训练后的模型可以在不修改原图表情的情况下,完成人脸替换。
数据的可视化
数据增强
自编码器
上采样与下采样
子像素卷积
传统人脸互换
而深度学习却可以在不修改人脸表情的情况下,做到人脸特征替换的效果。由于视频中的人脸互换所需要的资源过多,并且视频就是由一张张图片组成的,因此本次实验只考虑图片中的人脸替换。我们会借用自编码器的核心思想,然后对 DeepFake 的源码进行解析,最后实现川普和尼古拉斯 · 凯奇的人脸互换。
数据的可视化
编码器与解码器
如上图所示,我们可以将加噪点后的手写字符放入自编码器中,然后以加噪点前的手写字符为目标进行训练。最终就能得到一个专门处理噪点的神经网络模型。当以后出现新的具有噪点的图片时,只需放入训练好的自编码器就可以直接进行去噪了。
子像素卷积( Sub-pixel Convolution )
下采样层与上采样层的编写
从结果可以看出,上采样层可以将图层的大小减小为原来的 1212 ,下采样层可以将图层大小扩大为原来的 22 倍。
人脸互换的基本架构
其实人脸互换的基本结构就是两个自编码器,更准确的说应该是 1 个编码器 + 2 个解码器。接下来,我会从训练过程和运用过程分别对 AI 换脸的概念进行阐述。
训练过程
如上图,我们利用同一套方法(编码器)对两种图片进行特征提取。将提取出来的特征放到各自对应的解码器中,生成各自所对应的图像。然后利用生成的图像与原来的图像计算损失,再反向传播并对模型参数进行调整,如此循环,直到损失最小。
当损失最小时,我们把川普的图片放入训练好的(Encoder,Decoder_A) 中就能够得到一张和川普神似的图片。同理,若把凯奇的图片放入训练好的(Encode,Decode_B)中,也能得到和凯奇神似的图片。也就是说,在模型训练过程中,原始图片既是训练集合也是目标集合。
如上图所示,将一张川普的图片放入训练好的 EnCoder 中,得到一组特征。将这组特征放入 Decoder_A 中,就能得到一张神似川普的新图片。若将这组特征放入 Decoder_B 中,就会输出与川普表情一样但是和凯奇神似的图片。
神经网络结构
数据预处理
数据增强
仔细比较结果中的两个川普(从他们的下巴与下边界的距离,目光方向等方面进行比较),你会发现图片已经发生了变化。当然,如果你并没有发现太大变化,可以多次运行上述代码,如果幸运的话,你可以看到图片出现了翻转(设置的图片翻转概率为 40% )。
输入数据集和目标数据集
从上面代码中可以看出,我们并没有直接把做好的输入数据集当做目标数据集,而是对输入数据集中的图片又进行了一次转换。这次转换采用的是点云匹配算法,其本质还是一种映射算法。
代码如下:
构造 Batch 数据集
模型训练
模型运用
整个换脸模型被保存成了三部分:编码器 encoder.h5、解码器 A decoder_A.h5 和解码器 B decoder_B.h5。
根据上述结果,可以看出该模型已经能够很好的将川普和凯奇的脸进行模仿了。