Doubiiu / CodeTalker

[CVPR 2023] CodeTalker: Speech-Driven 3D Facial Animation with Discrete Motion Prior
MIT License
531 stars 58 forks source link

is able to driven any given meshes? #3

Closed lucasjinreal closed 1 year ago

lucasjinreal commented 1 year ago

For instance, given a mesh of metahuman face mesh, does it able to driven?

Doubiiu commented 1 year ago

Sorry, I am not familiar with metahuman (not sure about its topology). Generally speaking, there are two ways to allow us to drive a neutral mesh template. 1) if it has a consistent topology with FLAME or BIWI-style (we trained in this project), we can directly drive them with CodeTalker. 2) if not. We may find a way to convert it to those topologies we used (FLAME or BIWI-style), drive it, and convert it back. Of course, you may train your own speech2mesh methods (CodeTalker, FaceFormer, etc.) on new data to adapt to new neutral template topologies.

kendo6666 commented 1 year ago

@Doubiiu 是不是在render.py中,把FLAME_sample.ply替换为自己的模型就可以驱动了?

Doubiiu commented 1 year ago

@kendo6666 不是的,如果想要pretrained的model来驱动任意neutral face的话,原则上要新的neutral face的topology要和训练的一样,因为这样模型才知道相应的语音应该驱动哪些顶点。如果topology不一致的话,需要重新训练模型。

kendo6666 commented 1 year ago

@Doubiiu 你的意思是说它不能驱动新的的人物头部模型?而必须要先设计模型以及和语音对应的面部动画,再将其做为数据集来重新训练模型?如果真这样做,岂不是成了先有鸡还是先有蛋的循环了^o^

Doubiiu commented 1 year ago

@kendo6666 是不能驱动新的拓扑结构的人物头部模型,模型是学习某种映射,这个映射的面部动画数据集是用设备采集下来的(比如VOCASET和BIWI),然后模型用于驱动与VOCAST和BIWI数据集相同的拓扑结构的neutral face(neutral face可以采集或者用3D重建生成)。并不是一个循环问题,生成的数据“通常”不能作为模型学习的数据。

kendo6666 commented 1 year ago

@Doubiiu 非常感谢你的耐心回复。我可能因为其他项目的原因,有一些先入为主的错误想法。那我可不可以理解为codetalker的应用场景是先通过面捕或其他手段对自然人采集相关的面部数据,加上对应语音数据进行训练,然后对该自然人的人脸进行3D建模,以得到和训练相同的网络拓朴,然后用新的语音数据进行推理,这样理解对吗?

Doubiiu commented 1 year ago

@kendo6666 你的理解是对的,并且适用于现在基本所有mesh-based speech-driven 3D facial animation 的工作。补充一点,以FLAME 拓扑结构为例,neutral face也可以通过调整FLAME系数生成,也可以通过从现有的single image或video中3d face reconstruction的方式获得,如DECA

kendo6666 commented 1 year ago

@Doubiiu 非常感谢你们杰出的工作!!! 那如果是一个全新设计的3D的虚拟数字人,没有现实世界上对应的人脸(或者说没有对应的相同拓扑的训练数据),有可能使用code talker吗?

Doubiiu commented 1 year ago

@kendo6666 我觉得这是有可能的,比如把这个新的拓扑结构的人脸转换成一些通用数据集中的拓扑结构,相当于要做到一个双向映射,驱动完再转回原来的拓扑结构,总之有点麻烦且效果没法得到保证。

kendo6666 commented 1 year ago

明白了,非常感谢耐心回复!我按你说的方法准备自定义义数据训练模型,先试一下。

int33 commented 4 months ago

@kendo6666 你的理解是对的,并且适用于现在基本所有mesh-based speech-driven 3D facial animation 的工作。补充一点,以FLAME 拓扑结构为例,neutral face也可以通过调整FLAME系数生成,也可以通过从现有的single image或video中3d face reconstruction的方式获得,如DECA

打扰了,想问下目前存在有Audio到FLAME参数这样映射的工作吗?