WalkTheDog:基于相位流形的跨形态运动对齐
本仓库提供了我们向量量化周期自编码器的实现。它学习一个不连续的 1D 相位流形,该流形能够在不依赖形态的情况下对齐运动,且无需配对数据或任何关节对应关系。它基于我们在 SIGGRAPH 2024 上发表的工作 WalkTheDog: Cross-Morphology Motion Alignment via Phase Manifolds。
用于可视化的 Unity 项目,提供了一个单独的仓库,见 此处。
前置条件
本代码已在 Ubuntu 20.04 下测试。在开始之前,请配置您的 Anaconda 环境
conda env create -f environment.yml
conda activate walk-the-dog
或者,您可以手动安装以下软件包(及其依赖项):
- pytorch == 2.1.1
- onnx == 1.16.0
- numpy == 1.26.4
- scikit-learn == 1.4.2
- matplotlib == 3.8.4
- tqdm
快速开始
我们为 Human-Loco 数据集和 Dog 数据集提供了预训练模型。要运行演示,请下载预处理后的数据集 here 并将其解压到仓库根目录下的 ./Datasets 目录中。此外,请下载预训练模型 here 并将其直接放置在仓库的根目录下。
要运行演示,请执行以下命令:
python test_vq.py --save=./pre-trained/human-dog
学习到的相位流形、平均姿态预测神经网络和码本将分别导出为 Manifold_*_final.npz 文件、.onnx 文件和 VQ.npz。
从头开始训练
要了解如何使用 Unity 处理数据,请参阅我们的 Unity 仓库 here。
在获取预处理数据后,您可以通过执行以下命令来训练模型:
python train_vq.py --load=dataset1path,dataset2path,dataset3path --save=./path-to-save
数据集应以逗号分隔,并存储在 ./Datasets 文件夹中。请注意,命令中的路径应排除 ./Datasets 前缀。您可以放入任意数量的数据集。训练好的模型将保存在 ./path-to-save 文件夹中。
训练完成后,您可以使用 test_vq.py 脚本生成 Unity 端所需的文件。
Motion Matching
我们在 Python 模块中提供了频率缩放运动匹配的离线实现。要复现论文中的结果,请在运行 test_vq.py 脚本后执行以下命令:
python offline_motion_matching.py --preset_name=human2dog --target_id=3
The target_id 参数指定了数据集中动作序列的索引,这与我们在 Unity 模块中的 Motion Editor 中的索引相同。
动作匹配结果将保存至 ./results/motion_matching/replay_sequence.npz。
若要可视化动作匹配结果,请参阅 此处 的 Unity 仓库。
致谢
代码改编自 @sebastianstarke 在 AI4Animation 下的 DeepPhase 项目。
类 VectorQuantizer 的代码改编自 @lyndonzheng 的 CVQ-VAE。