在昨天深夜的时候,Starke推了一条他们最新出炉的一篇siggraph。视频中的人物动画反倒是不怎么吸引我,重点是下方这个Phase Manifold。我第一眼看到的时候就觉得这肯定是近两年内角色动画中最漂亮的一篇工作。
文章和视频在这个GitHub repo中
看完这篇文章后,也非常冲动地先写下这篇blog,作者在文章中有很多想法在曾经出现在我的脑海中,这也是为什么编号是0x08。至于中间的这几篇文章为什么还没有填,还是课程比较繁重,所以打算暑假再填,(当然不是因为懒。大致的目录以及对应的文章如下
- 0x03 NSM, LMP对应的是19年和20年Strake的文章。没错,这人的文章属于那种能给人inspiration的文章(类似的还有Motion Field)。
- Neural state machine for character-scene interactions.
- Local motion phases for learning multi-contact character movements.
- 0x04 MVAE,对应的是20年的 Character controllers using motion VAEs
- 0x05 Motion Graph 和 Motion Field,这两篇也是非常经典的文章,不管是业界还是学界都有应用和延申
- 0x06 Motion Matching,在业界中属于比较前沿的技术,属于简化版的Motion Field,由于它的简单好用,近些年频繁地出现在学界的研究中。(如果有时间的话,这里会写一个非常非常简单的demo,逃
- 0x07 这里会重新提起Phase这个概念在动画领域其他分支上的工作
- DeepMimic, 在基于DRL的、物理的角色动画中使用Motion数据来给予奖励,属于让agent去track动画数据,一般称为motion tracking
- Robust motion in-betweening,由Transformer启发的深度补帧工作,在航海日志中属于一个小插曲,篇幅可能不多,但其中的一个position encoding可以联想到NSM中的Phase的计算。(这个联系我在前两个月中发现,在现在要讲的这篇DeepPhase中作者也有提及,第一次感觉和大牛离得辣么近
0x08 就是这篇文章啦,其实还有几篇关于Physiced的文章笔记,以后有时间再发把。废话不多说,我们进入正题
背景
截至2022年6月12日,虽然这个系列中间缺了几篇,但是如果看过的话,能够大致的清楚这篇文章想要做的是什么。
文章的标题其实指的就是一个编码器,能够从原始的motion数据中学习到Phase的表示。这个编码器有三个非常不错的特点:
- 无监督学习。更确切的说,在学习Phase的流形这个目的上,是无监督的。
- 对Phase这个latent space,引入“周期性”这一约束。这一设定的假设是,时间和空间的局部motion被认为是具有周期性的(笔者在前些天胡思乱想的时候也有这种感觉,可以用信号处理的方式来解释motion。在比较老的工作中,信号处理的方法更多用在motion的对齐以及编辑上,比较有代表的是Motion signal processing这一篇工作)
- 多个Phase通道,类似于LMP中的Local Phase。
为什么这些个特点非常不错?下面有几个原因
- 在??中提到,对于四肢动物来说,Phase不能像人类的行走奔跑这类locomotion那样基于左右脚接触地面来标记,因为四肢动物的触地是复杂的,我们无法通过某些规则来计算出来。更不用说复杂的动作如何计算(比如跳舞)。
- 在2020年,Starke的LMP这篇文章就介绍篮球这个运动的Phase提取,更确切地说,他通过了“关键”部位地接触信号的高低电平(触地和拍球),通过简单的信号处理方法,拟合到正弦曲线上,从而算出相位。然而,这对于MoCap原始数据来说,需要找到接触的时间点(timing),其中一些计算的参数阈值也要设置合适)。({0x03} 文章链接待更新)
- 先前基于Phase的工作,需要接触信息,但导致了其他没有接触的关节运动效果并不好,属于一种人为的局部attention,这也使得在舞蹈方面手部的运动效果不好
总的来说,DeepPhase非常像MANN和LMP的结合,但能够给我们更加high level的思考Phase的本质。值得一提的是,在{0x07 文章链接待更新} DeepMimic和Robust motion in-betweening中,也有类似的表达,前者使用简单的来向agent指出当前的Motion Reference的Phase,而后者则采用类似于Transfomer的position encoding来指出当前插帧的在整段动画中的时间位置,而这个数学表达形式很像{0x03 文章链接待更新}中NSM的2D Phase,即都是以正弦余弦函数表达。
下面我们来看看DeepPhase是怎么弄出Phase的流形出来,以及如何使用Phase。
总体框架
上图就是这篇论文的核心部分,简单来说,它对一个motion的窗口提取出M个通道的2维的Phases,即前半部分(至于为何是2维,可以看{0x03 链接待更新}NSM介绍)。Phases可以被用于下游的框架,比如MANN,Motion Matching。也就是说Phase是以Motion的时间属性被下游使用,多个通道表示空间属性(这一点作者介绍说类似LMP,实验结果也有体现,但在构建这个编码器时并没有空间上的约束)。后半部分则是用来重构Motion,在实际使用时,并不会用到这一部分,也就是说真的有用的输出是M个通道的2D Phases。
Phase流形学习
在背景一节我们说到,这个编码器的一个特点是无监督学习,即没有Phase的监督信号。作者在它2020年的LMP工作中,Phase计算方法是通过接触信号的高低电平去拟合正弦波,然后得出具体的值。套用到这篇文章里,一个想法是能否通过神经网络去学习一个latent space来隐式的表达Phase,然后通过函数拟合的方法将其显式的计算出来。这样就不用监督信号来解码latent code成Phase了。也就是MANN和LMP这两个工作的结合。
FFT拟合三角函数
具体来说,作者将Motion的一个窗口编码到同样窗口大小的M个通道的latent codes,然后将这几个latent code去拟合一般正弦函数(正弦波)。比如对通道1,根据采样定理,采样率要达到最高频率的两倍以上,因此对于个采样点,会有个频率。通过对通道1这个窗口进行FFT变换,得到个因子,然后计算谱密度(功率),从而拟合出一个正弦函数。对应到所有通道,公式如下
其中表示第个通道的第个因子(位于复数域),通过计算出上面后三个量,就可以得出个通道的三角函数,即
到这里,框架图中的FFT模块就已经完成它的工作了,我们只剩下这个相位信息没有算。
全连接层预测相位
作者使用latent code来预测窗口中点的相位信息,然后带入上面的正弦函数中,重构出latent code。预测方法则是使用全连接层预测,即
之后通过对进行反卷积解码出原motion,以MSE作为重构误差优化整个encoder。因为我们的目标是相位的信息,而且没有关于任何相位的监督信号,因此这个方法是无监督的方法。
Phase流形
当每一个窗口输入后,我们可以得到相位个通道的相位信息,即。然后对每个通道计算出2D Phase,即
训练细节
网络的输入只进行了均值归0化,并没有除以标准差,这是为了能够保留不同帧之间的差别(diffrence)而不仅仅是相对大小。同时在卷积层使用Batch Normalization。激活函数为tanh。
笔者这里认为,BN这个操作是为了弥补数据没有使用归一化所带来的ICS问题(ICS一般会出现在网络层数较深时),即不同的batch输入分布相差比较大时,网络权重的更新会变得比较大,通过线性层、激活层等等逐步放大,导致网络学习效率下降。
此外网络的输入只有关节速度这个信息,而不包含其他额外的信息。当然Phase更多是指示timing的意思,从速度上提取也确实有道理。但在之后的和其它方法比较时,隐含了一个比较不公平的setting,这会在下一小节中提及。
Phase流形性质和可视化
这里展示一下Phase流形可视化,从图中可以看到,Phase流形是一种更为紧致的表达,具体表现在运动的规律、不同类型运动之间的过渡更加平滑。
作者在文中总结了相位Phase最主要的两个性质:单向性和对齐性。
单向性
首先是单向性,它是指运动在时间上是不断向前的。这里可以举一个反例来加以说明:在Motion Matching中,如果我们按照角色当前的位置、速度不断去匹配数据库中的motion,那么搜索结果可能会卡在某一帧上,导致运动停滞。但如果按照相位去匹配的话,则不会出现类似的情况。如下图所示
其实在说明单向性这个东西时,还有另外一种方式,不过没有上图那么直观。在前些年的工作中,比如基于CNN的motion generation,一个比较严重的问题就是平均化,或者叫模糊。具体来说,训练好的静态网络(相对于MANN这类基于Phase的MoE方法),它学到的往往是平均后的motion。一个原因网络很难学到motion的时序变化,为了减少MSE Loss,造成”两头都想讨好,结果两头都不讨好“的情况。
举个例子来说,两段走路的motion,区别仅仅是一个先迈左脚、一个先迈右脚,让CNN去学习走路的生成,其结果容易出现非常模糊、平均的动作。
但笔者这里认为,图中用Motion Matching方式来说明,其实不是那么的好,这里如果读者仔细看过Motion Field那篇文章的话会发现,角色的骨骼位置,并不是由数据库中的搜索结果的骨骼位置计算得出,而是由搜索结果的骨骼速度和当前角色骨骼位置计算得出。用 {0x05 链接待更新}这篇blog中的一张图来解释:
可以看到,在Motion Field中motion的单向性,由速度场来保证,而非位置。那么在这个setting下,从high level来讲,Phase和速度其实都是一种单向性的特征,何况这篇文章中Phase是从motion的速度提取出来的。
对齐性
对齐在motion合成中属于老生常谈的问题了,比较传统的对齐方法是DTW(dynamic time wrapping)。然而在实时motion合成系统中,却是比较棘手的问题,笔者这里认为原因有两个:
- 使用DTW是比较耗时的,因为需要在时间尺度上计算大量的位置和速度
- 系统没有充足的利用运动的时间变化信息,比如CNN、RNN学不出多变的运动、Motion Matching受限于数据的分布
下游框架(Motion控制)
作者在文章的后半部分,给出了比较多的例子来说明使用Phase能够生成更加自然的动画。无论是简单的locomotion、四肢运动,还是复杂的交互运动,甚至是跳舞这类没有接触信息的运动。都体现了非常不错的效果。
基于学习的Motion控制
不用多说,作者之前的工作能够完美使用DeepPhase,所带来的提升非常不错。其中一个就是身体的上半部分运动得到很大的改善,因为之前的工作的相位是基于接触点来定义的,那么对于基本上没有接触的上半身,效果是不佳的。
以上半身运动改善为出发点,作者将DeepPhase应用在生成舞蹈这些工作上,发现上半身的运动更加的多变(sharp),而非平均和模糊,同时脚步滑动更少,这类问题常常发现在其它编舞的工作中。具体的效果可以看作者发布的视频,其实效果不那么真实,但还说的过去。
Motion Matching中的应用
一般来说,Motion Mathing是使用角色的特点关节的速度、位置、以及未来的运动轨迹信息来作为motion的搜索feature,那么一个直接的想法就是使用Phase来替代这些信息。理由如下
- Phase Manifold相比于这些速度、位置来说,更加紧致稠密,这导致变化上更加连续。在不同的动作类型切换更容易体现。因为对于速度、位置来说,原始的数据中动作类型的切换很少,主要是由motion内部数据组成。
- Phase的维度更小,这使得searching的性能得以提升,甚至能用在大型的motion数据库上。
- Phase搜索结果会更加临近,而使用速度位置则不一定,如下图。
总结
这篇文章的亮点就在于如何去训练一个Phase Manifold,运用信号处理的思想,将motion的时间特征很好的提取出来,同时应用在下游框架来说明Phase是motion的一个重要特征,无论从驱动motion的变化(单向性)还是motion的自然多变(对齐性)都说明Phase应该被用在motion生成上。而且想法简单且有效,只能说beautiful!
参考
- Kovar, L., Gleicher, M., and Pighin, F. 2008. Motion graphs.ACM SIGGRAPH 2008 classes on - SIGGRAPH ’08, ACM Press, 1.
- Lee, Y., Wampler, K., Bernstein, G., Popović, J., and Popović, Z. 2010. Motion fields for interactive character locomotion.ACM Transactions on Graphics29, 6, 138:1-138:8.
- Motion Matching and The Road to Next-Gen Animation.https://www.gdcvault.com/play/1023280/Motion-Matching-and-The-Road.
- Starke, S., Mason, I., and Komura, T. 2022. DeepPhase: Periodic Autoencoders for Learning Motion Phase Manifolds.ACM Transactions on Graphics41, 4, 13.
- Bruderlin, A. and Williams, L. 1995. Motion signal processing.Proceedings of the 22nd annual conference on Computer graphics and interactive techniques, Association for Computing Machinery, 97–104.
- Harvey, F.G., Yurick, M., Nowrouzezahrai, D., and Pal, C. 2020. Robust motion in-betweening.ACM Transactions on Graphics (TOG)39, 4, 60–1.
- Holden, D., Komura, T., and Saito, J. 2017. Phase-functioned neural networks for character control.ACM Transactions on Graphics36, 4, 42:1-42:13.
- Holden, D., Saito, J., and Komura, T. 2016. A deep learning framework for character motion synthesis and editing.ACM Transactions on Graphics35, 4, 138:1-138:11.
- Peng, X.B., Abbeel, P., Levine, S., and van de Panne, M. 2018. DeepMimic: example-guided deep reinforcement learning of physics-based character skills.ACM Transactions on Graphics37, 4, 143:1-143:14.
- Starke, S., Zhang, H., Komura, T., and Saito, J. 2019. Neural state machine for character-scene interactions.ACM Trans. Graph.38, 6, 209–1.
- Starke, S., Zhao, Y., Komura, T., and Zaman, K. 2020. Local motion phases for learning multi-contact character movements.ACM Transactions on Graphics39, 4, 54:54:1-54:54:13.
- Zhang, H., Starke, S., Komura, T., and Saito, J. 2018. Mode-adaptive neural networks for quadruped motion control.ACM Transactions on Graphics37, 4, 145:1-145:11.