- https://arxiv.org/pdf/2106.06340v1
- https://github.com/neuralchen/SimSwap
- https://huggingface.co/CountFloyd/deepfake/tree/main
- https://github.com/s0md3v/roop/blob/main/roop/processors/frame/face_swapper.py
- https://github.com/deepinsight/insightface
- 问题引入
- face swapping任务:1)可以泛化到不同人脸;2)将源图片的人物id注入到目标图片;3)同时保持目标图片其他属性不变(表情,光线等);
- 工业界的换脸方法需要重建人脸模型并且复刻光线条件;
- 有一些更低门槛的方法:source-oriented(将目标图片的属性转移到源图片,然后进行blend)和Target oriented(首先提取源图片的特征,之后改变目标图片的特征)
- 首先通过ID Injection Module (IIM)模块来将源图片信息注入到目标图片当中,将原始的针对特定人脸的模型https://github.com/deepfakes/faceswap扩展到任意图片;
- Weak Feature Matching Loss来保证目标图片的原始属性;
- methods
- 在DeepFakes上面进行改进,原DeepFakes包含两个部分,encoder
E
n
c
Enc
Enc+两个identity specific decoder
D
e
c
S
,
D
e
c
T
Dec_S,Dec_T
DecS,DecT,在训练的阶段,
E
n
c
−
D
e
c
s
Enc-Dec_s
Enc−Decs输入warped source image,重建到original unwarped source image,同样的步骤也在
E
n
c
−
D
e
c
T
Enc-Dec_T
Enc−DecT进行,在推理阶段,输入warped source image,输出image with the source’s
identity and the target’s attributes; - 上面的方法只能在指定的identity上面使用,首先想要扩展到任意人脸,在encoder和decoder之间添加了 ID Injection Module模块,首先encoder的输出 F e a T Fea_T FeaT包含了图片的identity信息和attribute信息,高度耦合,现在希望identity信息变为源图片的,直接修改耦合在一起的特征, ID Injection Module包含两个部分identity extraction part(使用人脸识别模型输入源图片 I S I_S IS获取 v S v_S vS)+embedding part(使用Adaptive Instance Normalization(AdaIN)替换res block中的bn), v s v_s vs经过全连接层得到scale以及shift;在训练的时候计算结果图片得到的 v r v_r vr和 v s v_s vs的距离作为损失,只使用该损失会使得模型忽略目标图片的原始属性,所以还添加了adversarial损失;
- 其次还要保持目标图片的原始属性,Weak Feature Matching Loss,
其中i表示特征层数, D i D_i Di表示discriminator的不同层,损失计算从第 m m m层开始; - 最终损失:
– Identity Loss:
– Reconstruction Loss:当source和Target图片是同一个人的时候
– Adversarial Loss and Gradient Penalty;
– Weak Feature Matching Loss;