舞蹈是现代艺术文化, 该任务在音乐视频, 现场表演和沉浸式媒体等创意产业有需求. 当前方法主要生成关节点序列, 输出不直观, lack support for animating specific individuals. DabFusion能生成视频, 但是分辨率低, 背景不够灵活, 真实世界即使同一段音乐可能对应不同动作风格.
方法和实验指标改进在具体章节再看.
视频生成领域介绍了2D-UNet, 3D-UNet, text-to-image+时间层. dance领域介绍的大都是23年以前的工作了, 2D动作生成 -> 3D动作生成(LSTM, GAN, Transformers) -> 两篇视频生成的工作.
上图是推理阶段的流程, 注意到音乐特征用music encoder编码, 同时用一个分类器提取了音乐的类型, 一旦音乐的类型确定, 舞蹈的类型就确定了.
Latent Diffusion Models. 数据降维,前向传播, 反向传播这些.
3D Dance Sequence. SMPL是一个参数化的3D人体模型, 输入θ ∈ R 24 × 3 × 3 \theta \in \mathbb{R}^{24 \times 3 \times 3} θ ∈ R 24 × 3 × 3 和β ∈ R 10 \beta \in \mathbb{R}^{10} β ∈ R 10 (pose参数和形状参数), 输出为3D MeshM ∈ R 3 × N M \in \mathbb{R}^{3 \times N} M ∈ R 3 × N (其中 N = 6890 N = 6890 N = 6890 个顶点), Body Joints J ∈ R 3 × k J \in \mathbb{R}^{3 \times k} J ∈ R 3 × k (通过顶点权重矩阵 W ∈ R N × k W \in \mathbb{R}^{N \times k} W ∈ R N × k 从mesh回归得到关节位置)
原始SMPL使用axis-angle表示旋转, 会引入Discontinuities(不连续性), Singularities(奇异点), Wrap-around(环绕问题), Gimbal lock(万向节锁死).
解决方案: 采用6D rotation representation, 即用6个参数表示每个关节的旋转(而非3个), 这种表示在旋转空间中是连续的, 更适合神经网络学习.
最终表示 x ∈ R 151 x \in \mathbb{R}^{151} x ∈ R 151 , 由三部分组成:
组成部分 维度 说明 6D rotation 24 × 6 = 144 24 \times 6 = 144 24 × 6 = 144 24个关节的6D旋转 Root translation 3 3 3 根节点的全局位移 Foot contact 4 4 4 左右脚的heel和toe的二值接触标签
总计: 144 + 3 + 4 = 151 144 + 3 + 4 = 151 144 + 3 + 4 = 151 维
旋转表示的四个经典问题
问题本质: 在axis-angle表示中,当旋转角度接近 2 π 2\pi 2 π 时,会突然"跳回"到 0 0 0 。
例子: 假设一个关节从 359 ° 359° 359° 继续旋转到 361 ° 361° 361° ,在表示上会突变为 1 ° 1° 1° 。对神经网络来说,输入的微小变化(359 ° → 361 ° 359° \to 361° 359° → 361° )导致输出的剧烈变化(359 → 1 359 \to 1 359 → 1 ),这破坏了函数的连续性,使网络难以学习。
问题本质: 在某些特定配置下,参数空间出现"塌缩",不同的参数值对应同一个旋转。
例子: 在axis-angle中,当旋转角度 θ = 0 \theta = 0 θ = 0 时,旋转轴可以是任意方向(因为不旋转),导致无穷多组参数 (任意轴, 0) 都表示同一个恒等旋转。这会让优化过程在奇异点附近变得不稳定。
问题本质: 旋转 θ \theta θ 和旋转 θ + 2 π \theta + 2\pi θ + 2 π 物理上完全相同,但数值表示不同。
例子: 30 ° 30° 30° 和 390 ° 390° 390° 表示同一个旋转状态,但在计算loss时,网络可能认为它们差距很大(∣ 390 − 30 ∣ = 360 |390-30|=360 ∣390 − 30∣ = 360 ),导致错误的梯度方向。在时序动作预测中,这会导致预测"绕远路"。
问题本质: 这主要是Euler angles的问题。当某个旋转轴旋转到特定角度时,两个旋转轴会"重合",丢失一个自由度。
例子(以ZYX顺序为例):
当Y轴旋转 90 ° 90° 90° 时,X轴和Z轴变得平行
此时无论怎么调整X和Z的角度,效果都一样——只能绕一个方向旋转
原本3个自由度变成了2个,某些旋转无法表达
6D表示本质上是旋转矩阵的前两列(3 × 2 = 6 3 \times 2 = 6 3 × 2 = 6 个参数),通过Gram-Schmidt正交化恢复完整的 3 × 3 3 \times 3 3 × 3 旋转矩阵。
特性 Axis-angle / Euler 6D表示 连续性 ✗ 有跳变 ✓ 连续映射 奇异点 ✗ 存在 ✓ 无奇异点 唯一性 ✗ 多对一 ✓ 接近一对一
这就是为什么在需要神经网络预测旋转的任务(如dance generation)中,6D表示更受青睐。
除了使用Jukebox提取, 自己训了一个音乐编码器MotionTune, 去看了CLAP的原文, 这里的创新在于针对舞蹈生成任务做领域特定的音乐-动作对齐, 这里提供的损失函数为:
L = 1 2 N ∑ i = 1 N ( log exp ( E i m ⋅ E i d / τ ) ∑ j = 1 N exp ( E i m ⋅ E j d / τ ) + log exp ( E i d ⋅ E i m / τ ) ∑ j = 1 N exp ( E i d ⋅ E j m / τ ) ) \mathcal{L} = \frac{1}{2N} \sum_{i=1}^{N} \left( \log \frac{\exp(E_i^m \cdot E_i^d / \tau)}{\sum_{j=1}^{N} \exp(E_i^m \cdot E_j^d / \tau)} + \log \frac{\exp(E_i^d \cdot E_i^m / \tau)}{\sum_{j=1}^{N} \exp(E_i^d \cdot E_j^m / \tau)} \right) L = 2 N 1 i = 1 ∑ N ( log ∑ j = 1 N exp ( E i m ⋅ E j d / τ ) exp ( E i m ⋅ E i d / τ ) + log ∑ j = 1 N exp ( E i d ⋅ E j m / τ ) exp ( E i d ⋅ E i m / τ ) )
CLAP中的损失函数:
L = 0.5 ⋅ ( ℓ t e x t ( C ) + ℓ a u d i o ( C ) ) \mathcal{L} = 0.5 \cdot (\ell_{text}(C) + \ell_{audio}(C)) L = 0.5 ⋅ ( ℓ t e x t ( C ) + ℓ a u d i o ( C ))
其中 ℓ k = 1 N ∑ i = 0 N log diag ( softmax ( C ) ) \ell_k = \frac{1}{N} \sum_{i=0}^{N} \log \text{diag}(\text{softmax}(C)) ℓ k = N 1 ∑ i = 0 N log diag ( softmax ( C ))
CLAP用矩阵形式表达, softmax ( C ) \text{softmax}(C) softmax ( C ) 沿某轴做softmax后取对角线, 这与ChoreoMuse显式写出的 exp ( ⋅ ) ∑ exp ( ⋅ ) \frac{\exp(\cdot)}{\sum \exp(\cdot)} ∑ e x p ( ⋅ ) e x p ( ⋅ ) 形式完全等价. 两者都包含双向对比(music→dance 和 dance→music, 或 audio→text 和 text→audio). 温度参数τ的位置——ChoreoMuse将τ放在指数内部作为除数(exp ( ⋅ / τ ) \exp(\cdot/\tau) exp ( ⋅ / τ ) ), 而CLAP将τ乘在相似度矩阵外面. 但这只是数学表达习惯的不同, 效果一致.
ChoreoMuse的音乐-动作对齐具体实现
将音乐片段与对应的舞蹈动作配对,形成( X i m , X i p ) (X_i^m, X_i^p) ( X i m , X i p ) 训练对,其中i i i 索引匹配的音乐-姿态对。
音乐塔:
E i m = MLP music ( f music ( X i m ) ) E_i^m = \text{MLP}_{\text{music}}(f_{\text{music}}(X_i^m)) E i m = MLP music ( f music ( X i m )) 舞蹈塔:
E i d = MLP dance ( [ f pose ( X i p ) , f text ( X i t ) ] ) E_i^d = \text{MLP}_{\text{dance}}\left([f_{\text{pose}}(X_i^p),\ f_{\text{text}}(X_i^t)]\right) E i d = MLP dance ( [ f pose ( X i p ) , f text ( X i t )] ) 舞蹈侧额外引入文本描述X i t X_i^t X i t (格式如"House: walk out",包含流派+动作风格),将姿态编码与文本编码拼接后投影。
用对称InfoNCE损失拉近匹配对、推远不匹配对,使音乐嵌入E m E^m E m 与舞蹈嵌入E d E^d E d 在共享空间中对齐。
将训练好的MotionTune特征与Jukebox(通用音频模型)特征融合,得到最终音乐表示e m e_m e m 。
本质上就是CLIP/CLAP的标准做法 ,只是把"图像-文本"或"音频-文本"换成了"音乐-舞蹈动作"配对。
我的理解: 这个对称InfoNCE损失用于拉近音乐-舞蹈动作匹配对, 推远不匹配对, 就这么简单, 然后再细看音乐嵌入和舞蹈嵌入是怎么做的, 哪些参数是可训练的.
包括basic loss, 和一些辅助损失增强物理合理性(关节点位置, 速度, foot速度), 最后权重求和.
就自己训了个音乐分类器.
通过Choreography Style Controller处理可变长度音乐输入
情况1:短音频 (T ≤ d T \leq d T ≤ d ,其中d = 5 d=5 d = 5 秒)
情况2:长音频 (T > d T > d T > d )
全局视图 :将整段压缩到d d d 秒
局部视图 :从原始音频的前、中、后三个1/3区域各随机切出一个d d d 秒片段
共得到4个片段(1全局 + 3局部)
4个片段分别送入音频编码器
3个局部特征通过2D卷积(时间维度stride=3)合并为F local F_{\text{local}} F local
全局与局部特征通过注意力加权融合:
F fusion = α ⋅ F global + ( 1 − α ) ⋅ F local F_{\text{fusion}} = \alpha \cdot F_{\text{global}} + (1-\alpha) \cdot F_{\text{local}} F fusion = α ⋅ F global + ( 1 − α ) ⋅ F local
其中α = f AFF ( F global , F local ) \alpha = f_{\text{AFF}}(F_{\text{global}}, F_{\text{local}}) α = f AFF ( F global , F local ) 由注意力模块计算
分类器输出风格标签和特征e c e_c e c ,再与文本编码e t e_t e t 通过self/cross-attention交互,最终与音乐嵌入结合作为扩散模型的条件输入。
它认为参考图应该是生成视频的第一帧, 方法是从参考图提取动作, 使用mask方法保证生成的动作第一帧是参考图动作.
注
我发现在music -> pose -> video这个任务中, 大家都没有注意一个问题, 让初始pose的位置与参考图对齐, 这是只有在music to dance video任务中才要考虑的.
就是比如我生成的动作是居中的, 但是我的参考图只露了一个上半身, 只占了画面的下半身, 这种情况是存在的, 需要单独处理的吧. 已经发现了一篇在pose-driven video generation任务中处理这种情况的论文, 将在下一篇读到.
直接翻译原文吧: 这一阶段的扩散架构始于一个线性投影层, 随后是四个注意力块. 每个注意力块包含一个自注意力层, 两个FiLM层, 一个交叉注意力层, 两个额外的FiLM层, 一个MLP层和一个最终的FiLM层. 在这些四个注意力块之后应用一个最终的投影层.
FiLM(Feature-wise Linear Modulation)
核心公式 :
FiLM ( x ) = γ ⊙ x + β \text{FiLM}(x) = \gamma \odot x + \beta FiLM ( x ) = γ ⊙ x + β 计算过程 :
给定条件向量 c c c (如 t t t -β \beta β embedding)和输入特征 x x x :
γ = W_γ · c + b_γ # 线性层生成缩放因子
β = W_β · c + b_β # 线性层生成偏移因子
output = γ ⊙ x + β # 逐元素调制
流程我就不介绍了, 上图很清楚. 损失函数也很基础不介绍.
这里参与优化的是第一帧的pose参数和姿态参数, 得到的姿态参数在后续帧的生成中保持不变:
输入准备:
参考图像 I ref I_{\text{ref}} I ref 通过人体分割网络得到前景掩码 S ref ( u ) ∈ { 0 , 1 } S_{\text{ref}}(\mathbf{u}) \in \{0,1\} S ref ( u ) ∈ { 0 , 1 }
SMPL模型渲染得到二值轮廓 S SMPL ( β , θ ) ( u ) S_{\text{SMPL}}(\beta, \theta)(\mathbf{u}) S SMPL ( β , θ ) ( u ) (投影在mesh内为1,否则为0)
损失函数:
轮廓损失 (像素级):
L sil ( β , θ ) = ∑ u ∥ S SMPL ( β , θ ) ( u ) − S ref ( u ) ∥ 2 \mathcal{L}_{\text{sil}}(\beta, \theta) = \sum_{\mathbf{u}} \left\| S_{\text{SMPL}}(\beta,\theta)(\mathbf{u}) - S_{\text{ref}}(\mathbf{u}) \right\|^2 L sil ( β , θ ) = u ∑ ∥ S SMPL ( β , θ ) ( u ) − S ref ( u ) ∥ 2
关键点损失 :
∑ i ∥ p i − π ( β , θ , i ) ∥ 2 \sum_i \| p_i - \pi(\beta, \theta, i) \|^2 i ∑ ∥ p i − π ( β , θ , i ) ∥ 2
其中 p i p_i p i 是参考图像的2D关键点, π ( ⋅ ) \pi(\cdot) π ( ⋅ ) 是SMPL关键点的投影函数
联合优化:
min β , θ [ λ kpt ∑ i ∥ p i − π ( β , θ , i ) ∥ 2 + λ sil L sil ( β , θ ) ] \min_{\beta, \theta} \left[ \lambda_{\text{kpt}} \sum_i \|p_i - \pi(\beta,\theta,i)\|^2 + \lambda_{\text{sil}} \mathcal{L}_{\text{sil}}(\beta,\theta) \right] β , θ min [ λ kpt i ∑ ∥ p i − π ( β , θ , i ) ∥ 2 + λ sil L sil ( β , θ ) ]
为了有效地引导视频生成, 我们将转移的SMPL网格渲染成多种2D表示, 包括深度图(用于摄像机到像素的距离), 法线图(用于表面方向), 语义分割图(用于逐像素的身体部位标签)和足部接触掩模(从二进制足部接触标签转换而来). 然后, 我们使用多层运动融合将这些渲染特征融合在一起, 生成一个统一的引导信号以进行视频生成.
这里还和Champ的方法一样
2D Unet加时间层, 有ReferenceNet.
AIST++数据集, 二阶段训练补充了Champ和TikTok dataset. 对于音频编码器, 使用PANN 和HTSAT , 对于姿态编码器, 使用了来自MotionCLIP 的模型
它的pipeline有动作生成和视频生成两步, 动作生成去和Bailando, EDGE这些比, 比较编舞质量(Physical Foot Contact, diversity, BAS, Music Style Alignment Score, Choreography Style Alignment Score); 视频生成去和Disco, animate anyone这些比, 比较视频质量(Structural Similarity Index, Learned Perceptual Image Patch Similarity, Peak Signal-to-Noise Ratio, FVD).
一个是证明MotionTune的有效性. 另一个是SMPL参数格式的影响(Original SMPL/6D Rotation), 实验表明在编舞任务Original SMPL表现更好, 在视频生成任务6D Rotation表现更好.
感受
又一篇music -> pose -> video的论文, 中了ACM MM 2025, 悉尼大学一个实验室做的, 去年它们发了另一篇这个任务的论文, 这篇是接着上篇工作做的, 我发现他们特别喜欢从头训练, 明明直接从预训练模型开始可以得到更好的起点, 结果是效果都不够亮眼, 结构还是大家提过的, 没什么创新(是的, 他的每一个流程我都能给你找到对应的论文, 就shape对齐那里可能要思考一下), what can i say man, 可取之处:
contrastive learning framework了解一下没坏处
3D SMPL, 驱动视频生成的做法, 它们是从3D SMPL中提取深度图等信息融合, 而不是直接输入3D SMPL条件
毕竟是为数不多的music to dance video任务, 参考定量实验的设计, 我觉得大方向很合理了.