Bailando: 3D Dance Generation by Actor-Critic GPT with Choreographic Memory
音乐到舞蹈框架: 1) codebook学习有意义的3D pose 序列. 2)GPT组合这些unit为有流利的, 与音乐相关的动作, 3) 节拍对齐奖励函数.
介绍
基于音乐的3D动作舞蹈生成有潜力, 实现面临挑战: 1)空间约束, 不是所有动作适合舞蹈, 对动作要求, 2)与音乐和谐.
当前方法直接在高维连续空间生成3D序列, 可能生成不标准的舞蹈, 也有方法截取真实舞蹈的片段, 费时费力.
介绍Bailando, 为了应对空间挑战, 介绍Choreographic Memory, 用VAE提取dance units, 为了多样性, 分上下身体表示.
为了应对空间挑战, 介绍motion GPT, 交叉注意力保持上下身体的一致性 , actor-critic策略保持节拍对齐.
方法
3D Pose VQ-VAE with Choreographic Memory
dance 位置. 如上图所示, , 编码后为, 有一个时间下采样率d, , 通过 找与codebook中最近的序列,
组合式人类pose表示. 训练独立的VQ-VAE, 上下身体各一个codebook, 正则化位置, 预测全局移动速度.
训练VQ-VAE. 和codebook一起训练, 直接看损失函数,
是关于速度加速度的损失, 后面两项是关于codebook的损失, sg表示"stop gradient"
Cross-Conditional Motion GPT
看完全文才明白, 这个图很容易让人误解, 在这一节看成一个完整的Transformer就行, 输入是0-(t-1), 预测1-t, 使用causal attention, 损失函数是交叉熵损失.
Actor-Critic Learning
motion GPT很好训练, 但是因为监督目标是code数字不可微, 不太可能计算定量的约束条件.
是6层transformer, 称为"state network", 是6层transformer\softmax, 称为"policy making network", 是从的一个新的分支, 3层transformer, 称为"critic value network".
完整的公式可以去看原文, 我讲一下我感性的理解. 的输出我们作为State, 我们称为Actor 网络, 我们称为Critic 网络, 注意看Reword, Actor的输出, 我们有一个自己的方法计算一个Reword, 问题是这个过程不可微, 我们没办法直接用梯度下降算法直接指导模型改进, 因此就有了Critic网络, 它的目的是输出和Reword的输出尽可能接近, Critic是可微的, 用它的输出可以指导Actor训练, Actor和critic 的训练是交替进行的, 可以把TD-Error那看成一个开关, 要训练Critic就走Actor->R->TD-Error->Critic这条通路, 要训练Actor就走Actor->->TD-Error->Critic这条通路.
实验
数据集用的AIST++ 数据集, codebook的上下身体N=512, 时间下采样率d=8. motion GPT的channel维度为768, 12个头, 0.1的dropout率, 结构和Andrej Karpathy的miniGPT相同. 音乐特征用Librosa提取, 一个438维度, 通过一个linear transform映射到与GPT相同维度, 在单V100 GPU上训练了三天.
评估指标为舞蹈质量, 动作多样性和音乐节奏一致性, 与现有方法的比较, Bailando 在所有指标上均优于现有方法. 用户研究表明Bailando 生成的舞蹈在视觉上更稳定, 更具多样性, 且与音乐节奏更一致. 消融实验, 验证了编舞记忆, 交叉条件因果注意力层和 Actor-Critic 学习的有效性. 编舞记忆的可解释性, 每个量化单元代表一个独特的舞蹈姿势, 解码器可以将不同单元组合成流畅的舞蹈动作.
结论
Bailando 框架有效地解决了 3D 舞蹈生成的空间和时间挑战, AIST++ 数据集上取得了最先进的性能, 生成的舞蹈具有可解释性, 编舞过程变得透明.
感受
Bailando目前应该还是music2dance任务sota模型吧, Actor-Critic方法有效解决了某些指标不可微的问题, codebook+transform的组合正在成为处理这一类问题的主流方法, 很有启发性的一篇文章.