本文是对Motion Controller Using Motion VAEs 的阅读笔记
这一篇论文结合CVAE和MANN 来生成骨骼动画,并使用强化学习的方法来控制Decoder的输出。对于动画这种序列型数据,作者并没用考虑使用RNN等循环网络,他的解释是,骨骼动画具有马尔科夫性质——下一刻的骨骼位置如何变化取决于当前骨骼的所有物理参数。
生成模型
上图是此论文所用的生成模型CVAE+MANN,作者称之为MVAE,主要分为Encoder和Decoder两个部分,其中condition是上一帧的姿态,是马尔可夫性质的表现。从功能上来看和传统的CVAE有两个不同:
- 自回归性,因为我们的目的是预测,那么就需要将前一帧姿势作为输入
- Decoder所用的网络是更为复杂的MANN,这里是为了更好的生成姿势,但不同之处在于blend后的网络的每一层输入加入了隐变量,用于在错误姿势的输入下,能够重构出正确的姿势。
Decoder
由于Encoder部分和传统的CVAE没什么不同,因此在这里不细讲。我们在这里着重讲一下Decoder部分,即MANN。
MANN其实是MoE(Mixture-of-Experts)概念运用在深度学习上的产物。它定义了一组专家网络(Expert Network),再不同输入下每个专家网络会按照不同的权重进行求和得出一个被用于实际处理输入的网络。比较形象地来看,专家网络就像一个智囊团,里面的每个人都是不同领域的专家,当向智囊团(一组专家网络)抛出一个问题时,每位专家都会对这个问题有不同的解答(专家网络的参数),最终智囊团会结合各位专家的意见给出答案(网络输出),显然对于此问题领域下的专家更具权威性(专家网络的权重)。
回到图中,需要实现这种模型,需要两部分:
- Gating Network,用于根据输入来计算权重,这里如果用一些周期函数来计算权重的话,就和PFNN 很像了,
- Expert Networks,一组专家网络用来加权求和,得出混合网络用来处理输入,得到输出。
预测动作的稳定性
由于这个模型是自回归的,那么对误差累积的考虑就不可避免了。这就会导致预测的动作非常不稳定,关节的位置过一会儿就“飞”走了。“飞”在这里比较形象,由于误差的累积,导致输入的姿势已经不在正常的姿态分布空间内,预测出来的肯定就不是正确的。
为了解决这个问题,作者使用了scheduled sampling的技术 ,先采取全监督的方式,然后逐步的变为自回归的方式,具体做法为,
- 首先在每一个epoch定义一个概率,用于每次forward的时候,以的概率使用ground truth作为condition,以的概率使用预测值作为condition
- 将整个训练过程分为三部分进行,全监督模式()、scheduled sampling模式()、自回归模式(),每部分的epcoch设置为
- 在scheduled sampling模式下,随着每个epoch完成,概率线性减小至
下图显示了运行时,模型生成动作的稳定性。图片上方是采用了scheduled sampling方式的生成结果,下方则是没有采用的生成结果。从上方可以看出就算初始状态将点聚集在一起,采用了scheduled sampling技术的生成模型还是有能力将其恢复。
为了使用shceduled sampling需要在训练上利用一些技巧,比较复杂,这里就不再赘述,感兴趣可以看原文的MVAE Training章节的后半部分。至于为何shceduled sampling有这种魔力,不过是让Decoder用正确的结果作为condition。同时由于Decoder中的prediction network的每个layer输入都带上了,使得Decoder更看重
控制模型
当生成模型MVAE被训练好后,我们就已经有一定的控制能力了,比如通过可以控制输出,或者利用蒙特卡洛树搜索(给定第一帧,在隐空间采样次,并递归进行次,从个搜索路径选择最好的一条,并移动至路径开头的那一帧,如此反复),但这些方法的控制能力都很弱,因此作者提出了使用DRL的方法来做一个控制模型。
从图中来看,将Encoder部分替换为控制网络,Env根据condition和控制策略来生成目标,然后由网络生成隐变量,简而言之就是控制隐变量的生成,从而达到控制动作的预测。它的累积奖赏为累积折扣奖励
其中,
- 代表环境状态,
- 表示agent所作出的动作,
- 表示帧的奖励,对于不同的控制方式有不同的计算方法,之后会详细展开
- 表示折扣因子。
结合上图来讲,agent会根据当前环境状态使用网络来计算,这里表示网络的参数,括号内看作是在环境下做出动作的概率。
这里需要注意的是,输出的取值范围要尽可能覆盖正态分布的大部分范围,因为我们的隐变量,所以将的输出放大倍就能基本覆盖正态分布。
运动学能量约束
作者在RL的优化过程中加入了能量作为惩罚,用于缩小解空间,使得模型能够生成更自然的动作,能量定义如下
也就是说agent需要以尽量低的能量去完成目标。
控制策略
基于目标
基于目标的方法就是,以角色的中心的一个有界范围内,随机生成一个目标点,角色需要不断接近目标。当角色达到目标点的一定范围内,且朝向目标时,就可以得到奖励。显然,角色接近目标地越快,获得的奖励也应该越高,因此奖励信号可以分为两项。
为了方便,我以构造了下面的式子用来说明,原文中并不存在,因此可能和原文的具体实现方式有出入。
其中表示在时刻角色与目标之间的距离。很容易理解,当角色比上一帧更加接近目标时,就可以得分。
手柄控制
对于手柄控制,角色就需要根据手柄的推动方向、幅度来调整自己的速度和朝向。那么reward可以被定义为
其中表示角色朝向,表示手柄期望的朝向,表示角色当前的速度,表示手柄期望的速度。奖励会在每一帧叠加。
基于路径
基于路径的方法由基于目标的方法来实现。具体做法是,再路径上等距的放置多个目标,并且会在随着时间的进行,逐个激活下一个的目标,然后前一个目标失效。这使得角色需要控制自己的速度来不断获取奖励。
讨论
非周期性动作
之前的生成动作,基本上只有跑步这一种类型。作者对于非周期性的动作的介绍放在了讨论这一章节,并将效果演示放在了补充材料的视频中(足球中的踢球和头球两个动作)。
对于非周期性动作,文中做法是将动作的label以one-hot的形式与姿势信息合并一起作为condition来训练网络。使得MVAE能够生成非周期性动作,同时还能够处理数据集中label的歧义性问题。
惯用手现象
在这篇文章的工作中,作者发现生成基于控制的动作都偏向使用右手,尽管数据集中是左右手使用平衡的。
控制模型的方法
总结
这边文章并没有使用RNN一类的模型来生成动作,而是基于动作的变化是一个马尔可夫链这一假设,运用CVAE来实现自回归地动作生成。同时为了能够人为控制动作,基于RL设计不同的方法来对采样,其实也就是条件概率分布的采样,从而实现不同目的下,生成想要的动作。
亮点在于控制部分能够根据需求替换成不同的采样模块,而Decoder基本不用发生变化。但Decoder实现起来会比较复杂。
从论文附加的视频来看,整体的动作是比较自然的,但是动作的多样性并没有很好的体现出来,个人感觉动作的多样性受限于数据集的动作多样性,以及人对分类的这个概念的认识,这也是动作歧义性的来源。
参考文献
[5] Doersch, C. 2021. Tutorial on Variational Autoencoders. arXiv:1606.05908 [cs, stat].