freestyle

机器之心专栏
机器之心编辑部
会 freestyle 的AI来了,给定起始动作与音乐,新方法 DanceNet3D 就可以生成一段与音乐合拍且流畅优美的舞蹈 。
近来,AI 舞蹈生成技术的擂台大有你方唱罢我登场之势 。谷歌团队的 AI Choreographer 刚推出不久,就迎来了强劲的对手——DanceNet3D 。
先来看段 Demo :

freestyle

文章插图
【freestyle】DanceNet3D 是由来自慧夜科技、北航以及港中文 MMLab 的学者联合推出的高质量三维舞蹈动作生成算法 。给定起始动作与一段音乐,该算法可以生成一段与音乐合拍且流畅优美的舞蹈 。该算法结合了慧夜科技在动画产业界的技术经验,采用了人体运动的关键动作 - 中间运动参数曲线的表达形式,为运动生成的建模提供了一种全新的思路 。
相比于其他运动生成方法,该方法的生成效果具有显著优势 。
此外,该工作还提出了首个由专业动画师团队打造的高质量舞蹈数据集 PhantomDance 。该数据集搜集了 Niconico、YouTube 上的 300 个热门舞蹈,包含宅舞、嘻哈、爵士、Old School 等多种风格,由专业动画团队在职业舞者指导下,历时 18 个月完成 。对比目前学术界来自运动捕捉或真人舞蹈视频的三维重建算法,PhantomDance 在音乐匹配程度、动作优雅程度、艺术表现力上都具有绝对优势 。目前该团队公开了其中的 100 个舞蹈 - 音乐数据对,这些数据对组成了 PhantomDance100 。
freestyle

文章插图
论文地址:http://arxiv.org/abs/2103.10206
项目及数据集地址:http://huiye-tech.github.io/project/dancenet3d/
两阶段舞蹈生成框架
由于数据基本都来源于动作捕捉、三维重建,舞蹈合成、乃至更广泛的运动合成研究领域,因此往往会把问题建模成逐帧的骨骼参数(位移、旋转)的输出 。然而在实际的 3D 动画产业中,无论是动画制作软件 Maya、Blender,还是游戏引擎 Unity3D、Unreal,角色运动都是用曲线来编辑和表示的 。这里的曲线指的是位移的 (t_x, t_y, t_z),旋转的(r_x, r_y, r_z) 等参数中的每一维作为纵轴,以时间为横轴的函数曲线 。动画师一般会先制作一系列的关键帧来确定动作的主体形式,然后通过曲线编辑器调节特定参数的曲线形状来完善动作细节 。受此启发,DanceNet3D 提出了关键姿势 (key pose) - 中间曲线 (inbetween motion curve) 的两阶段舞蹈生成框架,如下图所示 。
freestyle

文章插图
每个阶段都采用相似的编码器 - 解码器(encoder-decoder)结构,并使用对抗训练(adversarial training)的训练模式,如下图所示 。
freestyle

文章插图
其中编码器部分采用常见的 Transformer 模型,而解码器部分则是该研究提出的 MoTrans 模型 。MoTrans 是对 NLP 领域传统 Transformer 针对运动合成的精心改造,其核心由运动链网络(Kinematic Chain Networks,图中的 KCN)和可学习局部注意力机制(Learned Local Attention,LLA)构成 。接下来我们分别看一下 KCN 和 LLA 。
KCN 是一种以 SMPL 模型的 24 个关节点为运算结点的图神经网络(GNN)变体 。区别于常规 GNN 的操作,KCN 采用了模拟机器人控制理论中的正向运动学(Forward Kinematics)和反向运动学(Inverse Kinematics)的网络操作方式,通过线性层把结点特征映射到运动学控制空间后,先从根结点向叶结点传播特征参数,并沿路径进行特征融合,然后再自叶结点向根结点做一遍相似操作,如下图所示 。
freestyle

文章插图
常规 transformer 中的注意力属于全局注意力,即一个 query 对所有的 key 做内积,对所有 value 进行加权求和 。然而人体运动是有显著局部性的,一个时刻的姿态和它临近时间内的姿态动作强相关,但是和距离较远的时间几乎没有关系,例如十秒前角色举起了双手,在当前时刻既可能是举起双手,也可能是放下双手,甚至可能处于坐下的状态 。根据这个性质,DanceNet3D 在解码器中引入了带有可学习核函数的 LLA 模块,如下图所示 。
freestyle

文章插图
值得一提的是,由于注意力的输入来自 KCN 的输出,以关节点的形式排布,天然符合原始 transformer 中多头(multi-head)的理念,于是 DanceNet3D 中把每个 KCN 输出的节点作为一个 head,采用线性投影(linear projection)进行并行操作,由于注意力之后的前馈(fead-forward)操作仍然使用 KCN 模型,所以省去了原始多头注意力中最后的 concat 操作和线性操作,在 head 数量相同的情况下减少了计算量 。研究者将其称为结构化多头注意力(structured multi-head attention),其将节点作为 head 的定义,相比于原始的多头机制更具物理意义 。