本周总结
这周主要阅读了一篇人体运动生成综述(2307.10894] Human Motion Generation: A Survey (arxiv.org))。
疑问
由于是第一次接触运动生成领域,因此我预先设想了很多问题,希望可以从论文中得到答案。
- 人体运动生成的使用场景是什么?
text-driven
和audio-driven
都是为了传递符合预期的信息,它们之间有什么区别?- 运动生成与图像生成、视频生成之间有什么区别和联系?
- 运动生成与通过强化学习学习动作有什么区别?
- 评价运动生成质量的标准有哪些儿?
- 人体运动数据集的形式是什么样的?
- ……
收获
以下是结合以上问题与两篇论文,我学习到的内容
使用场景
人体运动生成可以用在电影制作、VR 游戏(刀剑领域未来可期)、人机交互(机器人根据特定指令生成并进行相应的动作,似乎会涉及到大量的多模态交互)、数字人(元宇宙,数字资产未来趋势)
数据
运动数据的表现形式主要有两种:基于关节点的数据表示和基于旋转角的数据表示。
- 基于关节点:以人体骨骼关键节点的坐标(二维 or 三维,二维如下图所示)记录每一帧的动作。通过记录节点的坐标变化来记录时序的运动数据。
- 优势:可解释性高,关键点坐标提取方式简单
- 劣势:表达能力有限,无法记录身体形状和肢体扭曲信息的细节

- 基于旋转角:使用关节角度表示人体姿态,即在分层结构中,身体部位或节段相对于其上一级的旋转角度。通过记录关节角度的变化来记录时序动作序列。

数据集制作方法:
- 基于标记:追踪标记轨迹,精确度高
- 无标记:多摄像视角合成,精确度较低,但更方便
- 伪标记:使用现用的人体姿态评估算法,例如 OpenPose,误差较大
- 人工标记:质量高,但成本昂贵、耗时高
生成方法
- 基于 GAN:训练不稳定、不容易收敛、模型坍塌
- 基于 VAE:后验崩溃
- 基于 NF计算成本高、训练困难
- 基于 Diffusion:计算成本高、速度慢
- 基于运动图
条件生成
graph LR
o(Condition)
o1(Text-Conditioned)
o11(Action-to-Motion)
o111(根据特定动作类别生成动作序列)
o12(Text-to-Motion)
o121(根据自然语言描述生成动作序列)
o122(挑战:Zero-shot、复杂文本)
o2(Audio-Conditioned)
o21(Music-to-Dance)
o211(根据音乐生成对应舞蹈动作)
o212(挑战:错误累积、一对多映射)
o22(Speech-to-Gesture)
o221(根据语音生成手势动作)
o3(Scene-Conditioned)
o31(以目标为导向,考虑环境,生成动作)
o32(预测目标位置,规划路径,填充并细化动作)
o --- o1
o --- o2
o --- o3
o1 --- o11
o1 --- o12
o11 --- o111
o12 --- o121
o12 --- o122
o2 --- o21
o2 --- o22
o21 --- o211
o21 --- o212
o22 --- o221
o3 --- o31
o3 --- o32
style o fill:green,stroke:green,stroke-width:1px,color:white
style o1 fill:#f22816,stroke:#f22816,stroke-width:1px,color:white
style o2 fill:#f2b807,stroke:#f2b807,stroke-width:1px,color:white
style o3 fill:#233ed9,stroke:#233ed9,stroke-width:1px,color:white
style o11 fill:#fcd4d0,stroke:#fcd4d0,stroke-width:1px
style o12 fill:#fcd4d0,stroke:#fcd4d0,stroke-width:1px
style o111 fill:#fcd4d0,stroke:#fcd4d0,stroke-width:1px
style o121 fill:#fcd4d0,stroke:#fcd4d0,stroke-width:1px
style o122 fill:#fcd4d0,stroke:#fcd4d0,stroke-width:1px
style o21 fill:#fcf1cd,stroke:#fcf1cd,stroke-width:1px
style o22 fill:#fcf1cd,stroke:#fcf1cd,stroke-width:1px
style o211 fill:#fcf1cd,stroke:#fcf1cd,stroke-width:1px
style o212 fill:#fcf1cd,stroke:#fcf1cd,stroke-width:1px
style o221 fill:#fcf1cd,stroke:#fcf1cd,stroke-width:1px
linkStyle 0 stroke:#f22816,stroke-width:5px;
linkStyle 1 stroke:#f2b807,stroke-width:5px;
linkStyle 2 stroke:#233ed9,stroke-width:5px;
linkStyle 3 stroke:#f22816,stroke-width:3px;
linkStyle 4 stroke:#f22816,stroke-width:3px;
linkStyle 8 stroke:#f2b807,stroke-width:3px;
linkStyle 9 stroke:#f2b807,stroke-width:3px;
linkStyle 13 stroke:#233ed9,stroke-width:3px;
linkStyle 14 stroke:#233ed9,stroke-width:3px;
音频具备的信息比文本更加丰富,除了与文本信息相同的语义信息之外,音频中还包括韵律、节拍、音调、情感等多种信息。这些要素为生成的动作序列提供了更丰富的上下文,对生成的动作序列约束更多。
评估指标
-
保真度:从自然度、平滑度、可信度等方面评估
- 生成动作与 Ground-truth 之间计算距离保证准确度。但是 Ground-truth 只有一个,无法提供全面的评估。
- 通过比较生成的运动流形和真实流形之间的相似度来衡量自然度。在运动空间和特征空间中计算。
- 确保生成的运动符合物理规则,尤其是脚与地面相互作用的物理规则。
-
多样性:避免动作重复
- 单个运动序列内:计算差异和冻结率,防止动作冻结
- 不同运动序列间:计算覆盖率和多模态。
-
条件一致性
-
文本—动作:计算多模态空间中的距离
-
音频—动作:计算节拍、语义一致性
-
场景—动作:计算非碰撞得分、人与场景的接触
-
-
用户偏好
思考(胡思乱想)
或许是 AIGC 的发展路程大抵类似,我发现生成图片与生成动作的方法都差不多,从早期使用 VAE/VA-VAE
在潜空间中学习生成目标的特征分布,再到使用 GAN
模型通过对抗训练提高生成结果的质量,然后到使用 Diffusion 通过逐步去噪的方式生成结果,提高多样性。其中 CLIP
模型的发展,统一了多模态特征的空间,进一步提升了条件与生成结果之间的一致性。因此对于生成动作的某些挑战,可以参考文生图的方法。
例如,如何提高文本、音频条件与生成动作之间的一致性,可以参考 OpenAI 的 DALLE-3
做法,将文本输入 GPT-4
中,对提示词进行上采样,丰富文本内容,在输入到生成模型中生成动作序列;或者参考 SD3
的做法,使用多个文本编码器获得多个条件嵌入,将它们拼接在一起作为最终的条件控制……至于如何提高生成动作序列的平滑度、自然度,应该可以参考文生视频的方法。
当然以上都是纸上谈兵,方法是否可以迁移需要进行后续的实验验证。
下周计划(粗略版)
这周对动作生成的发展、方法有了粗略的认识,但很多疑问在这篇综述中还是没得到解答。下周我将至少精读一篇动作生成的论文,走一下整个流程。