本文导读
本文主要介绍ICCV 2019的一篇文章,FSGAN:Subject Agnostic Face Swapping and Reenactment。
文章提出了一种基于对抗生成网络的换脸术,该方法可以对在训练中未曾见过的脸部图像对进行很好的处理,并且可以根据目标图像脸部区域的mask对源图像的脸部区域进行补全,比较好的解决了脸部遮挡问题。原文链接:https://arxiv.org/pdf/1908.05932.pdf
网络架构
整个FSGAN的架构可以分为3个部分:重演和分割模块,补全模块,融合模块;分别对应上图中的a、b、c部分。重演模块的作用是将源图片
I
s
I_s
Is调整为目标图片
I
t
I_t
It的姿势;由于源图片
I
s
I_s
Is和目标图片
I
t
I_t
It的脸部区域可能不一致,比如:头发遮挡等问题所导致,所以补全模块则是根据目标图片
I
t
I_t
It脸部区域的mask来补全源图片
I
s
I_s
Is的脸部区域;在补全之后,两张图片的姿态,形状已经基本一致,但肤色和光照还有差异,最后的融合模块则是将补全后的人脸图片
I
c
I_c
Ic更好的融合到目标图片It中。
loss
由于换脸问题本质上还是一个重建问题,文章使用的两个基本loss也都是比较常见的重建损失和对抗损失。
重建损失
重建损失有两部分构成,perceptual loss和 L1 loss,分别捕获图片的高频细节和低频特征。
最终的重建损失则为
对抗损失
为了使得生成的图片更具有真实感,文章还结合多尺度鉴别器实现对抗损失
重演和分割模块
重演和分割模块包含两个网络:Gr和Gs。
Gs的功能很简单:输入一个3通道的图片,输出是其对应的3通道的分割模板,在后续流程中的人脸补全模块会使用到该分割模板。Gs所采用的损失函数为交叉损失熵以及逐像素的L1 loss
重演模块是一个不断迭代的过程,作者提取源图片
I
s
I_s
Is和目标图片
I
t
I_t
It的欧拉角以及人脸关键点,在两个欧拉角和关键点中进行插值,进而得到中间关键点
p
j
p_j
pj。将得到的中间关键点和人脸图片输入Gr,如此重复迭代,最终得到重演图片
I
r
I_r
Ir
在训练过程中,采用了一个逐步的重演损失,对每一次迭代的重演图片计算重建损失,避免了源图片
I
s
I_s
Is和目标图片
I
t
I_t
It姿态差异过大带来的影响,这也是本文的贡献之一。
补全模块
在重演模块得到了源图片的最终重演图片
I
r
I_r
Ir以及对应的分割模板
I
s
I_s
Is,在补全阶段,首先根据重演分割模板
I
s
I_s
Is提取出
I
r
I_r
Ir中的脸部区域,即去除背景。将其和目标图片的分割模板
S
t
S_t
St一起输送到补全网络Gc,结合下面的loss对面部进行补全
融合模块
根据作者所说,融合模块也是本文的两点之一。具体来说,作者想采用泊松融合的方式使得补全后的人脸
I
c
I_c
Ic能够更加自然的融合到目标图片
I
t
I_t
It中,但是他并没有直接采用泊松融合,而是构建了一个融合网络Gb,让其实现泊松融合。
这里为什么不直接采用传统的泊松融合?文中并没有明确的说明。相比于传统的泊松融合,这里仅多了一项对抗损失,或许这样做可以提高生产图片的真实感?也可能是为了构建一个全流程深度学习的网络?
总结
松融合,这里仅多了一项对抗损失,或许这样做可以提高生产图片的真实感?也可能是为了构建一个全流程深度学习的网络?
总结
总的来说,FSGAN在换脸方面的效果还是不错的。能够很好的保存源人脸的身份特征,同时将面部信息和表情信息均迁移到目标图像中。FSGAN中包含许多不同的子网络,适用于更普遍的换脸任务,但是作者并没有说明要如何训练这样一个大网络,不过可以借鉴该篇文章的思路,或者将其中的部分网络加以应用,也是可以得到不错的效果的。
专注于编程知识分享,包括但不限于数据结构、算法分析、集合框架、深度学习等领域知识。更多内容请关注微信公众号:旭说编程。