数字人 PeraonaTalk 解读与复现(一)

axriv

project

overall

本文的整体思路是利用 3dmm 来指导嘴型,使用 cross attention 完成从音频特征到 3dmm mesh 的转化,在利用 cross attention 完成从原始图像和 mesh 到高保真的新生成的图像的过程。

创新点

1. 提出一个基于 attention 的两阶段高保真且 id 还原的视觉配音框架。

2. 使用 3dmm 作为中间表示,从中提取说话风格,并将说话风格注入到音频特征中,以实现风格化的驱动。

3. 设计了一个双 attention 生成器,分别是面部 attention 和嘴巴 attention,面部和嘴巴可以分开渲染,这样可以得到更好的画质细节。

主观上感觉 2 和 3 是重点,其中 3 更值得学习。

相关工作

个人推荐两个我认为比较相关的工作,当然,效果都没这个(的 demo)好。

1. dinet axriv github

2. IP_LAP axriv github

实现细节

和上面创新点一样,分两块,一块是音频到 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 顶点,用 eq?E_%7Bvtx%7D(一个全连接网络) 把顶点坐标映射到 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 顶点,经过 eq?E_%7Bvtx%7D 编码,记为 eq?vtx%5E%7Btmp%7D

2. 第一个 cross attention,使用 stylized audio feature 作为 Q,eq?vtx%5E%7Btmp%7D 作为 KV。

3. 基于上个输出,接几个 self attention

4. 最后,使用 eq?D_%7Bvtx%7D (一个全连接层) 把参数映射到 mesh 顶点维度,并渲染出 mesh。

        值得注意的是,渲染 mesh 时,仅下半边脸取生成,上半边脸使用原始的顶点。

loss

这里没有提 loss,猜测和上面 3dmm 估计那里差不多

模块小结

这里不是非常理解,为什么要单独训练一个 3dmm 模型,还没有提从 style-awear audio feature 到 最终 mesh 的 loss。

Face Render

输入输出

本模块输入是 eq?T_%7Bface%7D 帧 target 的 mesh, eq?T_%7Blip%7D 帧的嘴巴 reference 和对应的 eq?T_%7Blip%7D 帧 mesh,eq?T_%7Bface%7D 的面部 reference 和对应的 eq?T_%7Bface%7D 帧 mesh。

输出是生成的最终的人脸图像。

Encode

两个 Encoder,分别是 eq?E_%7Bref%7D用于编码 mesh,eq?E_%7Btex%7D用于编码 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 计算嘴巴张合大小。

欢迎补充与指正

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值