overall
本文的整体思路是利用 3dmm 来指导嘴型,使用 cross attention 完成从音频特征到 3dmm mesh 的转化,在利用 cross attention 完成从原始图像和 mesh 到高保真的新生成的图像的过程。
创新点
1. 提出一个基于 attention 的两阶段高保真且 id 还原的视觉配音框架。
2. 使用 3dmm 作为中间表示,从中提取说话风格,并将说话风格注入到音频特征中,以实现风格化的驱动。
3. 设计了一个双 attention 生成器,分别是面部 attention 和嘴巴 attention,面部和嘴巴可以分开渲染,这样可以得到更好的画质细节。
主观上感觉 2 和 3 是重点,其中 3 更值得学习。
相关工作
个人推荐两个我认为比较相关的工作,当然,效果都没这个(的 demo)好。
实现细节
和上面创新点一样,分两块,一块是音频到 3dmm geometry;另一块是 3dmm mesh + ref Image 到final face。
Audio To Geometry
输入输出
本模块的输入是 Audio,输出是 style-aware 的 Face mesh
Audio Encode
使用 hubert 对音频编码,N(s)音频输出特征是 (Nx50) x 1024
Face 3dmm estimate
使用现成的 3dmm 模型获取输入人脸的以下参数信息,作为 GT,训练一个 3dmm
(这里不是很明白,为啥要重新训练一个)
alpha: ID 信息或者人脸 shape
beta: 表情信息,控制表情,包括嘴巴,下面叫 exp
pose: 人脸姿态
loss
1. L2 范数 loss
alpha 与 mean alpha 的 loss
beta 和 pose 与对应 gt 的 loss
2. 时序 loss
gt 关键点帧差与 pred 关键点帧差计算 L2 范数 x 1
beta 和 pose 经过拉普拉斯算子后 L2 范数和 x 0.2
Model
style
使用 ref gt exp 与置 0 的 alpha 和 pose 渲染出人脸 mesh 顶点,用 (一个全连接网络) 把顶点坐标映射到 hubert 输出的 dim,再计算输出的 mean 和 std,把 mean 和 std 拼起来,再过一个全连接层映射回 hubert 特征 dim,就得到了 style。
特征混合
使用一个 cross attention,其中,Q 是 style,KV 是音频编码特征。
Style-Awear Feats To Coeff
1. 使用 gt 的 alpha(mean) 与置零的 beta 和 pose 生成 mesh 顶点,经过 编码,记为
。
2. 第一个 cross attention,使用 stylized audio feature 作为 Q, 作为 KV。
3. 基于上个输出,接几个 self attention
4. 最后,使用 (一个全连接层) 把参数映射到 mesh 顶点维度,并渲染出 mesh。
值得注意的是,渲染 mesh 时,仅下半边脸取生成,上半边脸使用原始的顶点。
loss
这里没有提 loss,猜测和上面 3dmm 估计那里差不多
模块小结
这里不是非常理解,为什么要单独训练一个 3dmm 模型,还没有提从 style-awear audio feature 到 最终 mesh 的 loss。
Face Render
输入输出
本模块输入是 帧 target 的 mesh,
帧的嘴巴 reference 和对应的
帧 mesh,
的面部 reference 和对应的
帧 mesh。
输出是生成的最终的人脸图像。
Encode
两个 Encoder,分别是 用于编码 mesh,
用于编码 ref image
每个 Encoder 都是轻量级,两层下采样即可(这块可以直接参考 LivePortrait 的 Appearence Encoder)
Encode 后,target mesh feature shape 是 c x h/4 x w/4, reshape 成 (h/4xw/4) x cEncode 后,ref mesh/img feature shape 是 T x c x h/4 x w/4, reshape 成 (Txh/4xw/4) x c
Texture Sampling
使用 cross attention,Q 是 target mesh 的 feature, K 是 ref mesh 的 feature, V 是 ref image 的feature,输出 texture feature
使用 cross attention 是为了计算不同 mesh 不同位置之间的相关性,QK 需要加入 pos embedding
Dual-Attention
上述过程可以分为两个分支,一个是 lip attention,一个是 face attention。
个人认为,lip attention 能有效解决数字人生成中的牙齿不稳定的问题。
此时,还要额外进入一个 mask,使用这个 mask 来融合 lip feature 和 face feature
Decode
与 Encoder 相对,两层上采样卷积即可。
在 face feature 输入 decoder 之前,把 mesh 拼接进去。
reference 选取
1. 面部 ref 选用和 target 比较近的帧,这样可以获得相似光照的结果,帧数取 5,推理时,取当前帧前后 5 帧即可。
2. 嘴部 ref ,训练时整个视频中随机取,取 5 帧,inference 时,按照嘴巴张合排序, 取 25 帧。
3. 嘴巴张合的计算,使用 gt alpha 和 beta 与置零的 pose 计算嘴巴张合大小。
欢迎补充与指正