从广播视频中学习物理模拟的网球技能
张浩天、袁野、Viktor Makoviychuk、郭云荣、Sanja Fidler、彭学斌、Kayvon Fatahalian
SIGGRAPH 2023 (最佳论文荣誉提名)
注意:当前发布版本提供了分层控制器的实现,包括低级模仿策略、动作嵌入和高级规划策略,以及在IsaacGym中的环境设置。不幸的是,由于许可问题,目前无法提供训练好的模型,因此演示无法运行。
新闻
[2023/11/28] 发布了低级策略的训练代码。
[2023/11/01] 发布了分层控制器的演示代码。
环境设置
1. 下载IsaacGym并创建Python虚拟环境
您可以从官方网站下载IsaacGym预览版4。
然后从这里下载Miniconda3。
通过运行IsaacGym中的create_conda_env_rlgpu.sh
创建名为rlgpu
的conda虚拟环境,Python3.7或Python3.8均可。
注意,如果在运行IsaacGym时遇到错误ImportError: libpython3.7m.so.1.0: cannot open shared object file: No such file or directory
,您可能需要运行以下命令或将其添加到您的.bashrc
中。
export LD_LIBRARY_PATH=<您的CONDA路径>envs/rlgpu/lib/
2. 安装依赖项
进入创建的虚拟环境并运行安装脚本。
conda activate rlgpu
bash install.sh
要安装低级策略的额外依赖项,请按照install_embodied_pose.sh中的说明进行操作。
3. 安装smpl_visualizer以可视化结果
克隆Git仓库,然后运行
bash install.sh
4. 下载数据/检查点
将数据下载到vid2player3d/data
。
将动作嵌入和训练策略的检查点下载到vid2player3d/results
(目前不可用)。
下载SMPL,首先在这里注册,然后将模型(男性和女性模型)下载到smpl_visualizer/data/smpl
,并将文件重命名为SMPL_MALE.pkl
和SMPL_FEMALE.pkl
。
对于训练低级策略,还需要将smpl模型文件复制到vid2player3d/data/smpl
。
演示
这些演示需要训练好的模型,目前不可用。
单人模式
在单人模式下,玩家将对来自对面的连续网球做出反应。
以下脚本运行模拟并在线渲染结果。模拟将在300帧后重置。您可以通过将--cfg
更改为djokovic
或nadal
来更换玩家。
python vid2player/run.py --cfg federer --rl_device cuda:0 --test --num_envs 1 --episode_length 300 --seed 0 --checkpoint latest --enable_shadow
以下脚本将批量运行模拟并离线渲染结果视频,保存在out/video
目录下。您也可以将--record
更改为--record_scenepic
,这将把结果保存为交互式html文件,存放在out/html
目录下。请注意,保存的html文件较大,可能需要几秒钟才能加载。
python vid2player/run.py --cfg federer --rl_device cuda:0 --test --num_envs 8192 --episode_length 300 --seed 0 --checkpoint latest --select_best --enable_shadow --num_rec_frames 300 --num_eg 5 --record --headless
双人对战
在双人对战设置中,两名球员将相互进行网球对抗。
以下脚本运行模拟并在线渲染结果。如果球被漏接或出界,模拟将重置。您可以通过将--cfg
更改为nadal_djokovic
来切换球员。更多球员设置将很快添加。
python vid2player/run.py --cfg federer_djokovic --rl_device cuda:0 --test --num_envs 2 --episode_length 10000 --seed 0 --checkpoint latest --enable_shadow
以下脚本将批量运行模拟并离线渲染结果视频,保存在out/video
目录下。
python vid2player/run.py --cfg federer_djokovic --rl_device cuda:0 --test --num_envs 8192 --episode_length 10000 --seed 0 --checkpoint latest --enable_shadow --headless --num_rec_frames 600 --num_eg 5 --record
训练
低级策略
我们在embodied_pose中提供了训练低级策略的代码。如论文所述,低级策略使用AMASS动作和网球动作分两个阶段进行训练。您可以运行以下脚本执行两阶段训练(假设动作数据可用)。
python embodied_pose/run.py --cfg amass_im --rl_device cuda:0 --headless
python embodied_pose/run.py --cfg djokovic_im --rl_device cuda:0 --headless
convert_amass_isaac.py展示了如何将AMASS动作数据集转换为我们的训练代码可用的格式。
动作嵌入
我们在vid2player/motion_vae中提供了训练动作嵌入的代码(假设动作数据按照Video3DPoseDataset中描述的格式组织)。
高级策略
我们还在vid2player中提供了训练高级策略的代码。如论文所述,我们设计了一个分三个阶段的课程学习。您可以运行以下脚本执行课程训练(假设低级策略和动作嵌入的检查点可用)。
python vid2player/run.py --cfg federer_train_stage_1 --rl_device cuda:0 --headless
python vid2player/run.py --cfg federer_train_stage_2 --rl_device cuda:0 --headless
python vid2player/run.py --cfg federer_train_stage_3 --rl_device cuda:0 --headless
引用
@article{
zhang2023vid2player3d,
author = {Zhang, Haotian and Yuan, Ye and Makoviychuk, Viktor and Guo, Yunrong and Fidler, Sanja and Peng, Xue Bin and Fatahalian, Kayvon},
title = {Learning Physically Simulated Tennis Skills from Broadcast Videos},
journal = {ACM Trans. Graph.},
issue_date = {August 2023},
numpages = {14},
doi = {10.1145/3592408},
publisher = {ACM},
address = {New York, NY, USA},
keywords = {physics-based character animation, imitation learning, reinforcement learning},
}
参考文献
本仓库基于以下仓库构建:
- 低级模仿策略改编自 EmbodiedPose
- 动作嵌入改编自 character-motion-vaes
- IsaacGym 中的强化学习环境改编自 ASE
以下是复现视频标注流程的其他参考:
联系方式
如有任何关于本项目的问题,请通过 haotianz@nvidia.com 联系 Haotian Zhang。