3. Method
本文是对《Few-shot adversarial learning of realistic neural talking head models》(编号[42])论文的改进。增加了预测segmentation的功能,并且本文的模型根据潜在的姿势向量(latent pose vectors)来进行reenactment,而不是关键点。
3.1 Training pipeline
数据集:VoxCeleb2 dataset (处理过后使用的尺寸是
256
×
256
256 \times 256
256×256)
与论文[42]一样,采用元学习+微调两阶段的方式进行训练。
元学习的过程
给定一个视频序列,我们获取
K
+
1
K+1
K+1个随机帧
I
1
,
…
,
I
K
+
1
I_{1}, \ldots,I_{K+1}
I1,…,IK+1以及
K
+
1
K+1
K+1个前景分割图
S
K
+
1
S_{K+1}
SK+1(根据现成的语义分割网络预先计算出来的)。
前 K K K个图像帧送入identity encoder(high-capacity 卷积网络 F F F),与[42]中不同,它不是以关键点作为输入。对于每个图像 I k I_{k} Ik,identity encoder输出 d i d_{i} di维的向量 x i = F ( I k ) x_{i}=F(I_{k}) xi=F(Ik),我们把 x i x_{i} xi称为 I k I_{k} Ik的identity embedding。identity embedding包含一些人的pose-independent信息。 K K K个图像帧通过网络 F F F得到 x 1 , … , x K x_{1}, \ldots,x_{K} x1,…,xK,再通过取均值的方式得到单一的身份向量 x ˉ \bar{x} xˉ(identity vector)。
剩下的图像帧 I K + 1 I_{K+1} IK+1首先进行随机姿势增强变换操作(pose augmentation transformation:blur、sharpening、contrast change、JPEG compression等, A A A对于pose-identity disentanglement非常重要,它可以使人的姿势保持完整,但是可能会改变他的identity) A A A。将变换之后的 A ( I K + 1 ) A(I_{K+1}) A(IK+1)通过网络 G G G(pose encoder:much lower capacity)得到 d p d_{p} dp维的pose embedding向量 y K + 1 = G ( A ( I K + 1 ) ) y_{K+1}=G(A(I_{K+1})) yK+1=G(A(IK+1)),把G当成一个person-agnostic姿势表示。
《 Arbitrary style transfer in realtime with adaptive instance normalization》[16]
pose embeddings和identity embeddings送入generator 网络,generator尝试尽可能准确的重建图像帧 I K + 1 I_{K+1} IK+1。与[42]一样,使用栅格化的关键点(火柴人图像)将姿势传递到生成器网络,借助[16]的AdaIN机制,将pose embeddings和identity embeddings传递到生成器网络。具体来说,上采样生成器输入一个大小为 512 × 4 × 4 512 \times 4 \times 4 512×4×4的可学习的tensor,输出大小为 3 × 256 × 256 3 \times 256 \times 256 3×256×256的 I G ( x ˉ , y K + 1 ) I^{G}(\bar{x},y_{K+1}) IG(xˉ,yK+1)和大小为 1 × 256 × 256 1 \times 256 \times 256 1×256×256的 S G ( x ˉ , y K + 1 ) S^{G}(\bar{x},y_{K+1}) SG(xˉ,yK+1)。我们想让 I G ( x ˉ , y K + 1 ) ⊙ S G ( x ˉ , y K + 1 ) I^{G}(\bar{x},y_{K+1}) \odot S^{G}(\bar{x},y_{K+1}) IG(xˉ,yK+1)⊙SG(xˉ,yK+1)和 S G ( x ˉ , y K + 1 ) S^{G}(\bar{x},y_{K+1}) SG(xˉ,yK+1)去匹配图像帧 I K + 1 I_{K+1} IK+1的foreground部分( I K + 1 ⊙ S K + 1 I_{K+1} \odot S_{K+1} IK+1⊙SK+1)和segmentation mask S K + 1 S_{K+1} SK+1。损失函数使用[42]中的内容损失以及分割中常用的dice coefficient 损失。此外, I G ⊙ S G I^{G} \odot S^{G} IG⊙SG和 I K + 1 ⊙ S K + 1 I^{K + 1} \odot S^{K + 1} IK+1⊙SK+1经过投影鉴别器(与[42]的区别是这里不再提供栅格化的关键点),以计算使图像逼真的对抗损失、 the discriminator feature matching loss和embedding match term。
每次卷积之后插入AdaIN模块,AdaIN系数是通过将concat(pose embeddings,identity embeddings)得到的 d i + d p d_{i}+d_{p} di+dp向量通过MLP得到的。
Reenactment and fine-tuning
一旦对模型进行了元学习,就可以将其使用去拟合在元学习过程中未发现的新identities。 因此,给定一个新人的一个或多个图像,通过identity encoder得到identity 向量
x
ˉ
\bar{x}
xˉ。 然后,通过插入从相同或不同人的图像中提取的姿势向量
y
y
y,我们可以通过计算图像
I
G
(
x
ˉ
,
y
)
I^{G}(\bar{x},y)
IG(xˉ,y)及其foreground mask
S
G
(
x
ˉ
,
y
)
S^{G}(\bar{x},y)
SG(xˉ,y)来重现人。
为了进一步减少identity差距,本文遵循[42]并用与[42]中相同的一组损失加上dice coefficient损失对模型(即MLP,生成器和鉴别器的权重)进行微调。 将提供的一组新人物图像及其分割图视为ground truth。 估计的identity embedding x ˉ \bar{x} xˉ在微调过程中保持固定(将其包括到optimization中并没有导致我们的实验出现任何差异,因为embedding x ˉ \bar{x} xˉ中的参数数量远小于MLP和生成器中的参数数量。pose embedding网络G在微调期间也保持固定。
Disentanglement of pose and identity
(1)pose提取网络capacity不足
(2)使用pose augmentation
(3)background segmented out
使用如上三个方法,模型会解开pose以及identity之间的disentanglement
Implementation details
pose encoder使用MobileNetV2,identity encoder使用ResNeXt-50(32×4d),
d
p
d_{p}
dp和
d
i
d_{i}
di分别是256和512.