My App
Paper/dance

Bailando: 3D Dance Generation by Actor-Critic GPT with Choreographic Memory

音乐到舞蹈框架: 1) codebook学习有意义的3D pose 序列. 2)GPT组合这些unit为有流利的, 与音乐相关的动作, 3) 节拍对齐奖励函数.

Bailando-intro

介绍

基于音乐的3D动作舞蹈生成有潜力, 实现面临挑战: 1)空间约束, 不是所有动作适合舞蹈, 对动作要求, 2)与音乐和谐.

当前方法直接在高维连续空间生成3D序列, 可能生成不标准的舞蹈, 也有方法截取真实舞蹈的片段, 费时费力.

介绍Bailando, 为了应对空间挑战, 介绍Choreographic Memory, 用VAE提取dance units, 为了多样性, 分上下身体表示.

为了应对空间挑战, 介绍motion GPT, 交叉注意力保持上下身体的一致性 , actor-critic策略保持节拍对齐.

方法

Bailando-overview

3D Pose VQ-VAE with Choreographic Memory

dance 位置. 如上图所示, PRT×(J×3)P \in \mathcal{R}^{T \times (J \times 3)}, 编码后为eRT×Ce \in \mathcal{R}^{T' \times C}, 有一个时间下采样率d, T=T/dT' = T / d, 通过 eq,i=argminzjZeizj\mathbf{e}_{q,i} = \arg\min_{\mathbf{z}_j \in \mathcal{Z}} \left\| \mathbf{e}_i - \mathbf{z}_j \right\| 找与codebook中最近的序列, eqRT×Ce_q \in \mathcal{R}^{T' \times C}

组合式人类pose表示. 训练独立的VQ-VAE, 上下身体各一个codebook, 正则化位置, DVD_V预测全局移动速度.

训练VQ-VAE. 和codebook一起训练, 直接看损失函数,

LVQ=Lrec(P^,P)+sg[e]eq+βesg[eq]\mathcal{L}_{VQ} = \mathcal{L}_{rec}(\hat{P}, P) + \left\| \mathrm{sg}[\mathbf{e}] - \mathbf{e}_q \right\| + \beta \left\| \mathbf{e} - \mathrm{sg}[\mathbf{e}_q] \right\|

Lrec(P^,P)\mathcal{L}_{rec}(\hat{P}, P)是关于速度加速度的损失, 后面两项是关于codebook的损失, sg表示"stop gradient"

Cross-Conditional Motion GPT

Bailando-gpt

看完全文才明白, 这个图很容易让人误解, fs,fa,fvf_s, f_a, f_v在这一节看成一个完整的Transformer就行, 输入是0-(t-1), 预测1-t, 使用causal attention, 损失函数是交叉熵损失.

Actor-Critic Learning

motion GPT很好训练, 但是因为监督目标是code数字不可微, 不太可能计算定量的约束条件.

fsf_s是6层transformer, 称为"state network", faf_a是6层transformer\softmax, 称为"policy making network", fvf_v是从fsf_s的一个新的分支, 3层transformer, 称为"critic value network".

完整的公式可以去看原文, 我讲一下我感性的理解. fsf_s的输出我们作为State, faf_a我们称为Actor 网络, fvf_v我们称为Critic 网络, 注意看Reword, Actor的输出, 我们有一个自己的方法计算一个Reword, 问题是这个过程不可微, 我们没办法直接用梯度下降算法直接指导模型改进, 因此就有了Critic网络, 它的目的是输出和Reword的输出尽可能接近, Critic是可微的, 用它的输出可以指导Actor训练, Actor和critic 的训练是交替进行的, 可以把TD-Error那看成一个开关, 要训练Critic就走Actor->R->TD-Error->Critic这条通路, 要训练Actor就走Actor->LACL_{AC}->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的组合正在成为处理这一类问题的主流方法, 很有启发性的一篇文章.

On this page