deep-motion-editing icon indicating copy to clipboard operation
deep-motion-editing copied to clipboard

针对任意bvh模型的retargeting

Open cjlong1213 opened this issue 4 years ago • 8 comments

hi,PeiZhuo,感谢你们非常棒的工作,我尝试运行训练和测试代码,都可以正常运行,当我尝试使用第三方bvh模型遇到以下问题: 1)如果要对第三方模型bvh重定向,必须重新训练?训练的话第三方模型的运动数据也要跟Mixamo一样吗,我的意思是要准备107个不同动作的bvh文件?第三方模型重定向的基本流程是怎样的?

2)intra_structure和cross_structure是如何定义的?如果我仅仅对不同的humanoid 模型重定向是不是可以理解为intra_structure?

3)输入模型先会做精简预处理,重定向后是简化后的模型,是不是还少了一步把inference出来的result结果恢复到简化前的模型上,这一步可以用skeleton unpooling 来实现吗?

谢谢!盼回复!

cjlong1213 avatar May 18 '21 12:05 cjlong1213

  1. 如果需要的bvh和训练集中的bvh拓扑结构相同,则不需要重新训练。对于自定义骨骼的训练过程在这里有描述。数据集最好尽量丰富,不需要一定是107个文件

  2. 是按照骨骼的拓扑结构定义的。对相同拓扑结构之间的retargeting是intra,否则是cross

  3. 简化的模型主要是手指,被简化的关节不参与retargeting,这些关节通过copy joint rotation就可以解决,不需要unpooling等操作

PeizhuoLi avatar May 19 '21 01:05 PeizhuoLi

非常高兴收到你的及时回复 # @PeizhuoLi 👍 还有一些问题想请教一下: 1)使用默认的数据集训练非常缓慢,在Linux服务器(8卡,Tesla P100,8 * 16GB)上大约48个小时跑了约2000个epoch,是不是哪里设置有问题? 2)我想用预训练模型测试第三方bvh模型的重定向效果,由于我测试的bvh拓扑结构和已训练的模型都不同,我尝试把我的bvh拓扑结构手动修改为BigVegas(Skeleton type = 10)拓扑结构,在Mixamo文件夹下新建test文件夹,把修改后的bvh文件(无运动信息)命名为Dancing Running Man.bvh,同时拷贝该文件到std_bvhs文件夹下,运行 example('Aj', 'test', 'Dancing Running Man.bvh', 'intra', './examples/intra_structure') 运行过程无异常,result.bvh并不是期望的结果 image 左边是Aj,中间是BigVegas,右边是我们按照BigBegas修改的bvh模型 这可能是什么原因引起的?我理解如果是相同的拓扑结构是不需要重新训练的对吧?

谢谢!

cjlong1213 avatar May 19 '21 09:05 cjlong1213

  1. 我们的原始代码不支持多卡并行;可以检查一下显卡利用率,一般应该在80%以上。

  2. 我们使用了per-character的normalization,需要目标角色的一些运动数据来计算对应的mean和variance。可能是这里出了问题

PeizhuoLi avatar May 20 '21 02:05 PeizhuoLi

@PeizhuoLi 我更新了和测试模型接近的mean和variance,重定向在我的bvh模型上正常了👍 还有几个问题想请教一下: 1)这里的mean和variance是训练过程中对不同模型分类用的对吧?test的时候作为不同模型的索引输入; 2)我测试了几组第三方的bvh模型(都是人形),发现不同轴向(bvh的静态部分,T-pose)的模型重定向结果会不同,请问训练网络对bvh模型的T-pose轴向有要求吗?是否需要和训练模型保持一致? 3)我看到bvh_parser.py代码中对joints排列有一些要求, Please start with root joint, then left leg chain, right leg chain, head chain, left shoulder chain and right shoulder chain. 如果用我自己的bvh数据训练,这个条件是必须的吗?一般情况下bvh的格式是从Spine->LeftUpLeg->RightUpLeg排列的,是否要把顺序修改为LeftUpLeg->RightUpLeg->Spine?

谢谢!

cjlong1213 avatar May 21 '21 01:05 cjlong1213

  1. 这里的mean和variance是用于做normalization的,属于一个常用的训练trick,没有用于分类

  2. 最好保持一致的T-pose,包括轴向以及各关节

  3. 只要是统一的顺序就可以。并且不需要修改bvh文件中关节的顺序,只需要修改代码中对应的list的排列顺序就可以

PeizhuoLi avatar May 23 '21 11:05 PeizhuoLi

@PeizhuoLi

我把我的骨架及motion数据精简后,想直接用公开的预训练模型跑Retargeting结果,即把我自有的舞蹈数据bvh(带motion)重定向到BigVegas模型上去,测试发现不能直接运行,程序会进入get height -> topology -> parents的访问死循环,通过修改自有舞蹈数据的拓扑结构,如下图所示,右边的是我们数据模型的拓扑结构,左边是数据集内的拓扑结构,拓扑结构相同后,能够正常跑重定向的结果。

image

我的问题是: 1)使用预训练模型对输入bvh的拓扑结构有要求吗?不重新训练的话是不是要保证和既有训练数据的拓扑结构相同?拓扑结构会被网络以某种方式记住吗? 2)由于我们的舞蹈数据动作幅度较大(韩舞),使用预训练网络Retargeting效果不是很理想,这个可能是什么原因?把我们的舞蹈数据加入训练能够改善吗?我担心的是并不是所有模型都有(韩舞)的motion数据,而原始训练及各个模型的motion都是相同的 3)有没有好的bvh编辑工具推荐,我只了解到bvhacker,有没有支持可以修改拓扑的工具

谢谢!

cjlong1213 avatar May 29 '21 05:05 cjlong1213

  1. 不同的拓扑结构需要重新训练,构造网络的时候直接依赖拓扑结构,所以会被记住

  2. 效果不理想有很多因素,例如rest pose差距太大(姿势以及比例);加入训练集应该能提升性能;

  3. 我个人用代码编辑bvh

PeizhuoLi avatar Jun 01 '21 15:06 PeizhuoLi

非常高兴收到你的及时回复 # @PeizhuoLi 👍 还有一些问题想请教一下: 1)使用默认的数据集训练非常缓慢,在Linux服务器(8卡,Tesla P100,8 * 16GB)上大约48个小时跑了约2000个epoch,是不是哪里设置有问题? 2)我想用预训练模型测试第三方bvh模型的重定向效果,由于我测试的bvh拓扑结构和已训练的模型都不同,我尝试把我的bvh拓扑结构手动修改为BigVegas(Skeleton type = 10)拓扑结构,在Mixamo文件夹下新建test文件夹,把修改后的bvh文件(无运动信息)命名为Dancing Running Man.bvh,同时拷贝该文件到std_bvhs文件夹下,运行 example('Aj', 'test', 'Dancing Running Man.bvh', 'intra', './examples/intra_structure') 运行过程无异常,result.bvh并不是期望的结果 image 左边是Aj,中间是BigVegas,右边是我们按照BigBegas修改的bvh模型 这可能是什么原因引起的?我理解如果是相同的拓扑结构是不需要重新训练的对吧?

谢谢!

I tried this process you mentioned, but it seems there are no mean and var. How did you manage to run it successfully? tks

zzk88862 avatar Oct 17 '23 06:10 zzk88862