论文: On human motion prediction using recurrent neural networks
论文地址: https://arxiv.org/abs/1705.02445
通过对mocap数据的学习,基于recurrent neural network提出新的模型, 实现对于人物运动的后几帧预测,相比于LSTM-3LR(3 layers of LSTM),ERD(Encoder-Recurrent-Decoder)等模型有更好的表现
Table of Contents(目录)
Background (论文背景)
作者主要针对deep RNN-based的方法在人体运动预测问题上表现不好的地方做了总结,并提出了解决方案。
第一帧的不连续性
如图所示,其中ERD以及LSTM-3LR的预测值的第一帧与实际值有明显的不连续。
超参数调优
首先一个使用RNN和reinforcement无法避免的问题是如果在训练过程中只学习真实值,它们无法从自己的错误中恢复。因此,有人提出的决解方案是加入随机的噪音。但是加入随机噪音又存在很多缺点:
- 噪音的加入增大了调优的难度,噪音的分布以及强度是难于去调优的
- 虽然噪音的加入改进了长期预测的效果,但是它同时破坏了短期预测的效果,尤其是第一帧的预测值
- 难以选择最优的模型,因为通常选择的规则是选择最小的validation error,但是随着噪音的加入这种方法不再适用
模型的复杂度与深度
LSTM-3LR,ERD,SRNN都使用了不止一层RNN在它们的结构中
- 随着模型深度的增加,当数据量大时,会耗费大量资源的时间
- 当数据量稀少是,深度大的模型将变得很难训练
只针对特定运动的网络
很多模型只能局限于特定运动的预测,而deep network的优势就在于能应用于数据量大并且种类多的情况下。作者提出的模型可以直接适用于Human3.6M这类含有众多不同运动类型的数据集
Methodology(实现方法)
作者选用了sequence-to-sequence模型,并提出使用Sampling-based loss解决超参数调优的问题,以及Residual architecture解决第一帧不连续的问题,以下将详细讨论该模型
Network Structure(模型结构)
Sequence-to-Sequence model
Sequence-to-Sequence (seq2seq)模型类似于之前提过的temporal encoder模型,由encoder和decoder组成,encoder接收序列并生成内部的状态,decoder接收该状态并生成预测值。seq2seq常常用于自然语言处理,输入输出都为序列,而对于人体运动预测需要学习时间上的相关性,所以同样适合,输入一组固定帧数的数据,输出对人体运动的后几帧预测
Sampling-based loss
之前的背景中提到RNN无法只学习真实值,作者也提到了一些解决方案,比如加入噪音(noise scheduling)或者对抗网络,但这些方法都需要额外的调参。作者提出了一种简单的方式解决这个问题,在训练阶段用decoder生成预测值,并将其作为自己的输入。这种方法的优势在于不需要任何调参。方法的实现在图中作者的模型中表现为蓝色的连线。
Residual architecture
为了解决第一帧预测值不连续的问题,作者提出了residual architecture。原理为添加了速度这一概念,并替换之前认为的预测人体的姿势。即每一帧的预测相当于预测速度的变化值,而不是预测人体姿势本身。所以第一帧的预测便简化为0速度或者接近0速度的预测。而实现方式也较为简单,在每一个RNN模块的输入和输出上添加一个链接,从而学习速度的变化。在图中可见decoder中input和output存在一个链接。
Experiments(实验)
Experiments detail(实验细节)
- 作者考虑了两种输入方式。第一种对输入使用了one-hot vectors,其中包含15种动作类型,第二种不使用one-hot vectoes
- RNN的模块,作者选用了single gated recurrent unit(GRU),其中包含1024个神经元。相比于LSTMs计算量更小
- 每次输入的值设置为2秒的数据,每次输出的值设置为1秒的预测(长期预测)或者400毫秒(短期预测)
Experiments results(实验结论)
从实验结果看,添加了Sampling-based loss以及residual architecture之后,模型能有较好的表现。并且在非单一运动类型数据集中也能有较小的误差。
从预测结果看,作者的模型完美解决了第一帧不连续的问题。
Summary(总结)
- 作者基于sequence-to-sequence模型之上进行了一系列优化用于解决使用RNN所碰到的问题。
- 使用Sampling-based loss,在训练阶段将decoder预测的值加入自己的输入中以解决RNN只学习真实值而不能从自己错误中恢复的问题。
- 使用residual connection,以学习速度代替学习人物姿势本身做到消除第一帧不连续的问题,通过在每个RNN模块建立一条输入和输出的链接实现。