Lodge: A Coarse to Fine Diffusion Network for Long Dance Generation Guided by the Characteristic Dance Primitives
提出Lodge, 特点是生成超长舞蹈, 由粗到细两阶段生成, 角色舞蹈原语作为两diffusion模型的中间表达, 足部优化模块.
介绍
电影和游戏行业渴望给一段长音乐, 就能生成高保真和多样的3D舞蹈.
现有的方法只能生成几秒的视频, 但是真实世界的舞蹈持续几分钟甚至几小时(剧院).
当前基于自回归的方法处理这个问题, 造成累计误差, 使用Latent space的方式又牺牲了多样性, 容易过拟合. EDGE使用diffusion方法, 但是缺乏舞蹈的整体结构, 衔接处不自然.
总结了一下上述方法失败的原因, 把舞蹈生成看作序列到序列的问题, 忽视了粗糙水平的全局编舞模式. 编舞过程应该是关键动作->考虑衔接的思路.
讲思路, 先是设计了角色舞蹈原语(Characteristic Dance Primitives), 由8帧关键动作组成, 稀疏, 语义信息丰富.
然后设计了粗到细两阶段生成流程, 分别叫local diffusion和global diffusion. global diffusion 从长视频生成原语, local diffusion填充和增强生成的片段与音乐节奏对齐.
另外就是设计了足部优化策略, 发现因为SMPL格式是非线性的旋转角数据, 没法直接用foot相关的损失, 重新计算脚步接触信息, 用脚步细化模块解决脚步漂移.
方法
预备知识
音乐和舞蹈表示. 音乐使用Librosa库提取, motion保持和EDGE一致的SMPL结构, 注意一点表示中专门有关于foot-ground的信息.
Diffusion Model. 就一点, 不是预测噪声, 直接预测的真实值.
编舞规则. 音乐和舞蹈的1)风格和情绪一致, 2)节奏一致, 3)结构一致(例如, 音乐短语中的相同节拍通常对应对称的动作.)
两阶段舞蹈生成
这里只需要明白, 一段长视频kN, 被分成k份, 每一份就几秒时长, 通过Global Diffusion生成很多原语被分类为和, 被当成首尾帧, 被镜像复制并和节奏对齐(对应编舞规则的2和3), 注意这里几秒时长的音频又通过切分了, Local Diffusion只需要关注切分后的motion, 对做填充和增强.
再值得一提的是他们的数据集提前标注了原语段, 根据加速度小的蕴含更丰富的语义信息这一理论, 在推理阶段它们是替换dt()和节奏点()上的motion.
Global Diffusion
就是把音乐和舞蹈等距离切片了, global diffusion生成稀疏原语, 然后用local diffusion并行的填充.
这里生成原语的方式, 是基于改进的EDGE, 现在EDGE给定输入的music, 只输出多个稀疏的8帧原语, 这些原语又被分类为和.
上述表述有一个关键问题, 原语怎么来的 -- 人工从数据集中分离出来的. 到这里其实有一个疑问, 和又是怎么分类的, 似乎没有解答, 只说了在local diffuin中保持不变, 进一步增强, 看流程图可以明白被当作了首尾帧.
Local Diffusion
先讲了一下模型结构, 参考EDGE, 有自注意力, 交叉注意力, 多层感知层, feature-wise linear modulation, 看图很清楚. global diffusion相当于确定了一个短序列的首尾帧和中间一些关键帧, local diffusion只需要关注这个短序列生成就行了.
在loss这块, 增加了速度, 加速度相关的损失.
再就是专门处理foot的模块, 他们总结主要问题是: 足部与地面的状态是基于关节位置在线性空间中测量的, 而SMPL格式的运动存在于非线性旋转空间中. 处理方法是动力学正向转换算位置, 速度, 加速度, 在交叉注意力处优化foot移动.
多题材分类器和平行推理没什么好讲的.
实验
数据集是FineDance和AIST++, 参数设置上N是34.13秒, n是8.53秒, Golbal Diffusion中是5个, 是8个, 使用DDPM和DDIM. 指标就FID, DiV, BAS, 在FineDance上达到SOTA效果, 在AIST++数据集上还是Bailando更强.
感受
特点是长视频生成在平均长度只有13.3秒的AIST++上表现不佳也正常, 有一点没想清楚, 他到底是怎么改进EDGE让他只生成原语的. 还有一个问题kN->N的过程, 就算是Global Diffusion也只感知了长度为N的音乐上下文, 不能够算全局感知吧(如果这里我没理解错的话).