faceswap之Autoencoder(深度学习版)

一,https://github.com/deepfakes/faceswap
相对之前的Dlib+opencv实现的简易换脸(简单的复制粘贴),深度学习换脸,优点是会更真实,表情更自然,实现形神兼备。缺点就是,转换时间长,需要训练。

二,Autoencoder
使用的模型是 Autoencoder。有趣的是,这个模型所做的是基于原始的图片再次生成原始的图片。Autoencoder 的编码器把图片进行压缩,而解码器把图片进行还原,一个示例如下图:
在这里插入图片描述
在这个基础上,即使我们输入的是另外一个人脸,也会被 Autoencoder 编码成为一个类似原来的脸。
为了提升最终的效果,还需要把人脸共性相关的属性和人脸特性相关的属性进行学习。因此,我们对所有的脸都用一个统一的编码器,这 个编码器的目的是学习人脸共性的地方;然后,我们对每个脸有一个单独的解码器,这个解码器是为了学习人脸个性的地方。这样当你用 B 的脸通过编码器,再使用 A 的解码器的话,你会得到一个与 B 的表情一致,但是 A 的脸。

X' = Decoder(Encoder(Shuffle(X)))
Loss = L1Loss(X'-X)

A' = Decoder_A(Encoder(Shuffle(A)))
Loss_A = L1Loss(A'-A)

B' = Decoder_B(Encoder(Shuffle(B)))
Loss_B = L1Loss(B'-B)

具体来说,在训练过程中,我们输入 A 的图片,通过编码器和解码器还原 A 的脸;然后我们输入 B 的图片,通过相同的编码器但是不同的解码器还原 B 的脸。不断迭代这个过程,直到 loss 降低到一个阈值。在模型训练的时候,建议把 loss 降低到 0.02,这样的效果会比较好。
通过加入 PixelShuffler() 的函数把图像进行了一定的扭曲,而这个扭曲增加了学习的难度,反而让模型能够实现最终的效果。
三,网络模型
在这里插入图片描述
我们可以看出来,经历了四个卷积层、展开层、全连接层,我们开始 upscale 整个模型。在我们 upscale 一半的时候,我们把 encoder 和 decoder 进行了切割,从而保证了共性和个性的分离。
四,效果,尼古拉斯特朗普
在这里插入图片描述


版权声明:本文为qq_43258953原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。