├── .gitignore
├── MUJOCO_LOG.TXT
├── README.md
├── assets
├── conda
│ └── dependencies.txt
├── demo_videos
│ ├── dance.mp4
│ └── embodied_demo.mp4
├── gif
│ ├── teaser.gif
│ ├── wild_demo1.gif
│ └── wild_demo2.gif
└── mujoco_models
│ ├── common
│ ├── WoodSeemles.png
│ ├── bin.png
│ ├── box.png
│ ├── can.png
│ ├── cardbox.png
│ ├── chair.png
│ ├── concrete.png
│ ├── cone.stl
│ ├── field.png
│ ├── grass.png
│ ├── lightwood.png
│ ├── lobby.png
│ ├── materials.xml
│ ├── oak.png
│ ├── redwood.png
│ ├── sky1.png
│ ├── skybox.xml
│ ├── table_texture1.png
│ ├── textured_packed_full.png
│ ├── visual.xml
│ └── zen_room.png
│ ├── geom
│ ├── Chest.stl
│ ├── Head.stl
│ ├── Hips.stl
│ ├── L_Ankle.stl
│ ├── L_Elbow.stl
│ ├── L_Hand.stl
│ ├── L_Hip.stl
│ ├── L_Index1.stl
│ ├── L_Index2.stl
│ ├── L_Index3.stl
│ ├── L_Knee.stl
│ ├── L_Middle1.stl
│ ├── L_Middle2.stl
│ ├── L_Middle3.stl
│ ├── L_Pinky1.stl
│ ├── L_Pinky2.stl
│ ├── L_Pinky3.stl
│ ├── L_Ring1.stl
│ ├── L_Ring2.stl
│ ├── L_Ring3.stl
│ ├── L_Shoulder.stl
│ ├── L_Thorax.stl
│ ├── L_Thumb1.stl
│ ├── L_Thumb2.stl
│ ├── L_Thumb3.stl
│ ├── L_Toe.stl
│ ├── L_Wrist.stl
│ ├── LeftArm.stl
│ ├── LeftChest.stl
│ ├── LeftFoot.stl
│ ├── LeftHand.stl
│ ├── LeftLeg.stl
│ ├── LeftShoulder.stl
│ ├── LeftToe.stl
│ ├── LeftUpLeg.stl
│ ├── LeftWrist.stl
│ ├── Mouth.stl
│ ├── Neck.stl
│ ├── Pelvis.stl
│ ├── R_Ankle.stl
│ ├── R_Elbow.stl
│ ├── R_Hand.stl
│ ├── R_Hip.stl
│ ├── R_Index1.stl
│ ├── R_Index2.stl
│ ├── R_Index3.stl
│ ├── R_Knee.stl
│ ├── R_Middle1.stl
│ ├── R_Middle2.stl
│ ├── R_Middle3.stl
│ ├── R_Ring1.stl
│ ├── R_Ring2.stl
│ ├── R_Ring3.stl
│ ├── R_Shoulder.stl
│ ├── R_Thorax.stl
│ ├── R_Thumb1.stl
│ ├── R_Thumb2.stl
│ ├── R_Thumb3.stl
│ ├── R_Toe.stl
│ ├── R_Wrist.stl
│ ├── R_pinky1.stl
│ ├── R_pinky2.stl
│ ├── R_pinky3.stl
│ ├── RightArm.stl
│ ├── RightChest.stl
│ ├── RightFoot.stl
│ ├── RightHand.stl
│ ├── RightLeg.stl
│ ├── RightShoulder.stl
│ ├── RightToe.stl
│ ├── RightUpLeg.stl
│ ├── RightWrist.stl
│ ├── Spine.stl
│ ├── Spine1.stl
│ ├── Spine2.stl
│ └── Torso.stl
│ ├── humanoid_smpl_neutral_mesh.xml
│ ├── humanoid_smpl_neutral_mesh_vis.xml
│ ├── mesh
│ ├── bin.msh
│ ├── box.msh
│ ├── can.msh
│ ├── cardbox.msh
│ ├── chair.msh
│ ├── chair.stl
│ ├── flashlight.stl
│ ├── grab_table.stl
│ ├── headset.stl
│ ├── lobby.msh
│ ├── table.msh
│ ├── table.stl
│ ├── table_1
│ ├── table_1.msh
│ ├── table_relive.stl
│ ├── textured_packed.msh
│ ├── train.stl
│ └── zen_room.msh
│ └── template
│ ├── cones.xml
│ ├── humanoid_template.xml
│ ├── humanoid_template_design.xml
│ ├── humanoid_template_local.xml
│ ├── humanoid_template_test.xml
│ └── humanoid_template_vis.xml
├── config
└── video_pose
│ └── prox
│ ├── tcn_voxel_4_1.yml
│ ├── tcn_voxel_4_3.yml
│ └── tcn_voxel_4_5.yml
├── data
└── scenes
│ ├── BasementSittingBooth_planes.txt
│ ├── BasementSittingBooth_rectangles.txt
│ ├── MPH112_cylinders.txt
│ ├── MPH112_rectangles.txt
│ ├── MPH11_cylinders.txt
│ ├── MPH11_planes.txt
│ ├── MPH11_rectangles.txt
│ ├── MPH16_cylinders.txt
│ ├── MPH16_planes.txt
│ ├── MPH16_rectangles.txt
│ ├── MPH1Library_planes.txt
│ ├── MPH1Library_rectangles.txt
│ ├── MPH8_circles.txt
│ ├── MPH8_cylinders.txt
│ ├── MPH8_planes.txt
│ ├── MPH8_rectangles.txt
│ ├── N0SittingBooth_cylinders.txt
│ ├── N0SittingBooth_planes.txt
│ ├── N0SittingBooth_rectangles.txt
│ ├── N0Sofa_cylinders.txt
│ ├── N0Sofa_planes.txt
│ ├── N0Sofa_rectangles.txt
│ ├── N3Library_cylinders.txt
│ ├── N3Library_planes.txt
│ ├── N3Library_rectangles.txt
│ ├── N3Office_cylinders.txt
│ ├── N3Office_planes.txt
│ ├── N3Office_rectangles.txt
│ ├── N3OpenArea_cylinders.txt
│ ├── N3OpenArea_planes.txt
│ ├── N3OpenArea_rectangles.txt
│ ├── Werkraum_planes.txt
│ └── Werkraum_rectangles.txt
├── download_data.sh
├── embodiedpose
├── __init__.py
├── agents
│ ├── __init__.py
│ ├── agent_embodied_pose.py
│ └── agent_multi.py
├── core
│ ├── __init__.py
│ ├── common.py
│ ├── critic.py
│ ├── distributions.py
│ ├── logger_rl.py
│ ├── reward_function.py
│ ├── trajbatch.py
│ └── trajbatch_humor.py
├── data_loaders
│ ├── __init__.py
│ ├── amass_dataset.py
│ ├── amass_multi_dataset.py
│ ├── chunked_generator.py
│ ├── scene_pose_dataset.py
│ └── video_pose_dataset.py
├── data_process
│ ├── PWCNet.py
│ ├── gen_prox_video.py
│ ├── grad_gpa_convert.py
│ ├── process_amass_3rd.py
│ ├── process_amass_first.py
│ ├── process_fpv_raw.py
│ ├── process_gpa.py
│ ├── process_h36m_j2d.py
│ ├── process_humor_split.py
│ ├── process_hybrik.py
│ ├── process_lemo_and_prox.py
│ ├── process_smpl.py
│ ├── process_thirdeye.py
│ ├── replay_data.py
│ └── script_pwc.py
├── envs
│ ├── __init__.py
│ ├── humanoid_kin_multi.py
│ └── humanoid_kin_res.py
├── mocap
│ ├── bvh.py
│ ├── pose.py
│ └── skeleton.py
├── models
│ ├── __init__.py
│ ├── humor
│ │ ├── body_model
│ │ │ ├── body_model.py
│ │ │ └── utils.py
│ │ ├── chamfer_distance
│ │ │ ├── LICENSE
│ │ │ ├── __init__.py
│ │ │ ├── chamfer_distance.cpp
│ │ │ ├── chamfer_distance.cu
│ │ │ └── chamfer_distance.py
│ │ ├── humor_model.py
│ │ ├── numpy_humor_loss.py
│ │ ├── torch_humor_loss.py
│ │ └── utils
│ │ │ ├── humor_mujoco.py
│ │ │ ├── torch.py
│ │ │ ├── transforms.py
│ │ │ └── velocities.py
│ ├── implicit_sdfs.py
│ ├── implicit_sdfs_np.py
│ ├── kin_net_humor_res.py
│ ├── kin_policy_humor_res.py
│ ├── kin_tcn.py
│ ├── kin_tcn_bn.py
│ ├── models.py
│ ├── policy.py
│ ├── smpl_multi.py
│ ├── smpl_np.py
│ ├── smpl_spin.py
│ ├── space_net.py
│ ├── spin.py
│ ├── tcn.py
│ └── uhm_model.py
├── smpllib
│ ├── multi_robot.py
│ └── scene_robot.py
└── utils
│ ├── __init__.py
│ ├── image_utils.py
│ ├── img_utils.py
│ ├── logger.py
│ ├── math_utils.py
│ ├── memory.py
│ ├── metrics.py
│ ├── pytorch3d_transforms.py
│ ├── scene_utils.py
│ ├── smooth_bbox.py
│ ├── statear_config.py
│ ├── statear_smpl_config.py
│ ├── statereg_config.py
│ ├── tb_logger.py
│ ├── tools.py
│ ├── torch_geometry_transforms.py
│ ├── torch_utils.py
│ ├── transform_utils.py
│ ├── transformation.py
│ ├── video_pose_config.py
│ └── zfilter.py
├── in_the_wild_poc.ipynb
├── requirements.txt
├── scripts
├── eval_metrics.py
├── eval_scene.py
├── process_hybrik_data.py
├── render_scene.py
├── train_models.py
└── vis.py
└── test.xml
/.gitignore:
--------------------------------------------------------------------------------
1 | wandb
2 | *.swp
3 | .python-version
4 | wandb
5 | wandb-debug.log
6 | __pycache__
7 | .ipynb_checkpoints
8 | .DS_Store
9 | out
10 | datasets
11 | prev_datasets
12 | results
13 | *.pyc
14 | __pycache__
15 | log.out
16 | out.log
17 | 3rdparty
18 | tmp
19 | Tools
20 | archive
21 | transfer_data
22 | transfer_data/
23 | temp/
24 | data/smpl
25 | data/vposer
26 | data/humor
27 | data/scene_mesh
28 | sample_data/
--------------------------------------------------------------------------------
/MUJOCO_LOG.TXT:
--------------------------------------------------------------------------------
1 | Tue Jun 27 09:11:06 2023
2 | ERROR: GLEW initalization error: Missing GL version
3 |
4 | Tue Jun 27 09:21:34 2023
5 | ERROR: GLEW initalization error: Missing GL version
6 |
7 | Tue Jun 27 09:30:20 2023
8 | ERROR: GLEW initalization error: Missing GL version
9 |
10 | Tue Jun 27 09:31:12 2023
11 | ERROR: GLEW initalization error: Missing GL version
12 |
13 | Tue Jun 27 09:33:24 2023
14 | ERROR: GLEW initalization error: Missing GL version
15 |
16 |
--------------------------------------------------------------------------------
/assets/conda/dependencies.txt:
--------------------------------------------------------------------------------
1 | # pytorch
2 | conda install pytorch torchvision cudatoolkit=9.0 -c pytorch
3 |
4 | # mujoco-py
5 | pip install mujoco-py
6 | sudo apt install libosmesa6-dev (ubuntu)
7 | sudo apt-get install libglu1-mesa-dev freeglut3-dev mesa-common-dev (ubuntu)
8 | sudo yum install mesa-libOSMesa-devel (centos)
9 |
10 | # gym
11 | pip install gym
12 |
13 | # opencv
14 | conda install -c menpo opencv
15 |
16 | # tensorflow OpenGL yaml
17 | conda install tensorflow pyopengl pyyaml
18 |
19 | # bash
20 | export OMP_NUM_THREADS=1
21 |
--------------------------------------------------------------------------------
/assets/demo_videos/dance.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/demo_videos/dance.mp4
--------------------------------------------------------------------------------
/assets/demo_videos/embodied_demo.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/demo_videos/embodied_demo.mp4
--------------------------------------------------------------------------------
/assets/gif/teaser.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/gif/teaser.gif
--------------------------------------------------------------------------------
/assets/gif/wild_demo1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/gif/wild_demo1.gif
--------------------------------------------------------------------------------
/assets/gif/wild_demo2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/gif/wild_demo2.gif
--------------------------------------------------------------------------------
/assets/mujoco_models/common/WoodSeemles.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/common/WoodSeemles.png
--------------------------------------------------------------------------------
/assets/mujoco_models/common/bin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/common/bin.png
--------------------------------------------------------------------------------
/assets/mujoco_models/common/box.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/common/box.png
--------------------------------------------------------------------------------
/assets/mujoco_models/common/can.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/common/can.png
--------------------------------------------------------------------------------
/assets/mujoco_models/common/cardbox.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/common/cardbox.png
--------------------------------------------------------------------------------
/assets/mujoco_models/common/chair.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/common/chair.png
--------------------------------------------------------------------------------
/assets/mujoco_models/common/concrete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/common/concrete.png
--------------------------------------------------------------------------------
/assets/mujoco_models/common/cone.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/common/cone.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/common/field.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/common/field.png
--------------------------------------------------------------------------------
/assets/mujoco_models/common/grass.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/common/grass.png
--------------------------------------------------------------------------------
/assets/mujoco_models/common/lightwood.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/common/lightwood.png
--------------------------------------------------------------------------------
/assets/mujoco_models/common/lobby.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/common/lobby.png
--------------------------------------------------------------------------------
/assets/mujoco_models/common/materials.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/assets/mujoco_models/common/oak.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/common/oak.png
--------------------------------------------------------------------------------
/assets/mujoco_models/common/redwood.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/common/redwood.png
--------------------------------------------------------------------------------
/assets/mujoco_models/common/sky1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/common/sky1.png
--------------------------------------------------------------------------------
/assets/mujoco_models/common/skybox.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/assets/mujoco_models/common/table_texture1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/common/table_texture1.png
--------------------------------------------------------------------------------
/assets/mujoco_models/common/textured_packed_full.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/common/textured_packed_full.png
--------------------------------------------------------------------------------
/assets/mujoco_models/common/visual.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/assets/mujoco_models/common/zen_room.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/common/zen_room.png
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/Chest.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/Chest.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/Head.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/Head.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/Hips.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/Hips.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/L_Ankle.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/L_Ankle.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/L_Elbow.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/L_Elbow.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/L_Hand.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/L_Hand.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/L_Hip.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/L_Hip.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/L_Index1.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/L_Index1.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/L_Index2.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/L_Index2.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/L_Index3.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/L_Index3.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/L_Knee.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/L_Knee.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/L_Middle1.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/L_Middle1.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/L_Middle2.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/L_Middle2.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/L_Middle3.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/L_Middle3.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/L_Pinky1.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/L_Pinky1.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/L_Pinky2.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/L_Pinky2.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/L_Pinky3.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/L_Pinky3.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/L_Ring1.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/L_Ring1.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/L_Ring2.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/L_Ring2.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/L_Ring3.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/L_Ring3.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/L_Shoulder.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/L_Shoulder.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/L_Thorax.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/L_Thorax.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/L_Thumb1.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/L_Thumb1.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/L_Thumb2.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/L_Thumb2.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/L_Thumb3.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/L_Thumb3.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/L_Toe.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/L_Toe.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/L_Wrist.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/L_Wrist.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/LeftArm.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/LeftArm.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/LeftChest.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/LeftChest.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/LeftFoot.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/LeftFoot.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/LeftHand.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/LeftHand.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/LeftLeg.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/LeftLeg.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/LeftShoulder.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/LeftShoulder.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/LeftToe.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/LeftToe.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/LeftUpLeg.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/LeftUpLeg.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/LeftWrist.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/LeftWrist.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/Mouth.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/Mouth.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/Neck.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/Neck.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/Pelvis.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/Pelvis.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/R_Ankle.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/R_Ankle.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/R_Elbow.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/R_Elbow.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/R_Hand.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/R_Hand.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/R_Hip.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/R_Hip.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/R_Index1.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/R_Index1.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/R_Index2.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/R_Index2.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/R_Index3.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/R_Index3.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/R_Knee.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/R_Knee.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/R_Middle1.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/R_Middle1.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/R_Middle2.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/R_Middle2.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/R_Middle3.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/R_Middle3.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/R_Ring1.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/R_Ring1.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/R_Ring2.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/R_Ring2.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/R_Ring3.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/R_Ring3.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/R_Shoulder.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/R_Shoulder.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/R_Thorax.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/R_Thorax.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/R_Thumb1.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/R_Thumb1.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/R_Thumb2.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/R_Thumb2.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/R_Thumb3.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/R_Thumb3.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/R_Toe.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/R_Toe.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/R_Wrist.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/R_Wrist.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/R_pinky1.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/R_pinky1.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/R_pinky2.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/R_pinky2.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/R_pinky3.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/R_pinky3.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/RightArm.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/RightArm.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/RightChest.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/RightChest.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/RightFoot.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/RightFoot.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/RightHand.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/RightHand.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/RightLeg.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/RightLeg.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/RightShoulder.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/RightShoulder.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/RightToe.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/RightToe.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/RightUpLeg.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/RightUpLeg.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/RightWrist.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/RightWrist.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/Spine.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/Spine.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/Spine1.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/Spine1.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/Spine2.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/Spine2.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/geom/Torso.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/geom/Torso.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/mesh/bin.msh:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/mesh/bin.msh
--------------------------------------------------------------------------------
/assets/mujoco_models/mesh/box.msh:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/mesh/box.msh
--------------------------------------------------------------------------------
/assets/mujoco_models/mesh/can.msh:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/mesh/can.msh
--------------------------------------------------------------------------------
/assets/mujoco_models/mesh/cardbox.msh:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/mesh/cardbox.msh
--------------------------------------------------------------------------------
/assets/mujoco_models/mesh/chair.msh:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/mesh/chair.msh
--------------------------------------------------------------------------------
/assets/mujoco_models/mesh/chair.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/mesh/chair.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/mesh/flashlight.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/mesh/flashlight.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/mesh/grab_table.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/mesh/grab_table.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/mesh/headset.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/mesh/headset.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/mesh/lobby.msh:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/mesh/lobby.msh
--------------------------------------------------------------------------------
/assets/mujoco_models/mesh/table.msh:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/mesh/table.msh
--------------------------------------------------------------------------------
/assets/mujoco_models/mesh/table.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/mesh/table.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/mesh/table_1:
--------------------------------------------------------------------------------
1 | # Textures packed with a simple packer
2 | #
3 | # Wavefront material file
4 | # Converted by Meshlab Group
5 | #
6 |
7 | newmtl material_0
8 | Ka 0.200000 0.200000 0.200000
9 | Kd 1.000000 1.000000 1.000000
10 | Ks 1.000000 1.000000 1.000000
11 | Tr 1.000000
12 | illum 2
13 | Ns 0.000000
14 | map_Kd model_normalized_msh_packed_full.png
15 |
--------------------------------------------------------------------------------
/assets/mujoco_models/mesh/table_1.msh:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/mesh/table_1.msh
--------------------------------------------------------------------------------
/assets/mujoco_models/mesh/table_relive.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/mesh/table_relive.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/mesh/textured_packed.msh:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/mesh/textured_packed.msh
--------------------------------------------------------------------------------
/assets/mujoco_models/mesh/train.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/mesh/train.stl
--------------------------------------------------------------------------------
/assets/mujoco_models/mesh/zen_room.msh:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/assets/mujoco_models/mesh/zen_room.msh
--------------------------------------------------------------------------------
/assets/mujoco_models/template/cones.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
--------------------------------------------------------------------------------
/assets/mujoco_models/template/humanoid_template.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/assets/mujoco_models/template/humanoid_template_design.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/assets/mujoco_models/template/humanoid_template_local.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/assets/mujoco_models/template/humanoid_template_test.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/assets/mujoco_models/template/humanoid_template_vis.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/config/video_pose/prox/tcn_voxel_4_1.yml:
--------------------------------------------------------------------------------
1 | notes: "voxel mcp and sept, and better keypoint matching"
2 | proj_name: "scene+"
3 |
4 | data_specs:
5 | prox_path: sample_data/prox/qualitative
6 | train_files_path:
7 | # - [/hdd/zen/data/ActBound/AMASS/amass_copycat_take5_5.pkl, amass]
8 | - [sample_data/amass_copycat_take5.pkl, amass]
9 | - [sample_data/kinpoly_mocap_smpl_grad_height.pkl, amass]
10 | - [sample_data/h36m_train_30_qpos_fk.pkl, amass]
11 | # - [/hdd/zen/data/video_pose/h36m/data_fit/h36m_train_30_fk.p, scene_pose]
12 | test_files_path:
13 | # - [/hdd/zen/data/video_pose/h36m/data_fit/h36m_test_30_fk_valid.p, scene_pose]
14 | # - [/hdd/zen/data/video_pose/h36m/data_fit/h36m_test_30_fk.p, scene_pose]
15 | - [sample_data/thirdeye_anns_prox_overlap_no_clip.pkl, scene_pose]
16 |
17 | neutral_path: sample_data/standing_neutral.pkl
18 | t_min: 30
19 | t_max: 300
20 | fr_num: 120
21 | num_samples: 128
22 | batch_size: 1
23 | base_rot: [0.7071, 0.7071, 0.0, 0.0]
24 |
25 | seed: 1
26 | env_name: kin_res
27 | agent_name: embodied_agent
28 | # agent_name: scene_v2
29 |
30 | cc_cfg: uhc_explicit
31 | cc_iter: -1
32 |
33 | lr: 5.e-5
34 | weightdecay: 0.0
35 | num_epoch: 3000
36 | num_epoch_fix: 20
37 | save_n_epochs: 1000
38 |
39 | iter_method: iter
40 | shuffle: true
41 | has_z: true
42 | policy_optimizer: Adam
43 |
44 | features:
45 | use_img: true
46 | use_2d: true
47 | use_head: false
48 | use_vel: false
49 | smooth: false
50 |
51 | model_specs:
52 | use_sdf: false
53 | use_rnn: true
54 | use_rr: false
55 | use_rt: false
56 | use_rvel: True
57 | use_bvel: True
58 | use_rel2d: false
59 | use_2d: false
60 | use_3d_grad: false
61 | use_3d_grad_adpt: true
62 | use_3d_grad_sept: true
63 |
64 | use_3d_grad_ord: 2
65 | use_prior: true
66 | voxel_res: 16
67 | use_voxel: true
68 | use_mcp: true
69 |
70 | geo_trans: true
71 | geo_trans_cap: 0.1
72 |
73 | vel_l1_mul: 0.1
74 | load_scene: true
75 |
76 | use_tcn: True
77 | tcn_arch: "3,3,3,3"
78 | tcn_3dpos: false
79 | tcn_body: false
80 | tcn_traj: false
81 | casual_tcn: true
82 |
83 | rnn_hdim: 512
84 | model_name: kin_net_humor_res
85 | model_v: 1
86 | mlp_hsize: [1024, 512, 256]
87 | mlp_htype: 'gelu'
88 | # gt_rate: 0.05
89 | gt_rate: 0.0
90 | gt_rate_decay: true
91 | out_rot_rep: "aa"
92 | weights:
93 | l2_loss: 2.0
94 |
95 | learned_prior: false
96 | add_noise: true
97 | noise_std: 0.01
98 | remove_base: false
99 | init_update: false
100 | full_update: false
101 | optimizer: Adam
102 | humor_aa: True
103 |
104 | policy_specs:
105 | policy_name: kin_policy_humor_res
106 | log_std: -1
107 | fix_std: true
108 | gamma: 0.95
109 | tau: 0.95
110 | policy_htype: relu
111 | policy_hsize: [512, 256]
112 | policy_optimizer: 'Adam'
113 | # policy_lr: 5.e-6
114 | policy_lr: 2.e-5
115 | policy_momentum: 0.0
116 | policy_weightdecay: 0.0
117 | value_htype: relu
118 | value_hsize: [512, 256]
119 | value_optimizer: 'Adam'
120 | value_lr: 3.e-4
121 | value_momentum: 0.0
122 | value_weightdecay: 0.0
123 | clip_epsilon: 0.2
124 | fix_std: true
125 | reward_id: 'reprojection_reward3d_gt'
126 | end_reward: false
127 | min_batch_size: 1000
128 | # min_batch_size: 100
129 |
130 | rl_update: true
131 | init_update: true
132 | step_update: true
133 | full_update: false
134 |
135 | sampling_temp: 0.3
136 | sampling_freq: 0.5
137 |
138 | num_init_update: 0
139 | num_step_update: 30
140 | num_optim_epoch: 0
141 | warm_update_full: 50
142 | warm_update_eval: 1
143 | # warm_update_full: 50
144 |
145 | reward_weights:
146 | w_p: 0.1
147 | w_e: 0.15
148 | w_c: 0.1
149 | w_p_gt: 0.1
150 | w_e_gt: 0.15
151 | w_c_gt: 0.1
152 | w_kp: 0.3
153 |
154 | k_p: 2.0
155 | k_e: 5.0
156 | k_c: 100.0
157 | k_kp: 0.0001
158 | k_pc: 50.0
--------------------------------------------------------------------------------
/config/video_pose/prox/tcn_voxel_4_3.yml:
--------------------------------------------------------------------------------
1 | notes: "no sept grad"
2 | proj_name: "scene+"
3 |
4 | data_specs:
5 | prox_path: /hdd/zen/data/video_pose/prox/qualitative
6 | train_files_path:
7 | # - [/hdd/zen/data/ActBound/AMASS/amass_copycat_take5_5.pkl, amass]
8 | - [/hdd/zen/data/ActBound/AMASS/amass_copycat_take5.pkl, amass]
9 | - [/hdd/zen/data/ActBound/AMASS/kinpoly_mocap_smpl_grad_height.pkl, amass]
10 | - [/hdd/zen/data/ActBound/AMASS/h36m_train_30_qpos_fk.pkl, amass]
11 | # - [/hdd/zen/data/video_pose/h36m/data_fit/h36m_train_30_fk.p, scene_pose]
12 | test_files_path:
13 | # - [/hdd/zen/data/video_pose/h36m/data_fit/h36m_test_30_fk_valid.p, scene_pose]
14 | # - [/hdd/zen/data/video_pose/h36m/data_fit/h36m_test_30_fk.p, scene_pose]
15 | - [/hdd/zen/data/video_pose/prox/qualitative/thirdeye_anns_proxd_overlap_full.pkl, scene_pose]
16 |
17 | neutral_path: sample_data/standing_neutral.pkl
18 | t_min: 30
19 | t_max: 300
20 | fr_num: 120
21 | num_samples: 128
22 | batch_size: 1
23 | base_rot: [0.7071, 0.7071, 0.0, 0.0]
24 |
25 | seed: 1
26 | env_name: kin_res
27 | agent_name: scene_pretrain
28 | # agent_name: scene_v2
29 |
30 | cc_cfg: copycat_e_1
31 | cc_iter: -1
32 |
33 | lr: 5.e-5
34 | weightdecay: 0.0
35 | num_epoch: 3000
36 | num_epoch_fix: 20
37 | save_n_epochs: 1000
38 |
39 | iter_method: iter
40 | shuffle: true
41 | has_z: true
42 | policy_optimizer: Adam
43 |
44 | features:
45 | use_img: true
46 | use_2d: true
47 | use_head: false
48 | use_vel: false
49 | smooth: false
50 |
51 | model_specs:
52 | use_sdf: false
53 | use_rnn: true
54 | use_rr: false
55 | use_rt: false
56 | use_rvel: True
57 | use_bvel: True
58 | use_rel2d: false
59 | use_2d: false
60 | use_3d_grad: false
61 | use_3d_grad_adpt: true
62 | use_3d_grad_sept: false
63 |
64 | use_3d_grad_ord: 2
65 | use_prior: true
66 | voxel_res: 16
67 | use_voxel: true
68 | use_mcp: true
69 |
70 | geo_trans: true
71 | geo_trans_cap: 0.1
72 |
73 | vel_l1_mul: 0.1
74 | load_scene: true
75 |
76 | use_tcn: True
77 | tcn_arch: "3,3,3,3"
78 | tcn_3dpos: false
79 | tcn_body: false
80 | tcn_traj: false
81 | casual_tcn: true
82 |
83 | rnn_hdim: 512
84 | model_name: kin_net_humor_res
85 | model_v: 1
86 | mlp_hsize: [1024, 512, 256]
87 | mlp_htype: 'gelu'
88 | # gt_rate: 0.05
89 | gt_rate: 0.0
90 | gt_rate_decay: true
91 | out_rot_rep: "aa"
92 | weights:
93 | l2_loss: 2.0
94 |
95 | learned_prior: false
96 | add_noise: true
97 | noise_std: 0.01
98 | remove_base: false
99 | init_update: false
100 | full_update: false
101 | optimizer: Adam
102 | humor_aa: True
103 |
104 | policy_specs:
105 | policy_name: kin_policy_humor_res
106 | log_std: -1
107 | fix_std: true
108 | gamma: 0.95
109 | tau: 0.95
110 | policy_htype: relu
111 | policy_hsize: [512, 256]
112 | policy_optimizer: 'Adam'
113 | # policy_lr: 5.e-6
114 | policy_lr: 2.e-5
115 | policy_momentum: 0.0
116 | policy_weightdecay: 0.0
117 | value_htype: relu
118 | value_hsize: [512, 256]
119 | value_optimizer: 'Adam'
120 | value_lr: 3.e-4
121 | value_momentum: 0.0
122 | value_weightdecay: 0.0
123 | clip_epsilon: 0.2
124 | fix_std: true
125 | reward_id: 'reprojection_reward3d_gt'
126 | end_reward: false
127 | min_batch_size: 1000
128 | # min_batch_size: 100
129 |
130 | rl_update: true
131 | init_update: true
132 | step_update: true
133 | full_update: false
134 |
135 | sampling_temp: 0.3
136 | sampling_freq: 0.5
137 |
138 | num_init_update: 0
139 | num_step_update: 30
140 | num_optim_epoch: 0
141 | warm_update_full: 50
142 | warm_update_eval: 1
143 | # warm_update_full: 50
144 |
145 | reward_weights:
146 | w_p: 0.1
147 | w_e: 0.15
148 | w_c: 0.1
149 | w_p_gt: 0.1
150 | w_e_gt: 0.15
151 | w_c_gt: 0.1
152 | w_kp: 0.3
153 |
154 | k_p: 2.0
155 | k_e: 5.0
156 | k_c: 100.0
157 | k_kp: 0.0001
158 | k_pc: 50.0
--------------------------------------------------------------------------------
/config/video_pose/prox/tcn_voxel_4_5.yml:
--------------------------------------------------------------------------------
1 | notes: "voxel mcp and sept, and better keypoint matching"
2 | proj_name: "scene+"
3 |
4 | data_specs:
5 | prox_path: sample_data/prox/qualitative
6 | train_files_path:
7 | # - [/hdd/zen/data/ActBound/AMASS/amass_copycat_take5_5.pkl, amass]
8 | - [sample_data/amass_copycat_take5.pkl, amass]
9 | - [sample_data/kinpoly_mocap_smpl_grad_height.pkl, amass]
10 | - [sample_data/h36m_train_30_qpos_fk.pkl, amass]
11 | # - [/hdd/zen/data/video_pose/h36m/data_fit/h36m_train_30_fk.p, scene_pose]
12 | test_files_path:
13 | # - [/hdd/zen/data/video_pose/h36m/data_fit/h36m_test_30_fk_valid.p, scene_pose]
14 | # - [/hdd/zen/data/video_pose/h36m/data_fit/h36m_test_30_fk.p, scene_pose]
15 | - [sample_data/thirdeye_anns_prox_overlap_no_clip.pkl, scene_pose]
16 |
17 | neutral_path: sample_data/standing_neutral.pkl
18 | t_min: 30
19 | t_max: 300
20 | fr_num: 120
21 | num_samples: 128
22 | batch_size: 1
23 | base_rot: [0.7071, 0.7071, 0.0, 0.0]
24 |
25 | seed: 1
26 | env_name: kin_res
27 | agent_name: embodied_agent
28 |
29 | cc_cfg: uhc_explicit
30 | cc_iter: -1
31 |
32 | lr: 5.e-5
33 | weightdecay: 0.0
34 | num_epoch: 3000
35 | num_epoch_fix: 20
36 | save_n_epochs: 1000
37 |
38 | iter_method: iter
39 | shuffle: true
40 | has_z: true
41 | policy_optimizer: Adam
42 |
43 | features:
44 | use_img: true
45 | use_2d: true
46 | use_head: false
47 | use_vel: false
48 | smooth: false
49 |
50 | model_specs:
51 | use_sdf: false
52 | use_rnn: true
53 | use_rr: false
54 | use_rt: false
55 | use_rvel: True
56 | use_bvel: True
57 | use_rel2d: false
58 | use_2d: false
59 | use_3d_grad: false
60 | use_3d_grad_adpt: true
61 | use_3d_grad_sept: true
62 |
63 | use_3d_grad_ord: 2
64 | use_prior: true
65 | voxel_res: 16
66 | use_voxel: true
67 | use_mcp: true
68 |
69 | geo_trans: true
70 | geo_trans_cap: 0.1
71 |
72 | vel_l1_mul: 0.1
73 | load_scene: true
74 |
75 | use_tcn: True
76 | tcn_arch: "3,3,3,3"
77 | tcn_3dpos: false
78 | tcn_body: false
79 | tcn_traj: false
80 | casual_tcn: true
81 |
82 | rnn_hdim: 512
83 | model_name: kin_net_humor_res
84 | model_v: 1
85 | mlp_hsize: [1024, 512, 256]
86 | mlp_htype: 'gelu'
87 | # gt_rate: 0.05
88 | gt_rate: 0.0
89 | gt_rate_decay: true
90 | out_rot_rep: "aa"
91 | weights:
92 | l2_loss: 2.0
93 |
94 | learned_prior: false
95 | add_noise: true
96 | noise_std: 0.01
97 | remove_base: false
98 | init_update: false
99 | full_update: false
100 | optimizer: Adam
101 | humor_aa: True
102 |
103 | policy_specs:
104 | policy_name: kin_policy_humor_res
105 | log_std: -1
106 | fix_std: true
107 | gamma: 0.95
108 | tau: 0.95
109 | policy_htype: relu
110 | policy_hsize: [512, 256]
111 | policy_optimizer: 'Adam'
112 | # policy_lr: 5.e-6
113 | policy_lr: 2.e-5
114 | policy_momentum: 0.0
115 | policy_weightdecay: 0.0
116 | value_htype: relu
117 | value_hsize: [512, 256]
118 | value_optimizer: 'Adam'
119 | value_lr: 3.e-4
120 | value_momentum: 0.0
121 | value_weightdecay: 0.0
122 | clip_epsilon: 0.2
123 | fix_std: true
124 | reward_id: 'reprojection_reward3d_gt'
125 | end_reward: false
126 | min_batch_size: 1000
127 | # min_batch_size: 100
128 |
129 | rl_update: true
130 | init_update: true
131 | step_update: true
132 | full_update: false
133 |
134 | sampling_temp: 0.3
135 | sampling_freq: 0.5
136 |
137 | num_init_update: 0
138 | num_step_update: 30
139 | num_optim_epoch: 0
140 | warm_update_full: 50
141 | warm_update_eval: 1
142 | # warm_update_full: 50
143 |
144 | reward_weights:
145 | w_p: 0.1
146 | w_e: 0.15
147 | w_c: 0.1
148 | w_p_gt: 0.1
149 | w_e_gt: 0.15
150 | w_c_gt: 0.1
151 | w_kp: 0.3
152 |
153 | k_p: 2.0
154 | k_e: 5.0
155 | k_c: 100.0
156 | k_kp: 0.0001
157 | k_pc: 50.0
--------------------------------------------------------------------------------
/data/scenes/BasementSittingBooth_planes.txt:
--------------------------------------------------------------------------------
1 | 0.506996 0.328440 0.764646
2 | 0.999470 0.314247 0.764646
3 | 0.536640 1.357003 0.764646
4 | 1.029113 1.342810 0.764646
5 | -0.911688 1.898512 0.715182
6 | -0.440728 1.884938 0.715182
7 | -0.921995 1.540898 0.715182
8 | -0.451035 1.527325 0.715182
9 |
--------------------------------------------------------------------------------
/data/scenes/BasementSittingBooth_rectangles.txt:
--------------------------------------------------------------------------------
1 | 0.486246 1.255547 0.809097
2 | 0.486246 1.255547 0.000632
3 | -0.362004 1.295358 0.809097
4 | -0.362004 1.295358 0.000632
5 | 0.492856 1.396384 0.809097
6 | 0.492856 1.396384 0.000632
7 | -0.355394 1.436195 0.809097
8 | -0.355394 1.436195 0.000632
9 | 0.258757 -0.447855 0.809097
10 | 0.258757 -0.447855 0.000632
11 | -0.398685 -0.416999 0.809097
12 | -0.398685 -0.416999 0.000632
13 | 0.263330 -0.350422 0.809097
14 | 0.263330 -0.350422 0.000632
15 | -0.394112 -0.319566 0.809097
16 | -0.394112 -0.319566 0.000632
17 | 2.060010 1.512544 1.324071
18 | 2.060010 1.512544 -0.000995
19 | 1.990794 -0.610479 1.324071
20 | 1.990794 -0.610479 -0.000995
21 | 1.947363 1.516216 1.324071
22 | 1.947363 1.516216 -0.000995
23 | 1.878148 -0.606806 1.324071
24 | 1.878148 -0.606806 -0.000995
25 | 1.968871 1.319711 1.324071
26 | 1.968871 1.319711 -0.000995
27 | -0.363650 1.429183 1.324071
28 | -0.363650 1.429183 -0.000995
29 | 1.978387 1.522449 1.324071
30 | 1.978387 1.522449 -0.000995
31 | -0.354135 1.631922 1.324071
32 | -0.354135 1.631922 -0.000995
33 | 1.932428 1.183566 0.838521
34 | 1.932428 1.183566 0.004079
35 | 1.143295 1.220602 0.838521
36 | 1.143295 1.220602 0.004079
37 | 1.939039 1.324412 0.838521
38 | 1.939039 1.324412 0.004079
39 | 1.149905 1.361448 0.838521
40 | 1.149905 1.361448 0.004079
41 | 1.871672 -0.602187 1.324071
42 | 1.871672 -0.602187 -0.000995
43 | 1.124553 -0.567123 1.324071
44 | 1.124553 -0.567123 -0.000995
45 | 1.876251 -0.504636 1.324071
46 | 1.876251 -0.504636 -0.000995
47 | 1.129131 -0.469571 1.324071
48 | 1.129131 -0.469571 -0.000995
49 | 0.305902 -0.540837 1.324071
50 | 0.305902 -0.540837 -0.000995
51 | -0.401780 -0.507624 1.324071
52 | -0.401780 -0.507624 -0.000995
53 | 0.310480 -0.443298 1.324071
54 | 0.310480 -0.443298 -0.000995
55 | -0.397202 -0.410084 1.324071
56 | -0.397202 -0.410084 -0.000995
57 | 1.728217 -0.469889 0.809097
58 | 1.728217 -0.469889 0.000632
59 | 1.782901 1.236204 0.809097
60 | 1.782901 1.236204 0.000632
61 | 1.891304 -0.475116 0.809097
62 | 1.891304 -0.475116 0.000632
63 | 1.945988 1.230977 0.809097
64 | 1.945988 1.230977 0.000632
65 | 1.879308 -0.510273 0.809097
66 | 1.879308 -0.510273 0.000632
67 | 1.157152 -0.476380 0.809097
68 | 1.157152 -0.476380 0.000632
69 | 1.883882 -0.412819 0.809097
70 | 1.883882 -0.412819 0.000632
71 | 1.161726 -0.378926 0.809097
72 | 1.161726 -0.378926 0.000632
73 | -0.334801 1.640714 1.324071
74 | -0.334801 1.640714 -0.000995
75 | -0.405026 -0.513267 1.324071
76 | -0.405026 -0.513267 -0.000995
77 | -0.447449 1.644386 1.324071
78 | -0.447449 1.644386 -0.000995
79 | -0.517675 -0.509594 1.324071
80 | -0.517675 -0.509594 -0.000995
81 | -0.430164 -0.364720 0.809097
82 | -0.430164 -0.364720 0.000632
83 | -0.375515 1.340308 0.809097
84 | -0.375515 1.340308 0.000632
85 | -0.263407 -0.370064 0.809097
86 | -0.263407 -0.370064 0.000632
87 | -0.208757 1.334963 0.809097
88 | -0.208757 1.334963 0.000632
89 | 0.320797 1.415290 0.472647
90 | 0.320797 1.415290 -0.003678
91 | 0.260391 -0.437506 0.472647
92 | 0.260391 -0.437506 -0.003678
93 | -0.342202 1.436905 0.472647
94 | -0.342202 1.436905 -0.003678
95 | -0.402608 -0.415891 0.472647
96 | -0.402608 -0.415891 -0.003678
97 | 1.951610 1.347816 0.472647
98 | 1.951610 1.347816 -0.003678
99 | 1.924699 -0.505831 0.472647
100 | 1.924699 -0.505831 -0.003678
101 | 1.191029 1.358858 0.472647
102 | 1.191029 1.358858 -0.003678
103 | 1.164118 -0.494789 0.472647
104 | 1.164118 -0.494789 -0.003678
105 |
--------------------------------------------------------------------------------
/data/scenes/MPH112_cylinders.txt:
--------------------------------------------------------------------------------
1 | -1.725711 0.290116 0.392572
2 | -1.725711 0.291331 0.458580
3 | -1.708546 0.276419 0.392824
4 | -1.708546 0.277635 0.458832
5 | -1.693820 0.260659 0.393115
6 | -1.693820 0.261875 0.459123
7 | -1.682100 0.243441 0.393432
8 | -1.682100 0.244657 0.459440
9 | -1.673835 0.225427 0.393763
10 | -1.673835 0.226643 0.459771
11 | -1.669344 0.207309 0.394097
12 | -1.669344 0.208525 0.460105
13 | -1.668798 0.189783 0.394420
14 | -1.668798 0.190999 0.460428
15 | -1.672218 0.173523 0.394719
16 | -1.672218 0.174739 0.460727
17 | -1.679474 0.159154 0.394984
18 | -1.679474 0.160369 0.460992
19 | -1.690287 0.147228 0.395203
20 | -1.690287 0.148443 0.461211
21 | -1.704240 0.138202 0.395369
22 | -1.704240 0.139418 0.461377
23 | -1.720798 0.132425 0.395476
24 | -1.720798 0.133641 0.461484
25 | -1.739325 0.130118 0.395518
26 | -1.739325 0.131333 0.461526
27 | -1.759107 0.131370 0.395495
28 | -1.759107 0.132585 0.461503
29 | -1.779386 0.136132 0.395407
30 | -1.779386 0.137347 0.461416
31 | -1.799382 0.144221 0.395259
32 | -1.799382 0.145437 0.461267
33 | -1.818326 0.155328 0.395054
34 | -1.818326 0.156543 0.461062
35 | -1.835491 0.169024 0.394802
36 | -1.835491 0.170240 0.460810
37 | -1.850217 0.184784 0.394512
38 | -1.850217 0.186000 0.460520
39 | -1.861937 0.202002 0.394195
40 | -1.861937 0.203218 0.460203
41 | -1.870202 0.220016 0.393863
42 | -1.870202 0.221232 0.459871
43 | -1.874694 0.238134 0.393529
44 | -1.874694 0.239350 0.459537
45 | -1.875239 0.255660 0.393207
46 | -1.875239 0.256876 0.459215
47 | -1.871819 0.271920 0.392907
48 | -1.871819 0.273136 0.458915
49 | -1.864563 0.286290 0.392643
50 | -1.864563 0.287505 0.458651
51 | -1.853750 0.298216 0.392423
52 | -1.853750 0.299432 0.458431
53 | -1.839797 0.307241 0.392257
54 | -1.839797 0.308457 0.458265
55 | -1.823239 0.313019 0.392150
56 | -1.823239 0.314234 0.458159
57 | -1.804713 0.315326 0.392108
58 | -1.804713 0.316541 0.458116
59 | -1.784930 0.314074 0.392131
60 | -1.784930 0.315290 0.458139
61 | -1.764651 0.309312 0.392219
62 | -1.764651 0.310527 0.458227
63 | -1.744655 0.301222 0.392368
64 | -1.744655 0.302438 0.458376
65 | 0.304105 1.475354 0.356041
66 | 0.306863 1.475354 0.421989
67 | 0.303419 1.466222 0.356069
68 | 0.306177 1.466222 0.422018
69 | 0.301387 1.457441 0.356154
70 | 0.304145 1.457441 0.422103
71 | 0.298086 1.449348 0.356292
72 | 0.300844 1.449348 0.422241
73 | 0.293645 1.442255 0.356478
74 | 0.296403 1.442255 0.422427
75 | 0.288233 1.436434 0.356704
76 | 0.290991 1.436434 0.422653
77 | 0.282059 1.432108 0.356963
78 | 0.284817 1.432108 0.422911
79 | 0.275359 1.429445 0.357243
80 | 0.278117 1.429445 0.423191
81 | 0.268392 1.428545 0.357534
82 | 0.271150 1.428545 0.423483
83 | 0.261424 1.429445 0.357825
84 | 0.264182 1.429445 0.423774
85 | 0.254725 1.432108 0.358106
86 | 0.257483 1.432108 0.424054
87 | 0.248550 1.436434 0.358364
88 | 0.251308 1.436434 0.424313
89 | 0.243138 1.442255 0.358590
90 | 0.245896 1.442255 0.424539
91 | 0.238697 1.449348 0.358776
92 | 0.241455 1.449348 0.424725
93 | 0.235397 1.457441 0.358914
94 | 0.238155 1.457441 0.424863
95 | 0.233364 1.466222 0.358999
96 | 0.236122 1.466222 0.424948
97 | 0.232678 1.475354 0.359028
98 | 0.235436 1.475354 0.424976
99 | 0.233364 1.484486 0.358999
100 | 0.236122 1.484486 0.424948
101 | 0.235397 1.493267 0.358914
102 | 0.238155 1.493267 0.424863
103 | 0.238697 1.501360 0.358776
104 | 0.241455 1.501360 0.424725
105 | 0.243138 1.508453 0.358590
106 | 0.245896 1.508453 0.424539
107 | 0.248550 1.514274 0.358364
108 | 0.251308 1.514274 0.424313
109 | 0.254725 1.518600 0.358106
110 | 0.257483 1.518600 0.424054
111 | 0.261424 1.521264 0.357825
112 | 0.264182 1.521264 0.423774
113 | 0.268392 1.522163 0.357534
114 | 0.271150 1.522163 0.423483
115 | 0.275359 1.521264 0.357243
116 | 0.278117 1.521264 0.423191
117 | 0.282059 1.518600 0.356963
118 | 0.284817 1.518600 0.422911
119 | 0.288233 1.514274 0.356704
120 | 0.290991 1.514274 0.422653
121 | 0.293645 1.508453 0.356478
122 | 0.296403 1.508453 0.422427
123 | 0.298086 1.501360 0.356292
124 | 0.300844 1.501360 0.422241
125 | 0.301387 1.493267 0.356154
126 | 0.304145 1.493267 0.422103
127 | 0.303419 1.484486 0.356069
128 | 0.306177 1.484486 0.422018
129 |
--------------------------------------------------------------------------------
/data/scenes/MPH112_rectangles.txt:
--------------------------------------------------------------------------------
1 | -0.152893 1.594085 0.000000
2 | -0.152893 1.594085 0.380000
3 | 1.053050 -0.081632 0.000000
4 | 1.053050 -0.081632 0.380000
5 | -1.525633 0.606181 0.000000
6 | -1.525633 0.606181 0.380000
7 | -0.319689 -1.069535 0.000000
8 | -0.319689 -1.069535 0.380000
9 | 0.277645 1.318785 0.000079
10 | 0.277645 1.318785 0.355921
11 | 0.038022 1.685635 0.000079
12 | 0.038022 1.685635 0.355921
13 | 0.582587 1.517970 0.000079
14 | 0.582587 1.517970 0.355921
15 | 0.342963 1.884820 0.000079
16 | 0.342963 1.884820 0.355921
17 | -1.773090 -0.032428 0.000000
18 | -1.773090 -0.032428 0.360000
19 | -2.012713 0.334421 0.000000
20 | -2.012713 0.334421 0.360000
21 | -1.468149 0.166757 0.000000
22 | -1.468149 0.166757 0.360000
23 | -1.707773 0.533607 0.000000
24 | -1.707773 0.533607 0.360000
25 |
--------------------------------------------------------------------------------
/data/scenes/MPH11_cylinders.txt:
--------------------------------------------------------------------------------
1 | 2.213820 0.857610 0.780176
2 | 2.213820 0.857610 1.056791
3 | 2.233896 0.901687 0.780176
4 | 2.233896 0.901687 1.056791
5 | 2.258838 0.941915 0.780176
6 | 2.258838 0.941915 1.056791
7 | 2.287688 0.976749 0.780176
8 | 2.287688 0.976749 1.056791
9 | 2.319337 1.004850 0.780176
10 | 2.319337 1.004850 1.056791
11 | 2.352568 1.025138 0.780176
12 | 2.352568 1.025138 1.056791
13 | 2.386105 1.036834 0.780176
14 | 2.386105 1.036834 1.056791
15 | 2.418658 1.039487 0.780176
16 | 2.418658 1.039487 1.056791
17 | 2.448978 1.032996 0.780176
18 | 2.448978 1.032996 1.056791
19 | 2.475898 1.017611 0.780176
20 | 2.475898 1.017611 1.056791
21 | 2.498384 0.993922 0.780176
22 | 2.498384 0.993922 1.056791
23 | 2.515571 0.962840 0.780176
24 | 2.515571 0.962840 1.056791
25 | 2.526801 0.925560 0.780176
26 | 2.526801 0.925560 1.056791
27 | 2.531640 0.883514 0.780176
28 | 2.531640 0.883514 1.056791
29 | 2.529903 0.838317 0.780176
30 | 2.529903 0.838317 1.056791
31 | 2.521657 0.791708 0.780176
32 | 2.521657 0.791708 1.056791
33 | 2.507218 0.745476 0.780176
34 | 2.507218 0.745476 1.056791
35 | 2.487142 0.701399 0.780176
36 | 2.487142 0.701399 1.056791
37 | 2.462199 0.661170 0.780176
38 | 2.462199 0.661170 1.056791
39 | 2.433349 0.626336 0.780176
40 | 2.433349 0.626336 1.056791
41 | 2.401701 0.598235 0.780176
42 | 2.401701 0.598235 1.056791
43 | 2.368469 0.577947 0.780176
44 | 2.368469 0.577947 1.056791
45 | 2.334933 0.566252 0.780176
46 | 2.334933 0.566252 1.056791
47 | 2.302379 0.563599 0.780176
48 | 2.302379 0.563599 1.056791
49 | 2.272060 0.570089 0.780176
50 | 2.272060 0.570089 1.056791
51 | 2.245140 0.585475 0.780176
52 | 2.245140 0.585475 1.056791
53 | 2.222654 0.609164 0.780176
54 | 2.222654 0.609164 1.056791
55 | 2.205466 0.640245 0.780176
56 | 2.205466 0.640245 1.056791
57 | 2.194237 0.677526 0.780176
58 | 2.194237 0.677526 1.056791
59 | 2.189398 0.719572 0.780176
60 | 2.189398 0.719572 1.056791
61 | 2.191135 0.764768 0.780176
62 | 2.191135 0.764768 1.056791
63 | 2.199381 0.811378 0.780176
64 | 2.199381 0.811378 1.056791
65 | 0.462729 2.165356 0.013291
66 | 0.462729 2.165356 0.289907
67 | 0.479910 2.210640 0.013291
68 | 0.479910 2.210640 0.289907
69 | 0.502195 2.252399 0.013291
70 | 0.502195 2.252399 0.289907
71 | 0.528730 2.289028 0.013291
72 | 0.528730 2.289028 0.289907
73 | 0.558493 2.319119 0.013291
74 | 0.558493 2.319119 0.289907
75 | 0.590341 2.341516 0.013291
76 | 0.590341 2.341516 0.289907
77 | 0.623050 2.355358 0.013291
78 | 0.623050 2.355358 0.289907
79 | 0.655364 2.360113 0.013291
80 | 0.655364 2.360113 0.289907
81 | 0.686040 2.355598 0.013291
82 | 0.686040 2.355598 0.289907
83 | 0.713899 2.341988 0.013291
84 | 0.713899 2.341988 0.289907
85 | 0.737871 2.319805 0.013291
86 | 0.737871 2.319805 0.289907
87 | 0.757035 2.289901 0.013291
88 | 0.757035 2.289901 0.289907
89 | 0.770654 2.253426 0.013291
90 | 0.770654 2.253426 0.289907
91 | 0.778205 2.211781 0.013291
92 | 0.778205 2.211781 0.289907
93 | 0.779398 2.166567 0.013291
94 | 0.779398 2.166567 0.289907
95 | 0.774187 2.119521 0.013291
96 | 0.774187 2.119521 0.289907
97 | 0.762771 2.072452 0.013291
98 | 0.762771 2.072452 0.289907
99 | 0.745590 2.027168 0.013291
100 | 0.745590 2.027168 0.289907
101 | 0.723305 1.985409 0.013291
102 | 0.723305 1.985409 0.289907
103 | 0.696771 1.948780 0.013291
104 | 0.696771 1.948780 0.289907
105 | 0.667008 1.918689 0.013291
106 | 0.667008 1.918689 0.289907
107 | 0.635159 1.896292 0.013291
108 | 0.635159 1.896292 0.289907
109 | 0.602450 1.882450 0.013291
110 | 0.602450 1.882450 0.289907
111 | 0.570137 1.877695 0.013291
112 | 0.570137 1.877695 0.289907
113 | 0.539461 1.882209 0.013291
114 | 0.539461 1.882209 0.289907
115 | 0.511601 1.895820 0.013291
116 | 0.511601 1.895820 0.289907
117 | 0.487629 1.918003 0.013291
118 | 0.487629 1.918003 0.289907
119 | 0.468465 1.947907 0.013291
120 | 0.468465 1.947907 0.289907
121 | 0.454846 1.984382 0.013291
122 | 0.454846 1.984382 0.289907
123 | 0.447295 2.026027 0.013291
124 | 0.447295 2.026027 0.289907
125 | 0.446102 2.071241 0.013291
126 | 0.446102 2.071241 0.289907
127 | 0.451314 2.118287 0.013291
128 | 0.451314 2.118287 0.289907
129 |
--------------------------------------------------------------------------------
/data/scenes/MPH11_planes.txt:
--------------------------------------------------------------------------------
1 | 2.344007 0.594979 0.684877
2 | 2.713914 1.079626 0.684877
3 | 0.032087 2.359553 0.684877
4 | 0.401994 2.844200 0.684877
5 | 1.105181 0.889829 0.401374
6 | 1.205517 1.183630 0.401374
7 | 0.740253 1.014455 0.401374
8 | 0.840590 1.308256 0.401374
9 | 1.096825 0.828728 0.772403
10 | 1.119506 0.884300 0.403062
11 | 0.719094 0.956638 0.768452
12 | 0.741774 1.012210 0.399112
13 |
--------------------------------------------------------------------------------
/data/scenes/MPH11_rectangles.txt:
--------------------------------------------------------------------------------
1 | 0.739794 2.561499 0.030630
2 | 0.739794 2.561499 0.728903
3 | 0.385461 2.839355 0.030630
4 | 0.385461 2.839355 0.728903
5 | 0.320807 2.027191 0.030630
6 | 0.320807 2.027191 0.728903
7 | -0.033525 2.305047 0.030630
8 | -0.033525 2.305047 0.728903
9 | -0.152060 -1.183939 0.000000
10 | -0.152060 -1.183939 0.360000
11 | 0.912089 0.252816 0.000000
12 | 0.912089 0.252816 0.360000
13 | 0.629701 -1.762959 0.000000
14 | 0.629701 -1.762959 0.360000
15 | 1.693849 -0.326203 0.000000
16 | 1.693849 -0.326203 0.360000
17 | 0.012494 -1.192372 -0.007769
18 | 0.012494 -1.192372 0.511418
19 | -0.078704 -1.351949 -0.007769
20 | -0.078704 -1.351949 0.511418
21 | 0.604471 -1.530685 -0.007769
22 | 0.604471 -1.530685 0.511418
23 | 0.513274 -1.690262 -0.007769
24 | 0.513274 -1.690262 0.511418
25 | 0.809788 2.698584 0.773073
26 | 0.809788 2.698584 1.065890
27 | 0.410986 2.925989 0.773073
28 | 0.410986 2.925989 1.065890
29 | 0.471480 2.105292 0.773073
30 | 0.471480 2.105292 1.065890
31 | 0.072678 2.332698 0.773073
32 | 0.072678 2.332698 1.065890
33 | 0.464791 -1.669816 0.003991
34 | 0.464791 -1.669816 0.775441
35 | 0.613249 -1.778647 0.003991
36 | 0.613249 -1.778647 0.775441
37 | 1.558861 -0.177385 0.003991
38 | 1.558861 -0.177385 0.775441
39 | 1.707318 -0.286216 0.003991
40 | 1.707318 -0.286216 0.775441
41 | 1.068870 0.173054 -0.002080
42 | 1.068870 0.173054 0.517106
43 | 0.959722 0.025175 -0.002080
44 | 0.959722 0.025175 0.517106
45 | 1.617455 -0.231851 -0.002080
46 | 1.617455 -0.231851 0.517106
47 | 1.508307 -0.379730 -0.002080
48 | 1.508307 -0.379730 0.517106
49 | -0.356534 -2.470848 0.000000
50 | -0.356534 -2.470848 0.500000
51 | 0.141486 -1.791855 0.000000
52 | 0.141486 -1.791855 0.500000
53 | -0.048783 -2.696574 0.000000
54 | -0.048783 -2.696574 0.500000
55 | 0.449237 -2.017581 0.000000
56 | 0.449237 -2.017581 0.500000
57 | -1.062709 0.994779 0.000441
58 | -1.062709 0.994779 0.315747
59 | -0.754698 1.410639 0.000441
60 | -0.754698 1.410639 0.315747
61 | -0.848814 0.836355 0.000441
62 | -0.848814 0.836355 0.315747
63 | -0.540804 1.252215 0.000441
64 | -0.540804 1.252215 0.315747
65 | 1.711730 0.953778 0.011559
66 | 1.711730 0.953778 0.384147
67 | 2.038658 1.487068 0.011559
68 | 2.038658 1.487068 0.384147
69 | 2.019584 0.765051 0.011559
70 | 2.019584 0.765051 0.384147
71 | 2.346512 1.298341 0.011559
72 | 2.346512 1.298341 0.384147
73 |
--------------------------------------------------------------------------------
/data/scenes/MPH16_cylinders.txt:
--------------------------------------------------------------------------------
1 | -0.327131 -1.458503 0.006295
2 | -0.327131 -1.458503 0.282910
3 | -0.315031 -1.411605 0.006295
4 | -0.315031 -1.411605 0.282910
5 | -0.297470 -1.367650 0.006295
6 | -0.297470 -1.367650 0.282910
7 | -0.275121 -1.328327 0.006295
8 | -0.275121 -1.328327 0.282910
9 | -0.248846 -1.295147 0.006295
10 | -0.248846 -1.295147 0.282910
11 | -0.219652 -1.269386 0.006295
12 | -0.219652 -1.269386 0.282910
13 | -0.188662 -1.252033 0.006295
14 | -0.188662 -1.252033 0.282910
15 | -0.157066 -1.243756 0.006295
16 | -0.157066 -1.243756 0.282910
17 | -0.126080 -1.244872 0.006295
18 | -0.126080 -1.244872 0.282910
19 | -0.096894 -1.255338 0.006295
20 | -0.096894 -1.255338 0.282910
21 | -0.070629 -1.274752 0.006295
22 | -0.070629 -1.274752 0.282910
23 | -0.048295 -1.302369 0.006295
24 | -0.048295 -1.302369 0.282910
25 | -0.030749 -1.337127 0.006295
26 | -0.030749 -1.337127 0.282910
27 | -0.018668 -1.377690 0.006295
28 | -0.018668 -1.377690 0.282910
29 | -0.012513 -1.422499 0.006295
30 | -0.012513 -1.422499 0.282910
31 | -0.012523 -1.469832 0.006295
32 | -0.012523 -1.469832 0.282910
33 | -0.018697 -1.517871 0.006295
34 | -0.018697 -1.517871 0.282910
35 | -0.030797 -1.564769 0.006295
36 | -0.030797 -1.564769 0.282910
37 | -0.048358 -1.608724 0.006295
38 | -0.048358 -1.608724 0.282910
39 | -0.070706 -1.648047 0.006295
40 | -0.070706 -1.648047 0.282910
41 | -0.096982 -1.681226 0.006295
42 | -0.096982 -1.681226 0.282910
43 | -0.126176 -1.706988 0.006295
44 | -0.126176 -1.706988 0.282910
45 | -0.157166 -1.724340 0.006295
46 | -0.157166 -1.724340 0.282910
47 | -0.188761 -1.732618 0.006295
48 | -0.188761 -1.732618 0.282910
49 | -0.219748 -1.731502 0.006295
50 | -0.219748 -1.731502 0.282910
51 | -0.248934 -1.721036 0.006295
52 | -0.248934 -1.721036 0.282910
53 | -0.275199 -1.701621 0.006295
54 | -0.275199 -1.701621 0.282910
55 | -0.297533 -1.674004 0.006295
56 | -0.297533 -1.674004 0.282910
57 | -0.315078 -1.639247 0.006295
58 | -0.315078 -1.639247 0.282910
59 | -0.327160 -1.598684 0.006295
60 | -0.327160 -1.598684 0.282910
61 | -0.333315 -1.553875 0.006295
62 | -0.333315 -1.553875 0.282910
63 | -0.333305 -1.506542 0.006295
64 | -0.333305 -1.506542 0.282910
65 |
--------------------------------------------------------------------------------
/data/scenes/MPH16_planes.txt:
--------------------------------------------------------------------------------
1 | -1.957716 -0.173875 0.736482
2 | -2.269130 -0.725176 0.736482
3 | 0.630081 -1.635643 0.736482
4 | 0.318668 -2.186944 0.736482
5 | -0.796873 -0.408405 0.404123
6 | -0.808380 -0.780716 0.404123
7 | -0.375104 -0.421441 0.404123
8 | -0.386611 -0.793751 0.404123
9 | -0.799080 -0.275023 0.821611
10 | -0.808199 -0.397165 0.380994
11 | -0.361660 -0.294387 0.817925
12 | -0.370779 -0.416528 0.377309
13 |
--------------------------------------------------------------------------------
/data/scenes/MPH16_rectangles.txt:
--------------------------------------------------------------------------------
1 | -0.225729 -1.974223 0.014294
2 | -0.225729 -1.974223 0.670541
3 | 0.277945 -2.267491 0.014294
4 | 0.277945 -2.267491 0.670541
5 | 0.153026 -1.323728 0.014294
6 | 0.153026 -1.323728 0.670541
7 | 0.656701 -1.616996 0.014294
8 | 0.656701 -1.616996 0.670541
9 | 1.329569 1.661001 0.002782
10 | 1.329569 1.661001 0.604568
11 | -0.292861 2.531020 0.002782
12 | -0.292861 2.531020 0.604568
13 | 1.504289 1.986823 0.002782
14 | 1.504289 1.986823 0.604568
15 | -0.118140 2.856843 0.002782
16 | -0.118140 2.856843 0.604568
17 | 0.809391 -1.008317 -0.008573
18 | 0.803920 -1.008317 0.309845
19 | 0.939615 -0.768714 -0.006336
20 | 0.934144 -0.768714 0.312083
21 | 0.976587 -1.099214 -0.005700
22 | 0.971115 -1.099214 0.312718
23 | 1.106811 -0.859612 -0.003463
24 | 1.101339 -0.859612 0.314956
25 | 0.556493 -1.655585 0.841973
26 | 0.556493 -1.655585 1.134790
27 | 0.124654 -1.499793 0.841973
28 | 0.124654 -1.499793 1.134790
29 | 0.324724 -2.298026 0.841973
30 | 0.324724 -2.298026 1.134790
31 | -0.107115 -2.142234 0.841973
32 | -0.107115 -2.142234 1.134790
33 | -0.447388 0.446015 0.005187
34 | -0.447321 0.448309 0.486480
35 | -1.199482 0.870097 0.003270
36 | -1.199415 0.872390 0.484563
37 | 0.454807 2.045992 -0.002563
38 | 0.454874 2.048285 0.478730
39 | -0.297287 2.470074 -0.004480
40 | -0.297220 2.472367 0.476813
41 | 1.481023 0.419738 0.004251
42 | 1.473355 0.419738 0.450511
43 | 1.718924 0.857458 0.008339
44 | 1.711256 0.857458 0.454599
45 | 1.744396 0.276552 0.008777
46 | 1.736728 0.276552 0.455037
47 | 1.982297 0.714272 0.012865
48 | 1.974629 0.714272 0.459125
49 |
--------------------------------------------------------------------------------
/data/scenes/MPH1Library_planes.txt:
--------------------------------------------------------------------------------
1 | 2.592911 -1.338144 0.741410
2 | 2.559550 -1.303995 0.407804
3 | 2.323506 -1.534060 0.748296
4 | 2.290145 -1.499910 0.414690
5 | 0.360918 -1.460994 0.724587
6 | 0.370525 -1.414105 0.390123
7 | -0.025249 -1.321314 0.733076
8 | -0.015641 -1.274425 0.398612
9 | 2.560429 -1.303679 0.422129
10 | 2.372602 -1.052822 0.422129
11 | 2.303127 -1.496332 0.422129
12 | 2.115299 -1.245475 0.422129
13 | -0.328050 0.292083 0.422129
14 | -0.052164 0.086221 0.422129
15 | -0.079149 0.625648 0.422129
16 | 0.196737 0.419786 0.422129
17 | 0.384227 -1.416647 0.399742
18 | 0.509584 -1.065886 0.399742
19 | -0.013130 -1.274637 0.399742
20 | 0.112228 -0.923876 0.399742
21 | 1.846716 0.113476 0.407245
22 | 1.811708 -0.257363 0.407245
23 | 2.266818 0.073818 0.407245
24 | 2.231811 -0.297022 0.407245
25 | 1.953640 -1.638887 0.710505
26 | 2.475398 -0.524512 0.710505
27 | 0.065405 -0.754803 0.710505
28 | 0.587163 0.359573 0.710505
29 | 1.858371 0.162201 0.726153
30 | 1.860621 0.114390 0.391689
31 | 2.267055 0.122042 0.734642
32 | 2.269305 0.074232 0.400178
33 | 0.691351 0.707045 0.729737
34 | 0.704488 0.661026 0.395309
35 | 1.073740 0.758246 0.737712
36 | 1.086877 0.712226 0.403284
37 | 0.702071 0.653941 0.410590
38 | 0.748488 0.362897 0.410590
39 | 1.092088 0.716143 0.410590
40 | 1.138506 0.425099 0.410590
41 | -0.371394 0.327523 0.741038
42 | -0.329432 0.304499 0.406573
43 | -0.123919 0.655230 0.749527
44 | -0.081958 0.632205 0.415062
45 |
--------------------------------------------------------------------------------
/data/scenes/MPH1Library_rectangles.txt:
--------------------------------------------------------------------------------
1 | -1.205145 0.372027 0.001706
2 | -1.205145 0.372027 0.645150
3 | -1.435601 0.461653 0.001706
4 | -1.435601 0.461653 0.645150
5 | -0.956661 1.010956 0.001706
6 | -0.956661 1.010956 0.645150
7 | -1.187117 1.100582 0.001706
8 | -1.187117 1.100582 0.645150
9 | -1.634085 -0.668160 0.012156
10 | -1.634085 -0.668160 0.923877
11 | -1.874788 -0.574549 0.012156
12 | -1.874788 -0.574549 0.923877
13 | -1.319674 0.140287 0.012156
14 | -1.319674 0.140287 0.923877
15 | -1.560377 0.233898 0.012156
16 | -1.560377 0.233898 0.923877
17 |
--------------------------------------------------------------------------------
/data/scenes/MPH8_circles.txt:
--------------------------------------------------------------------------------
1 | 0.049936 0.194214 0.681781
2 | -0.031222 0.186214 0.681781
3 | -0.109261 0.162522 0.681781
4 | -0.181182 0.124048 0.681781
5 | -0.244221 0.072270 0.681781
6 | -0.295956 0.009179 0.681781
7 | -0.334398 -0.062802 0.681781
8 | -0.358071 -0.140905 0.681781
9 | -0.366064 -0.222130 0.681781
10 | -0.358071 -0.303355 0.681781
11 | -0.334398 -0.381458 0.681781
12 | -0.295956 -0.453438 0.681781
13 | -0.244221 -0.516530 0.681781
14 | -0.181182 -0.568308 0.681781
15 | -0.109261 -0.606782 0.681781
16 | -0.031222 -0.630474 0.681781
17 | 0.049936 -0.638474 0.681781
18 | 0.131093 -0.630474 0.681781
19 | 0.209132 -0.606782 0.681781
20 | 0.281053 -0.568307 0.681781
21 | 0.344092 -0.516530 0.681781
22 | 0.395827 -0.453438 0.681781
23 | 0.434269 -0.381458 0.681781
24 | 0.457942 -0.303355 0.681781
25 | 0.465936 -0.222130 0.681781
26 | 0.457942 -0.140905 0.681781
27 | 0.434269 -0.062802 0.681781
28 | 0.395827 0.009178 0.681781
29 | 0.344092 0.072270 0.681781
30 | 0.281053 0.124048 0.681781
31 | 0.209132 0.162522 0.681781
32 | 0.131093 0.186214 0.681781
33 |
--------------------------------------------------------------------------------
/data/scenes/MPH8_cylinders.txt:
--------------------------------------------------------------------------------
1 | 2.544208 0.337485 0.735805
2 | 2.544208 0.337485 0.862883
3 | 2.583138 0.340510 0.735805
4 | 2.583138 0.340510 0.862883
5 | 2.621503 0.337455 0.735805
6 | 2.621503 0.337455 0.862883
7 | 2.657828 0.328438 0.735805
8 | 2.657828 0.328438 0.862883
9 | 2.690719 0.313806 0.735805
10 | 2.690719 0.313806 0.862883
11 | 2.718910 0.294121 0.735805
12 | 2.718910 0.294121 0.862883
13 | 2.741318 0.270140 0.735805
14 | 2.741318 0.270140 0.862883
15 | 2.757083 0.242783 0.735805
16 | 2.757083 0.242783 0.862883
17 | 2.765598 0.213103 0.735805
18 | 2.765598 0.213103 0.862883
19 | 2.766537 0.182240 0.735805
20 | 2.766537 0.182240 0.862883
21 | 2.759862 0.151379 0.735805
22 | 2.759862 0.151379 0.862883
23 | 2.745831 0.121708 0.735805
24 | 2.745831 0.121708 0.862883
25 | 2.724983 0.094366 0.735805
26 | 2.724983 0.094366 0.862883
27 | 2.698119 0.070403 0.735805
28 | 2.698119 0.070403 0.862883
29 | 2.666271 0.050742 0.735805
30 | 2.666271 0.050742 0.862883
31 | 2.630663 0.036137 0.735805
32 | 2.630663 0.036137 0.862883
33 | 2.592664 0.027149 0.735805
34 | 2.592664 0.027149 0.862883
35 | 2.553734 0.024125 0.735805
36 | 2.553734 0.024125 0.862883
37 | 2.515369 0.027180 0.735805
38 | 2.515369 0.027180 0.862883
39 | 2.479043 0.036196 0.735805
40 | 2.479043 0.036196 0.862883
41 | 2.446153 0.050828 0.735805
42 | 2.446153 0.050828 0.862883
43 | 2.417962 0.070513 0.735805
44 | 2.417962 0.070513 0.862883
45 | 2.395553 0.094495 0.735805
46 | 2.395553 0.094495 0.862883
47 | 2.379789 0.121852 0.735805
48 | 2.379789 0.121852 0.862883
49 | 2.371274 0.151532 0.735805
50 | 2.371274 0.151532 0.862883
51 | 2.370335 0.182395 0.735805
52 | 2.370335 0.182395 0.862883
53 | 2.377010 0.213255 0.735805
54 | 2.377010 0.213255 0.862883
55 | 2.391041 0.242927 0.735805
56 | 2.391041 0.242927 0.862883
57 | 2.411889 0.270269 0.735805
58 | 2.411889 0.270269 0.862883
59 | 2.438753 0.294231 0.735805
60 | 2.438753 0.294231 0.862883
61 | 2.470601 0.313893 0.735805
62 | 2.470601 0.313893 0.862883
63 | 2.506209 0.328498 0.735805
64 | 2.506209 0.328498 0.862883
65 | 2.525166 -0.401641 0.010965
66 | 2.525166 -0.401641 0.287580
67 | 2.573505 -0.404659 0.010965
68 | 2.573505 -0.404659 0.287580
69 | 2.619987 -0.413596 0.010965
70 | 2.619987 -0.413596 0.287580
71 | 2.662826 -0.428109 0.010965
72 | 2.662826 -0.428109 0.287580
73 | 2.700373 -0.447639 0.010965
74 | 2.700373 -0.447639 0.287580
75 | 2.731188 -0.471438 0.010965
76 | 2.731188 -0.471438 0.287580
77 | 2.754086 -0.498590 0.010965
78 | 2.754086 -0.498590 0.287580
79 | 2.768186 -0.528051 0.010965
80 | 2.768186 -0.528051 0.287580
81 | 2.772947 -0.558689 0.010965
82 | 2.772947 -0.558689 0.287580
83 | 2.768186 -0.589328 0.010965
84 | 2.768186 -0.589328 0.287580
85 | 2.754086 -0.618789 0.010965
86 | 2.754086 -0.618789 0.287580
87 | 2.731188 -0.645940 0.010965
88 | 2.731188 -0.645940 0.287580
89 | 2.700373 -0.669739 0.010965
90 | 2.700373 -0.669739 0.287580
91 | 2.662826 -0.689270 0.010965
92 | 2.662826 -0.689270 0.287580
93 | 2.619987 -0.703783 0.010965
94 | 2.619987 -0.703783 0.287580
95 | 2.573505 -0.712720 0.010965
96 | 2.573505 -0.712720 0.287580
97 | 2.525166 -0.715737 0.010965
98 | 2.525166 -0.715737 0.287580
99 | 2.476826 -0.712720 0.010965
100 | 2.476826 -0.712720 0.287580
101 | 2.430344 -0.703783 0.010965
102 | 2.430344 -0.703783 0.287580
103 | 2.387506 -0.689270 0.010965
104 | 2.387506 -0.689270 0.287580
105 | 2.349958 -0.669739 0.010965
106 | 2.349958 -0.669739 0.287580
107 | 2.319143 -0.645940 0.010965
108 | 2.319143 -0.645940 0.287580
109 | 2.296245 -0.618789 0.010965
110 | 2.296245 -0.618789 0.287580
111 | 2.282145 -0.589328 0.010965
112 | 2.282145 -0.589328 0.287580
113 | 2.277384 -0.558689 0.010965
114 | 2.277384 -0.558689 0.287580
115 | 2.282145 -0.528051 0.010965
116 | 2.282145 -0.528051 0.287580
117 | 2.296245 -0.498590 0.010965
118 | 2.296245 -0.498590 0.287580
119 | 2.319143 -0.471438 0.010965
120 | 2.319143 -0.471438 0.287580
121 | 2.349957 -0.447639 0.010965
122 | 2.349957 -0.447639 0.287580
123 | 2.387506 -0.428109 0.010965
124 | 2.387506 -0.428109 0.287580
125 | 2.430344 -0.413596 0.010965
126 | 2.430344 -0.413596 0.287580
127 | 2.476826 -0.404659 0.010965
128 | 2.476826 -0.404659 0.287580
129 |
--------------------------------------------------------------------------------
/data/scenes/MPH8_planes.txt:
--------------------------------------------------------------------------------
1 | 2.085618 -0.506154 0.723656
2 | 2.709852 -0.505520 0.723656
3 | 2.084024 1.062304 0.723656
4 | 2.708258 1.062938 0.723656
5 | -0.779253 -0.632943 0.422129
6 | -0.438638 -0.482181 0.422129
7 | -0.950042 -0.247080 0.422129
8 | -0.609428 -0.096318 0.422129
9 | 1.465460 0.277072 0.446747
10 | 1.761752 0.015948 0.446747
11 | 1.710015 0.554564 0.446747
12 | 2.006307 0.293440 0.446747
13 | 1.620483 0.623572 0.807055
14 | 1.710497 0.547398 0.453044
15 | 1.377509 0.349959 0.804149
16 | 1.467522 0.273785 0.450138
17 | 0.606993 -0.622787 0.423459
18 | 1.057573 -0.701026 0.423459
19 | 0.681903 -0.191378 0.423459
20 | 1.132483 -0.269617 0.423459
21 | 1.229296 -0.302884 0.869742
22 | 1.131838 -0.273439 0.423912
23 | 1.152664 -0.728511 0.858384
24 | 1.055206 -0.699066 0.412553
25 | -0.966523 -0.709180 0.823601
26 | -0.783949 -0.631643 0.411534
27 | -1.138069 -0.306319 0.823399
28 | -0.955495 -0.228783 0.411332
29 |
--------------------------------------------------------------------------------
/data/scenes/MPH8_rectangles.txt:
--------------------------------------------------------------------------------
1 | 2.683774 0.603261 -0.005931
2 | 2.683774 0.603261 0.692342
3 | 2.678474 1.008628 -0.005931
4 | 2.678474 1.008628 0.692342
5 | 2.055744 0.595050 -0.005931
6 | 2.055744 0.595050 0.692342
7 | 2.050444 1.000417 -0.005931
8 | 2.050444 1.000417 0.692342
9 | -3.045974 -0.041307 0.001706
10 | -3.045974 -0.041307 0.645150
11 | -3.045974 0.238285 0.001706
12 | -3.045974 0.238285 0.645150
13 | -2.620847 -0.041307 0.001706
14 | -2.620847 -0.041307 0.645150
15 | -2.620847 0.238285 0.001706
16 | -2.620847 0.238285 0.645150
17 | -0.682252 0.495603 0.000000
18 | -0.682252 0.495603 0.360000
19 | -0.680767 1.142224 0.000000
20 | -0.680767 1.142224 0.360000
21 | 0.599377 0.492658 0.000000
22 | 0.599377 0.492658 0.360000
23 | 0.600863 1.139279 0.000000
24 | 0.600863 1.139279 0.360000
25 | 0.591718 0.494331 0.004840
26 | 0.591718 0.494331 0.528566
27 | 0.593204 1.140949 0.004840
28 | 0.593204 1.140949 0.528566
29 | 0.764763 0.493933 0.004840
30 | 0.764763 0.493933 0.528566
31 | 0.766249 1.140551 0.004840
32 | 0.766249 1.140551 0.528566
33 | -0.820078 0.494331 0.004840
34 | -0.820078 0.494331 0.528566
35 | -0.818592 1.140949 0.004840
36 | -0.818592 1.140949 0.528566
37 | -0.647033 0.493933 0.004840
38 | -0.647033 0.493933 0.528566
39 | -0.645548 1.140551 0.004840
40 | -0.645548 1.140551 0.528566
41 | -3.067347 0.288796 -0.000485
42 | -3.067347 0.288796 0.466485
43 | -3.067347 1.331231 -0.000485
44 | -3.067347 1.331231 0.466485
45 | -1.034619 0.288796 -0.000485
46 | -1.034619 0.288796 0.466485
47 | -1.034619 1.331231 -0.000485
48 | -1.034619 1.331231 0.466485
49 | -0.818518 1.158597 -0.002935
50 | -0.818518 1.158597 0.754726
51 | -0.818066 1.355084 -0.002935
52 | -0.818066 1.355084 0.754726
53 | 0.757824 1.154976 -0.002935
54 | 0.757824 1.154976 0.754726
55 | 0.758275 1.351462 -0.002935
56 | 0.758275 1.351462 0.754726
57 | 1.957742 1.051665 0.003168
58 | 1.957742 1.051665 0.540842
59 | 1.753669 1.401941 0.003168
60 | 1.753669 1.401941 0.540842
61 | 1.507978 0.789629 0.003168
62 | 1.507978 0.789629 0.540842
63 | 1.303905 1.139904 0.003168
64 | 1.303905 1.139904 0.540842
65 |
--------------------------------------------------------------------------------
/data/scenes/N0SittingBooth_cylinders.txt:
--------------------------------------------------------------------------------
1 | 3.138287 0.825547 0.719005
2 | 3.138558 0.824362 0.785012
3 | 3.125350 0.832269 0.719179
4 | 3.125621 0.831084 0.785186
5 | 3.114007 0.841501 0.719391
6 | 3.114278 0.840316 0.785399
7 | 3.104693 0.852888 0.719634
8 | 3.104964 0.851704 0.785641
9 | 3.097766 0.865993 0.719897
10 | 3.098037 0.864808 0.785905
11 | 3.093493 0.880312 0.720172
12 | 3.093764 0.879127 0.786179
13 | 3.092037 0.895294 0.720447
14 | 3.092308 0.894110 0.786454
15 | 3.093456 0.910365 0.720711
16 | 3.093727 0.909180 0.786719
17 | 3.097693 0.924944 0.720956
18 | 3.097964 0.923759 0.786963
19 | 3.104587 0.938472 0.721170
20 | 3.104858 0.937287 0.787178
21 | 3.113872 0.950428 0.721347
22 | 3.114143 0.949243 0.787354
23 | 3.125191 0.960354 0.721478
24 | 3.125463 0.959169 0.787486
25 | 3.138111 0.967867 0.721560
26 | 3.138382 0.966682 0.787568
27 | 3.152133 0.972679 0.721589
28 | 3.152404 0.971495 0.787597
29 | 3.166719 0.974606 0.721564
30 | 3.166991 0.973421 0.787571
31 | 3.181310 0.973572 0.721485
32 | 3.181581 0.972387 0.787493
33 | 3.195343 0.969618 0.721357
34 | 3.195614 0.968434 0.787364
35 | 3.208280 0.962896 0.721183
36 | 3.208551 0.961712 0.787190
37 | 3.219623 0.953664 0.720970
38 | 3.219894 0.952479 0.786978
39 | 3.228937 0.942277 0.720728
40 | 3.229208 0.941092 0.786735
41 | 3.235864 0.929172 0.720464
42 | 3.236135 0.927987 0.786472
43 | 3.240137 0.914853 0.720190
44 | 3.240408 0.913669 0.786197
45 | 3.241593 0.899871 0.719915
46 | 3.241864 0.898686 0.785922
47 | 3.240174 0.884800 0.719650
48 | 3.240445 0.883616 0.785658
49 | 3.235937 0.870221 0.719406
50 | 3.236208 0.869036 0.785413
51 | 3.229043 0.856694 0.719191
52 | 3.229314 0.855509 0.785199
53 | 3.219758 0.844737 0.719015
54 | 3.220029 0.843552 0.785022
55 | 3.208438 0.834812 0.718883
56 | 3.208710 0.833627 0.784891
57 | 3.195519 0.827298 0.718801
58 | 3.195790 0.826114 0.784809
59 | 3.181497 0.822486 0.718772
60 | 3.181768 0.821301 0.784780
61 | 3.166910 0.820560 0.718798
62 | 3.167181 0.819375 0.784805
63 | 3.152320 0.821593 0.718876
64 | 3.152591 0.820408 0.784884
65 |
--------------------------------------------------------------------------------
/data/scenes/N0SittingBooth_planes.txt:
--------------------------------------------------------------------------------
1 | 0.403129 -0.346964 0.721814
2 | 1.389904 -0.086905 0.721814
3 | 0.143951 0.636468 0.721814
4 | 1.130727 0.896527 0.721814
5 | 2.581036 0.271697 0.732727
6 | 3.563866 0.544692 0.703128
7 | 2.309078 1.251641 0.740501
8 | 3.291907 1.524636 0.710902
9 |
--------------------------------------------------------------------------------
/data/scenes/N0SittingBooth_rectangles.txt:
--------------------------------------------------------------------------------
1 | 1.654577 0.065788 0.063843
2 | 1.854675 0.059039 1.319319
3 | 1.374295 1.056150 0.113839
4 | 1.574393 1.049401 1.369314
5 | 1.838453 0.119291 0.034825
6 | 2.038551 0.112542 1.290300
7 | 1.558170 1.109653 0.084820
8 | 1.758269 1.102904 1.340296
9 | -0.034067 -0.473301 -0.004000
10 | -0.034067 -0.473301 0.445236
11 | -0.293677 0.550231 -0.004000
12 | -0.293677 0.550231 0.445236
13 | 0.334690 -0.379769 -0.004000
14 | 0.334690 -0.379769 0.445236
15 | 0.075080 0.643762 -0.004000
16 | 0.075080 0.643762 0.445236
17 | -0.090575 -0.497070 0.080729
18 | -0.301933 -0.503819 1.334358
19 | -0.372146 0.493292 0.038589
20 | -0.583503 0.486543 1.292218
21 | 0.092938 -0.443566 0.111956
22 | -0.118419 -0.450315 1.365586
23 | -0.188632 0.546796 0.069816
24 | -0.399989 0.540047 1.323446
25 | 3.835067 0.695875 0.010315
26 | 4.035165 0.689126 1.265791
27 | 3.554785 1.686237 0.060311
28 | 3.754883 1.679488 1.315787
29 | 4.018943 0.749379 -0.018703
30 | 4.219041 0.742630 1.236773
31 | 3.738661 1.739740 0.031292
32 | 3.938759 1.732991 1.286768
33 | 1.391402 -0.092818 -0.004000
34 | 1.391402 -0.092818 0.445236
35 | 1.112525 0.925632 -0.004000
36 | 1.112525 0.925632 0.445236
37 | 1.758328 0.007656 -0.004000
38 | 1.758328 0.007656 0.445236
39 | 1.479451 1.026106 -0.004000
40 | 1.479451 1.026106 0.445236
41 | 2.115880 0.085303 0.080729
42 | 1.904522 0.078554 1.334358
43 | 1.834309 1.075665 0.038589
44 | 1.622952 1.068916 1.292218
45 | 2.299393 0.138807 0.111956
46 | 2.088036 0.132057 1.365586
47 | 2.017823 1.129169 0.069816
48 | 1.806465 1.122419 1.323446
49 | -0.034067 -0.473301 -0.004000
50 | -0.034067 -0.473301 0.445236
51 | -0.293677 0.550231 -0.004000
52 | -0.293677 0.550231 0.445236
53 | 0.334690 -0.379769 -0.004000
54 | 0.334690 -0.379769 0.445236
55 | 0.075080 0.643762 -0.004000
56 | 0.075080 0.643762 0.445236
57 | 2.207545 0.128648 -0.004000
58 | 2.207545 0.128648 0.445236
59 | 1.928667 1.147098 -0.004000
60 | 1.928667 1.147098 0.445236
61 | 2.574471 0.229121 -0.004000
62 | 2.574471 0.229121 0.445236
63 | 2.295593 1.247572 -0.004000
64 | 2.295593 1.247572 0.445236
65 | 3.626354 0.540559 0.005843
66 | 3.626354 0.540559 0.455078
67 | 3.297532 1.543998 0.005843
68 | 3.297532 1.543998 0.455078
69 | 3.987871 0.659026 0.005843
70 | 3.987871 0.659026 0.455078
71 | 3.659050 1.662466 0.005843
72 | 3.659050 1.662466 0.455078
73 |
--------------------------------------------------------------------------------
/data/scenes/N0Sofa_cylinders.txt:
--------------------------------------------------------------------------------
1 | 0.083957 1.772118 1.627004
2 | 0.083957 1.772118 1.865406
3 | 0.112825 1.737367 1.627004
4 | 0.112825 1.737367 1.865406
5 | 0.135996 1.699559 1.627004
6 | 0.135996 1.699559 1.865406
7 | 0.152580 1.660148 1.627004
8 | 0.152580 1.660148 1.865406
9 | 0.161938 1.620648 1.627004
10 | 0.161938 1.620648 1.865406
11 | 0.163711 1.582578 1.627004
12 | 0.163711 1.582578 1.865406
13 | 0.157832 1.547400 1.627004
14 | 0.157832 1.547400 1.865406
15 | 0.144526 1.516466 1.627004
16 | 0.144526 1.516466 1.865406
17 | 0.124304 1.490965 1.627004
18 | 0.124304 1.490965 1.865406
19 | 0.097943 1.471878 1.627004
20 | 0.097943 1.471878 1.865406
21 | 0.066457 1.459936 1.627004
22 | 0.066457 1.459936 1.865406
23 | 0.031056 1.455600 1.627004
24 | 0.031056 1.455600 1.865406
25 | -0.006901 1.459036 1.627004
26 | -0.006901 1.459036 1.865406
27 | -0.045953 1.470112 1.627004
28 | -0.045953 1.470112 1.865406
29 | -0.084602 1.488402 1.627004
30 | -0.084602 1.488402 1.865406
31 | -0.121360 1.513204 1.627004
32 | -0.121360 1.513204 1.865406
33 | -0.154817 1.543564 1.627004
34 | -0.154817 1.543564 1.865406
35 | -0.183685 1.578316 1.627004
36 | -0.183685 1.578316 1.865406
37 | -0.206857 1.616124 1.627004
38 | -0.206857 1.616124 1.865406
39 | -0.223440 1.655535 1.627004
40 | -0.223440 1.655535 1.865406
41 | -0.232798 1.695034 1.627004
42 | -0.232798 1.695034 1.865406
43 | -0.234572 1.733105 1.627004
44 | -0.234572 1.733105 1.865406
45 | -0.228692 1.768283 1.627004
46 | -0.228692 1.768283 1.865406
47 | -0.215386 1.799216 1.627004
48 | -0.215386 1.799216 1.865406
49 | -0.195164 1.824717 1.627004
50 | -0.195164 1.824717 1.865406
51 | -0.168803 1.843805 1.627004
52 | -0.168803 1.843805 1.865406
53 | -0.137317 1.855747 1.627004
54 | -0.137317 1.855747 1.865406
55 | -0.101916 1.860083 1.627004
56 | -0.101916 1.860083 1.865406
57 | -0.063960 1.856647 1.627004
58 | -0.063960 1.856647 1.865406
59 | -0.024907 1.845571 1.627004
60 | -0.024907 1.845571 1.865406
61 | 0.013741 1.827280 1.627004
62 | 0.013741 1.827280 1.865406
63 | 0.050500 1.802479 1.627004
64 | 0.050500 1.802479 1.865406
65 |
--------------------------------------------------------------------------------
/data/scenes/N0Sofa_planes.txt:
--------------------------------------------------------------------------------
1 | -1.154690 0.831140 0.486941
2 | -0.686671 0.772632 0.486941
3 | -1.100132 1.267567 0.486941
4 | -0.632113 1.209059 0.486941
5 |
--------------------------------------------------------------------------------
/data/scenes/N0Sofa_rectangles.txt:
--------------------------------------------------------------------------------
1 | -1.679115 -0.249143 0.000000
2 | -1.679115 -0.249143 0.318000
3 | -1.545229 0.508493 0.000000
4 | -1.545229 0.508493 0.318000
5 | -0.800978 -0.404324 0.000000
6 | -0.800978 -0.404324 0.318000
7 | -0.667091 0.353312 0.000000
8 | -0.667091 0.353312 0.318000
9 | -1.894506 1.763956 0.000000
10 | -1.894506 1.763956 0.318000
11 | -1.805755 2.416402 0.000000
12 | -1.805755 2.416402 0.318000
13 | 0.478104 1.441216 0.000000
14 | 0.478104 1.441216 0.318000
15 | 0.566854 2.093662 0.000000
16 | 0.566854 2.093662 0.318000
17 | 0.586624 2.199299 0.000004
18 | 0.586624 2.199299 0.592884
19 | 0.821823 2.166351 0.000004
20 | 0.821823 2.166351 0.592884
21 | 0.358720 0.572381 0.000004
22 | 0.358720 0.572381 0.592884
23 | 0.593920 0.539434 0.000004
24 | 0.593920 0.539434 0.592884
25 | -0.191283 1.626843 0.000000
26 | -0.191283 1.626843 0.318000
27 | 0.455931 1.536179 0.000000
28 | 0.455931 1.536179 0.318000
29 | -0.334943 0.601309 0.000000
30 | -0.334943 0.601309 0.318000
31 | 0.312271 0.510645 0.000000
32 | 0.312271 0.510645 0.318000
33 | -2.495260 0.393808 0.000000
34 | -2.495260 0.393808 0.318000
35 | -2.391559 1.156161 0.000000
36 | -2.391559 1.156161 0.318000
37 | -1.611653 0.273613 0.000000
38 | -1.611653 0.273613 0.318000
39 | -1.507952 1.035966 0.000000
40 | -1.507952 1.035966 0.318000
41 | 0.808674 2.323107 0.000004
42 | 0.808674 2.323107 0.592884
43 | 0.771594 2.059044 0.000004
44 | 0.771594 2.059044 0.592884
45 | -1.800899 2.689546 0.000004
46 | -1.800899 2.689546 0.592884
47 | -1.837979 2.425483 0.000004
48 | -1.837979 2.425483 0.592884
49 |
--------------------------------------------------------------------------------
/data/scenes/N3Library_cylinders.txt:
--------------------------------------------------------------------------------
1 | 1.882722 -2.211952 1.338936
2 | 1.882722 -2.211952 1.713434
3 | 1.907515 -2.262291 1.338936
4 | 1.907515 -2.262291 1.713434
5 | 1.923067 -2.315709 1.338936
6 | 1.923067 -2.315709 1.713434
7 | 1.928780 -2.370154 1.338936
8 | 1.928780 -2.370154 1.713434
9 | 1.924437 -2.423532 1.338936
10 | 1.924437 -2.423532 1.713434
11 | 1.910202 -2.473794 1.338936
12 | 1.910202 -2.473794 1.713434
13 | 1.886623 -2.519006 1.338936
14 | 1.886623 -2.519006 1.713434
15 | 1.854607 -2.557433 1.338936
16 | 1.854607 -2.557433 1.713434
17 | 1.815384 -2.587597 1.338936
18 | 1.815384 -2.587597 1.713434
19 | 1.770460 -2.608338 1.338936
20 | 1.770460 -2.608338 1.713434
21 | 1.721564 -2.618861 1.338936
22 | 1.721564 -2.618861 1.713434
23 | 1.670572 -2.618760 1.338936
24 | 1.670572 -2.618760 1.713434
25 | 1.619446 -2.608039 1.338936
26 | 1.619446 -2.608039 1.713434
27 | 1.570149 -2.587111 1.338936
28 | 1.570149 -2.587111 1.713434
29 | 1.524577 -2.556779 1.338936
30 | 1.524577 -2.556779 1.713434
31 | 1.484480 -2.518210 1.338936
32 | 1.484480 -2.518210 1.713434
33 | 1.451400 -2.472885 1.338936
34 | 1.451400 -2.472885 1.713434
35 | 1.426607 -2.422546 1.338936
36 | 1.426607 -2.422546 1.713434
37 | 1.411055 -2.369128 1.338936
38 | 1.411055 -2.369128 1.713434
39 | 1.405342 -2.314683 1.338936
40 | 1.405342 -2.314683 1.713434
41 | 1.409685 -2.261305 1.338936
42 | 1.409685 -2.261305 1.713434
43 | 1.423920 -2.211043 1.338936
44 | 1.423920 -2.211043 1.713434
45 | 1.447499 -2.165830 1.338936
46 | 1.447499 -2.165830 1.713434
47 | 1.479515 -2.127404 1.338936
48 | 1.479515 -2.127404 1.713434
49 | 1.518738 -2.097240 1.338936
50 | 1.518738 -2.097240 1.713434
51 | 1.563661 -2.076499 1.338936
52 | 1.563661 -2.076499 1.713434
53 | 1.612558 -2.065976 1.338936
54 | 1.612558 -2.065976 1.713434
55 | 1.663550 -2.066077 1.338936
56 | 1.663550 -2.066077 1.713434
57 | 1.714676 -2.076797 1.338936
58 | 1.714676 -2.076797 1.713434
59 | 1.763973 -2.097726 1.338936
60 | 1.763973 -2.097726 1.713434
61 | 1.809545 -2.128058 1.338936
62 | 1.809545 -2.128058 1.713434
63 | 1.849642 -2.166627 1.338936
64 | 1.849642 -2.166627 1.713434
65 | -0.897565 -2.418447 -0.001379
66 | -0.897565 -2.418447 0.373119
67 | -0.882647 -2.448345 -0.001379
68 | -0.882647 -2.448345 0.373119
69 | -0.872944 -2.479903 -0.001379
70 | -0.872944 -2.479903 0.373119
71 | -0.868828 -2.511906 -0.001379
72 | -0.868828 -2.511906 0.373119
73 | -0.870457 -2.543125 -0.001379
74 | -0.870457 -2.543125 0.373119
75 | -0.877768 -2.572360 -0.001379
76 | -0.877768 -2.572360 0.373119
77 | -0.890482 -2.598489 -0.001379
78 | -0.890482 -2.598489 0.373119
79 | -0.908109 -2.620505 -0.001379
80 | -0.908109 -2.620505 0.373119
81 | -0.929971 -2.637565 -0.001379
82 | -0.929971 -2.637565 0.373119
83 | -0.955229 -2.649011 -0.001379
84 | -0.955229 -2.649011 0.373119
85 | -0.982912 -2.654405 -0.001379
86 | -0.982912 -2.654405 0.373119
87 | -1.011956 -2.653538 -0.001379
88 | -1.011956 -2.653538 0.373119
89 | -1.041245 -2.646445 -0.001379
90 | -1.041245 -2.646445 0.373119
91 | -1.069654 -2.633398 -0.001379
92 | -1.069654 -2.633398 0.373119
93 | -1.096090 -2.614897 -0.001379
94 | -1.096090 -2.614897 0.373119
95 | -1.119538 -2.591655 -0.001379
96 | -1.119538 -2.591655 0.373119
97 | -1.139097 -2.564564 -0.001379
98 | -1.139097 -2.564564 0.373119
99 | -1.154015 -2.534665 -0.001379
100 | -1.154015 -2.534665 0.373119
101 | -1.163718 -2.503108 -0.001379
102 | -1.163718 -2.503108 0.373119
103 | -1.167835 -2.471105 -0.001379
104 | -1.167835 -2.471105 0.373119
105 | -1.166205 -2.439886 -0.001379
106 | -1.166205 -2.439886 0.373119
107 | -1.158894 -2.410650 -0.001379
108 | -1.158894 -2.410650 0.373119
109 | -1.146180 -2.384522 -0.001379
110 | -1.146180 -2.384522 0.373119
111 | -1.128554 -2.362505 -0.001379
112 | -1.128554 -2.362505 0.373119
113 | -1.106691 -2.345446 -0.001379
114 | -1.106691 -2.345446 0.373119
115 | -1.081433 -2.333999 -0.001379
116 | -1.081433 -2.333999 0.373119
117 | -1.053750 -2.328606 -0.001379
118 | -1.053750 -2.328606 0.373119
119 | -1.024706 -2.329472 -0.001379
120 | -1.024706 -2.329472 0.373119
121 | -0.995417 -2.336565 -0.001379
122 | -0.995417 -2.336565 0.373119
123 | -0.967008 -2.349613 -0.001379
124 | -0.967008 -2.349613 0.373119
125 | -0.940572 -2.368114 -0.001379
126 | -0.940572 -2.368114 0.373119
127 | -0.917124 -2.391356 -0.001379
128 | -0.917124 -2.391356 0.373119
129 |
--------------------------------------------------------------------------------
/data/scenes/N3Library_planes.txt:
--------------------------------------------------------------------------------
1 | 0.892035 -1.610893 0.723656
2 | 1.276471 -0.344803 0.723656
3 | -0.954602 -1.050178 0.723656
4 | -0.570165 0.215911 0.723656
5 | 2.268456 0.601112 0.869742
6 | 2.233278 0.505574 0.423912
7 | 2.688783 0.499348 0.858384
8 | 2.653605 0.403810 0.412553
9 | -2.077463 0.984259 0.460098
10 | -1.491261 0.816393 0.460098
11 | -1.919332 1.536462 0.460098
12 | -1.333130 1.368595 0.460098
13 | 2.550852 -0.039084 0.423459
14 | 2.655702 0.406057 0.423459
15 | 2.124651 0.061304 0.423459
16 | 2.229501 0.506445 0.423459
17 | 1.959432 -0.415387 0.423459
18 | 2.401043 -0.534228 0.423459
19 | 2.073216 0.007434 0.423459
20 | 2.514828 -0.111407 0.423459
21 | 1.959300 -3.337859 0.468191
22 | 3.004996 0.507290 0.468191
23 | 1.706832 -3.269200 0.468191
24 | 2.752529 0.575949 0.468191
25 | 1.244482 -2.971669 0.437871
26 | 1.825150 -3.137951 0.437871
27 | 1.386856 -2.474491 0.437871
28 | 1.967523 -2.640772 0.437871
29 | 1.427108 -1.261503 0.423459
30 | 1.866759 -1.387403 0.423459
31 | 1.547651 -0.840559 0.423459
32 | 1.987302 -0.966459 0.423459
33 | 2.080009 -1.009872 0.869742
34 | 1.986252 -0.970190 0.423912
35 | 1.958372 -1.424884 0.858384
36 | 1.864614 -1.385202 0.412553
37 | 2.608218 -0.153329 0.869742
38 | 2.513837 -0.115154 0.423912
39 | 2.493245 -0.570236 0.858384
40 | 2.398864 -0.532061 0.412553
41 |
--------------------------------------------------------------------------------
/data/scenes/N3Library_rectangles.txt:
--------------------------------------------------------------------------------
1 | -0.655395 -2.597307 -0.001531
2 | -0.655395 -2.597307 0.443737
3 | -0.561287 -2.195402 -0.001531
4 | -0.561287 -2.195402 0.443737
5 | 1.147697 -3.019507 -0.001531
6 | 1.147697 -3.019507 0.443737
7 | 1.241805 -2.617602 -0.001531
8 | 1.241805 -2.617602 0.443737
9 | -0.209582 0.564477 -0.007988
10 | -0.209582 0.564477 0.341292
11 | -0.000014 1.178606 -0.007988
12 | -0.000014 1.178606 0.341292
13 | 1.548182 -0.035349 -0.007988
14 | 1.548182 -0.035349 0.341292
15 | 1.757750 0.578779 -0.007988
16 | 1.757750 0.578779 0.341292
17 | 1.560340 -0.031521 0.005178
18 | 1.560340 -0.031521 0.585075
19 | 1.769174 0.580456 0.005178
20 | 1.769174 0.580456 0.585075
21 | 1.790814 -0.110169 0.005178
22 | 1.790814 -0.110169 0.585075
23 | 1.999648 0.501809 0.005178
24 | 1.999648 0.501809 0.585075
25 | -0.367399 0.619451 -0.007335
26 | -0.367399 0.619451 0.578639
27 | -0.158565 1.231428 -0.007335
28 | -0.158565 1.231428 0.578639
29 | -0.136925 0.540803 -0.007335
30 | -0.136925 0.540803 0.578639
31 | 0.071908 1.152781 -0.007335
32 | 0.071908 1.152781 0.578639
33 | -0.154802 1.243937 -0.008647
34 | -0.154802 1.243937 0.589896
35 | -0.091206 1.430302 -0.008647
36 | -0.091206 1.430302 0.589896
37 | 1.983599 0.514220 -0.008647
38 | 1.983599 0.514220 0.589896
39 | 2.047195 0.700585 -0.008647
40 | 2.047195 0.700585 0.589896
41 |
--------------------------------------------------------------------------------
/data/scenes/N3Office_cylinders.txt:
--------------------------------------------------------------------------------
1 | 0.631645 -0.543929 0.010965
2 | 0.631645 -0.543929 0.287580
3 | 0.679985 -0.546946 0.010965
4 | 0.679985 -0.546946 0.287580
5 | 0.726467 -0.555883 0.010965
6 | 0.726467 -0.555883 0.287580
7 | 0.769305 -0.570396 0.010965
8 | 0.769305 -0.570396 0.287580
9 | 0.806853 -0.589927 0.010965
10 | 0.806853 -0.589927 0.287580
11 | 0.837668 -0.613726 0.010965
12 | 0.837668 -0.613726 0.287580
13 | 0.860566 -0.640877 0.010965
14 | 0.860566 -0.640877 0.287580
15 | 0.874666 -0.670338 0.010965
16 | 0.874666 -0.670338 0.287580
17 | 0.879427 -0.700977 0.010965
18 | 0.879427 -0.700977 0.287580
19 | 0.874666 -0.731615 0.010965
20 | 0.874666 -0.731615 0.287580
21 | 0.860566 -0.761077 0.010965
22 | 0.860566 -0.761077 0.287580
23 | 0.837668 -0.788228 0.010965
24 | 0.837668 -0.788228 0.287580
25 | 0.806853 -0.812027 0.010965
26 | 0.806853 -0.812027 0.287580
27 | 0.769305 -0.831558 0.010965
28 | 0.769305 -0.831558 0.287580
29 | 0.726467 -0.846070 0.010965
30 | 0.726467 -0.846070 0.287580
31 | 0.679985 -0.855007 0.010965
32 | 0.679985 -0.855007 0.287580
33 | 0.631645 -0.858025 0.010965
34 | 0.631645 -0.858025 0.287580
35 | 0.583306 -0.855007 0.010965
36 | 0.583306 -0.855007 0.287580
37 | 0.536823 -0.846070 0.010965
38 | 0.536823 -0.846070 0.287580
39 | 0.493985 -0.831558 0.010965
40 | 0.493985 -0.831558 0.287580
41 | 0.456437 -0.812027 0.010965
42 | 0.456437 -0.812027 0.287580
43 | 0.425623 -0.788228 0.010965
44 | 0.425623 -0.788228 0.287580
45 | 0.402725 -0.761077 0.010965
46 | 0.402725 -0.761077 0.287580
47 | 0.388625 -0.731615 0.010965
48 | 0.388625 -0.731615 0.287580
49 | 0.383864 -0.700977 0.010965
50 | 0.383864 -0.700977 0.287580
51 | 0.388625 -0.670338 0.010965
52 | 0.388625 -0.670338 0.287580
53 | 0.402725 -0.640877 0.010965
54 | 0.402725 -0.640877 0.287580
55 | 0.425623 -0.613726 0.010965
56 | 0.425623 -0.613726 0.287580
57 | 0.456437 -0.589927 0.010965
58 | 0.456437 -0.589927 0.287580
59 | 0.493985 -0.570396 0.010965
60 | 0.493985 -0.570396 0.287580
61 | 0.536823 -0.555883 0.010965
62 | 0.536823 -0.555883 0.287580
63 | 0.583306 -0.546946 0.010965
64 | 0.583306 -0.546946 0.287580
65 |
--------------------------------------------------------------------------------
/data/scenes/N3Office_planes.txt:
--------------------------------------------------------------------------------
1 | -0.256122 -2.422023 0.815595
2 | 0.349384 -2.594083 0.815595
3 | 0.215265 -0.763138 0.815595
4 | 0.820771 -0.935198 0.815595
5 | 0.590622 0.617133 0.805174
6 | 0.520171 0.624667 0.438829
7 | 0.607011 0.982676 0.809539
8 | 0.536560 0.990209 0.443194
9 | -0.426736 -1.283616 0.446747
10 | -0.186009 -1.596705 0.446747
11 | -0.133512 -1.058163 0.446747
12 | 0.107215 -1.371253 0.446747
13 | 0.529441 0.987229 0.446747
14 | 0.135005 1.007089 0.446747
15 | 0.510841 0.617820 0.446747
16 | 0.116405 0.637680 0.446747
17 | -0.426736 -1.283616 0.446747
18 | -0.186009 -1.596705 0.446747
19 | -0.133512 -1.058163 0.446747
20 | 0.107215 -1.371253 0.446747
21 | -1.778944 -2.340509 1.905258
22 | -1.794969 -2.322737 0.924187
23 | -1.345615 -0.939143 1.923566
24 | -1.361639 -0.921371 0.942494
25 | -0.184737 -0.996996 0.805174
26 | -0.144775 -1.055503 0.438829
27 | -0.473584 -1.221624 0.809539
28 | -0.433622 -1.280131 0.443194
29 | 0.487532 -2.047596 0.901680
30 | 0.552318 -2.032676 1.345295
31 | 0.624670 -1.359463 0.858508
32 | 0.689457 -1.344544 1.302123
33 | -0.184737 -0.996996 0.805174
34 | -0.144775 -1.055503 0.438829
35 | -0.473584 -1.221624 0.809539
36 | -0.433622 -1.280131 0.443194
37 | -1.007145 0.016037 1.127334
38 | -0.349036 -0.170971 1.127334
39 | -0.490423 1.834464 1.127334
40 | 0.167686 1.647456 1.127334
41 |
--------------------------------------------------------------------------------
/data/scenes/N3Office_rectangles.txt:
--------------------------------------------------------------------------------
1 | -0.050105 -2.363388 -0.004046
2 | -0.050105 -2.363388 0.553078
3 | 0.040858 -1.982805 -0.004046
4 | 0.040858 -1.982805 0.553078
5 | 0.460681 -2.485471 -0.004046
6 | 0.460681 -2.485471 0.553078
7 | 0.551644 -2.104887 -0.004046
8 | 0.551644 -2.104887 0.553078
9 | 0.714749 -0.583987 0.017204
10 | 0.714749 -0.583987 0.957377
11 | 1.090828 0.957330 0.017204
12 | 1.090828 0.957330 0.957377
13 | 1.049865 -0.665755 0.017204
14 | 1.049865 -0.665755 0.957377
15 | 1.425944 0.875562 0.017204
16 | 1.425944 0.875562 0.957377
17 | -1.053154 0.184365 0.000886
18 | -1.053154 0.184365 0.558011
19 | -0.912080 0.597431 0.000886
20 | -0.912080 0.597431 0.558011
21 | -0.474005 -0.013431 0.000886
22 | -0.474005 -0.013431 0.558011
23 | -0.332931 0.399634 0.000886
24 | -0.332931 0.399634 0.558011
25 |
--------------------------------------------------------------------------------
/data/scenes/N3OpenArea_cylinders.txt:
--------------------------------------------------------------------------------
1 | -0.339748 -2.175018 1.368510
2 | -0.339748 -2.175018 1.685404
3 | -0.399366 -2.132629 1.368510
4 | -0.399366 -2.132629 1.685404
5 | -0.451675 -2.083734 1.368510
6 | -0.451675 -2.083734 1.685404
7 | -0.494665 -2.030213 1.368510
8 | -0.494665 -2.030213 1.685404
9 | -0.526684 -1.974121 1.368510
10 | -0.526684 -1.974121 1.685404
11 | -0.546502 -1.917615 1.368510
12 | -0.546502 -1.917615 1.685404
13 | -0.553356 -1.862866 1.368510
14 | -0.553356 -1.862866 1.685404
15 | -0.546984 -1.811978 1.368510
16 | -0.546984 -1.811978 1.685404
17 | -0.527629 -1.766906 1.368510
18 | -0.527629 -1.766906 1.685404
19 | -0.496037 -1.729384 1.368510
20 | -0.496037 -1.729384 1.685404
21 | -0.453422 -1.700852 1.368510
22 | -0.453422 -1.700852 1.685404
23 | -0.401420 -1.682407 1.368510
24 | -0.401420 -1.682407 1.685404
25 | -0.342030 -1.674757 1.368510
26 | -0.342030 -1.674757 1.685404
27 | -0.277534 -1.678198 1.368510
28 | -0.277534 -1.678198 1.685404
29 | -0.210412 -1.692597 1.368510
30 | -0.210412 -1.692597 1.685404
31 | -0.143243 -1.717399 1.368510
32 | -0.143243 -1.717399 1.685404
33 | -0.078607 -1.751653 1.368510
34 | -0.078607 -1.751653 1.685404
35 | -0.018989 -1.794042 1.368510
36 | -0.018989 -1.794042 1.685404
37 | 0.033321 -1.842937 1.368510
38 | 0.033321 -1.842937 1.685404
39 | 0.076311 -1.896458 1.368510
40 | 0.076311 -1.896458 1.685404
41 | 0.108330 -1.952550 1.368510
42 | 0.108330 -1.952550 1.685404
43 | 0.128147 -2.009056 1.368510
44 | 0.128147 -2.009056 1.685404
45 | 0.135001 -2.063805 1.368510
46 | 0.135001 -2.063805 1.685404
47 | 0.128629 -2.114693 1.368510
48 | 0.128629 -2.114693 1.685404
49 | 0.109275 -2.159765 1.368510
50 | 0.109275 -2.159765 1.685404
51 | 0.077683 -2.197287 1.368510
52 | 0.077683 -2.197287 1.685404
53 | 0.035067 -2.225819 1.368510
54 | 0.035067 -2.225819 1.685404
55 | -0.016935 -2.244265 1.368510
56 | -0.016935 -2.244265 1.685404
57 | -0.076325 -2.251914 1.368510
58 | -0.076325 -2.251914 1.685404
59 | -0.140820 -2.248473 1.368510
60 | -0.140820 -2.248473 1.685404
61 | -0.207942 -2.234074 1.368510
62 | -0.207942 -2.234074 1.685404
63 | -0.275112 -2.209272 1.368510
64 | -0.275112 -2.209272 1.685404
65 |
--------------------------------------------------------------------------------
/data/scenes/N3OpenArea_planes.txt:
--------------------------------------------------------------------------------
1 | 1.599046 0.470388 0.360681
2 | 1.644871 0.894456 0.340421
3 | 1.019144 0.533026 0.360122
4 | 1.064969 0.957093 0.339862
5 | -1.363040 0.648925 0.426431
6 | -1.128434 -2.175405 0.426431
7 | -1.122122 0.668937 0.426431
8 | -0.887515 -2.155392 0.426431
9 | -0.119797 -2.641632 0.364106
10 | -0.317540 -3.019562 0.343846
11 | 0.397022 -2.912017 0.363548
12 | 0.199279 -3.289946 0.343287
13 | 0.445166 -0.299715 0.503557
14 | 1.042316 -0.251861 0.503557
15 | 0.398568 0.281767 0.503557
16 | 0.995718 0.329621 0.503557
17 | 0.562228 -1.133434 0.361910
18 | 1.159378 -1.085580 0.361910
19 | 0.515630 -0.551952 0.361910
20 | 1.112780 -0.504098 0.361910
21 | -0.508540 1.140735 0.468839
22 | 2.075150 1.370201 0.468839
23 | -0.529913 1.381381 0.468839
24 | 2.053777 1.610847 0.468839
25 | 1.721154 -0.495274 0.364106
26 | 2.021508 -0.192420 0.343846
27 | 1.306992 -0.084567 0.363548
28 | 1.607347 0.218287 0.343287
29 | -0.378802 -3.128453 0.765143
30 | -0.321839 -3.007851 0.354047
31 | 0.135731 -3.403038 0.755884
32 | 0.192694 -3.282435 0.344788
33 | 1.652749 1.012998 0.755231
34 | 1.644042 0.882942 0.353475
35 | 1.073441 1.080380 0.745973
36 | 1.064734 0.950324 0.344217
37 | 1.587394 -1.261013 0.364106
38 | 2.013843 -1.269632 0.343846
39 | 1.599153 -0.677857 0.363548
40 | 2.025603 -0.686476 0.343287
41 | 2.194188 -0.013023 1.117032
42 | 2.023834 -0.199420 0.338732
43 | 1.783339 0.401133 1.107771
44 | 1.612986 0.214736 0.329471
45 | 2.138624 -1.275953 0.765143
46 | 2.005275 -1.278699 0.354047
47 | 2.155162 -0.692971 0.755884
48 | 2.021813 -0.695717 0.344788
49 |
--------------------------------------------------------------------------------
/data/scenes/N3OpenArea_rectangles.txt:
--------------------------------------------------------------------------------
1 | -0.755377 -1.839121 0.001846
2 | -0.755377 -1.839121 0.666655
3 | -0.948299 0.513918 0.001846
4 | -0.948299 0.513918 0.666655
5 | -0.498293 -1.818043 0.001846
6 | -0.498293 -1.818043 0.666655
7 | -0.691215 0.534996 0.001846
8 | -0.691215 0.534996 0.666655
9 | -0.599587 -1.827524 0.001846
10 | -0.599587 -1.827524 0.666655
11 | -0.623824 -1.531915 0.001846
12 | -0.623824 -1.531915 0.666655
13 | 0.141626 -1.766753 0.001846
14 | 0.141626 -1.766753 0.666655
15 | 0.117390 -1.471144 0.001846
16 | 0.117390 -1.471144 0.666655
17 | -1.120668 -3.496032 -0.079195
18 | -1.120668 -3.496032 0.304008
19 | -1.254988 -2.279035 -0.079195
20 | -1.254988 -2.279035 0.304008
21 | -0.680024 -3.447398 -0.079195
22 | -0.680024 -3.447398 0.304008
23 | -0.814344 -2.230401 -0.079195
24 | -0.814344 -2.230401 0.304008
25 | -0.769452 0.210856 0.001846
26 | -0.769452 0.210856 0.666655
27 | -0.793689 0.506465 0.001846
28 | -0.793689 0.506465 0.666655
29 | -0.028239 0.271627 0.001846
30 | -0.028239 0.271627 0.666655
31 | -0.052475 0.567235 0.001846
32 | -0.052475 0.567235 0.666655
33 | -0.695177 -1.517093 0.004192
34 | -0.695177 -1.517093 0.313620
35 | -0.836536 0.207050 0.004192
36 | -0.836536 0.207050 0.313620
37 | 0.178995 -1.445421 0.004192
38 | 0.178995 -1.445421 0.313620
39 | 0.037635 0.278722 0.004192
40 | 0.037635 0.278722 0.313620
41 | -0.700065 -3.315819 -0.076323
42 | -0.700065 -3.315819 0.131131
43 | -0.833872 -2.103475 -0.076323
44 | -0.833872 -2.103475 0.131131
45 | -0.402230 -3.282947 -0.076323
46 | -0.402230 -3.282947 0.131131
47 | -0.536037 -2.070603 -0.076323
48 | -0.536037 -2.070603 0.131131
49 |
--------------------------------------------------------------------------------
/data/scenes/Werkraum_planes.txt:
--------------------------------------------------------------------------------
1 | -0.835122 -0.571405 0.693182
2 | -0.123520 0.489368 0.693182
3 | -2.515120 0.555595 0.693182
4 | -1.803517 1.616368 0.693182
5 | -1.531881 -1.747097 1.648139
6 | -1.771698 -2.099244 1.648139
7 | -0.742576 -2.284625 1.648139
8 | -0.982393 -2.636771 1.648139
9 | 0.656778 3.116263 1.353175
10 | 0.232469 2.434607 1.353175
11 | 2.125091 2.202286 1.353175
12 | 1.700782 1.520630 1.353175
13 | 0.662618 3.122946 1.996295
14 | 0.238309 2.441290 1.996295
15 | 2.130931 2.208969 1.996295
16 | 1.706622 1.527313 1.996295
17 | -1.493096 -1.735306 1.029237
18 | -1.732913 -2.087452 1.029237
19 | -0.703791 -2.272833 1.029237
20 | -0.943608 -2.624980 1.029237
21 | -1.519347 -1.748353 1.369660
22 | -1.759164 -2.100499 1.369660
23 | -0.730042 -2.285880 1.369660
24 | -0.969859 -2.638027 1.369660
25 | -1.510048 -1.733693 0.736094
26 | -1.749865 -2.085840 0.736094
27 | -0.720743 -2.271220 0.736094
28 | -0.960560 -2.623367 0.736094
29 | 0.690797 3.091183 0.723284
30 | 0.266488 2.409527 0.723284
31 | 2.159110 2.177206 0.723284
32 | 1.734801 1.495550 0.723284
33 | -0.838859 1.606879 0.422129
34 | -1.052283 1.301596 0.422129
35 | -0.493022 1.365103 0.422129
36 | -0.706446 1.059820 0.422129
37 | 0.690797 3.091183 0.723284
38 | 0.266488 2.409527 0.723284
39 | 2.159110 2.177206 0.723284
40 | 1.734801 1.495550 0.723284
41 | -2.291649 -0.057179 0.427593
42 | -2.059395 0.234035 0.427593
43 | -2.621549 0.205928 0.427593
44 | -2.389295 0.497142 0.427593
45 | -0.616881 2.688723 0.373588
46 | -0.926040 2.242915 0.373588
47 | -0.167752 2.377261 0.373588
48 | -0.476912 1.931453 0.373588
49 | -1.005687 -2.701054 2.039786
50 | -0.682602 -2.232984 2.039786
51 | -1.005687 -2.701054 0.018911
52 | -0.682602 -2.232984 0.018911
53 | 0.252277 2.428003 2.039786
54 | 0.656737 3.121620 2.039786
55 | 0.252277 2.428003 0.018911
56 | 0.656737 3.121620 0.018911
57 | -2.318698 -0.094351 0.895597
58 | -2.287867 -0.065928 0.440200
59 | -2.661934 0.177448 0.889323
60 | -2.631102 0.205871 0.433926
61 | -1.762023 -0.881006 0.843161
62 | -1.692966 -0.761932 0.407046
63 | -2.101022 -0.604726 0.864917
64 | -2.031965 -0.485651 0.428801
65 | -1.695887 -0.751324 0.427593
66 | -1.463634 -0.460109 0.427593
67 | -2.025787 -0.488217 0.427593
68 | -1.793533 -0.197003 0.427593
69 | -1.787196 -2.161718 2.039786
70 | -1.475215 -1.686175 2.039786
71 | -1.787196 -2.161718 0.018911
72 | -1.475215 -1.686175 0.018911
73 | -0.781033 1.740474 0.837698
74 | -0.842442 1.617282 0.401583
75 | -0.425284 1.486125 0.859453
76 | -0.486693 1.362932 0.423338
77 | -0.747436 2.792031 1.062951
78 | -1.058305 2.347427 1.069098
79 | -0.604202 2.682564 0.389074
80 | -0.915071 2.237960 0.395221
81 | -1.492548 -1.745983 0.509145
82 | -1.732365 -2.098130 0.509145
83 | -0.703243 -2.283511 0.509145
84 | -0.943060 -2.635658 0.509145
85 |
--------------------------------------------------------------------------------
/data/scenes/Werkraum_rectangles.txt:
--------------------------------------------------------------------------------
1 | -0.807759 3.068293 0.005249
2 | -0.807759 3.068293 0.956432
3 | -0.517444 3.555425 0.005249
4 | -0.517444 3.555425 0.956432
5 | 0.123935 2.513032 0.005249
6 | 0.123935 2.513032 0.956432
7 | 0.414251 3.000165 0.005249
8 | 0.414251 3.000165 0.956432
9 | -2.663434 -1.421925 0.005115
10 | -2.663434 -1.421925 0.881030
11 | -2.340835 -0.955544 0.005115
12 | -2.340835 -0.955544 0.881030
13 | -1.771430 -2.038931 0.005115
14 | -1.771430 -2.038931 0.881030
15 | -1.448830 -1.572550 0.005115
16 | -1.448830 -1.572550 0.881030
17 |
--------------------------------------------------------------------------------
/download_data.sh:
--------------------------------------------------------------------------------
1 | mkdir sample_data
2 | mkdir sample_data/humor
3 | mkdir sample_data/res_wild/
4 | gdown https://drive.google.com/uc?id=12rxODUmyOyOg11rQUY7GTmT-NDH7R2uN -O sample_data/ # standing netural
5 | gdown https://drive.google.com/uc?id=1tfZEob1wxIwWj2fcLiml0Dj9O89eP20w -O sample_data/ # Processed PROX camera & 2D keypoint detecitons
6 | gdown https://drive.google.com/uc?id=1axNSXL2uGuEbFnYA2pECZy8PN5bk7VaR -O sample_data/ # kinpoly data
7 | gdown https://drive.google.com/uc?id=1BvRl4PaLOf7l4tGzu2I2-sM6J0ER1MQQ -O sample_data/ # h36m fitted
8 | gdown https://drive.google.com/uc?id=1GdRmh_J6cC0SDJJLqrl6aAQtfNNqWnr9 -O sample_data/res_wild/res.pkl # wild fitted
9 | gdown https://drive.google.com/uc?id=1i6fr2qlYiEvZb8pTudAzH6zkbuunrvSk -O sample_data/humor/ # pretrained humor model
10 | gdown https://drive.google.com/uc?id=16Nws1EmlMm35T-GlXpapJ7EAv8SbCG3R -O sample_data/prox/qualitative/ && unzip sample_data/prox/qualitative/prox_calibration.zip -d sample_data/prox/qualitative/
11 | gdown https://drive.google.com/uc?id=18IS8Qlqh6faAABpn2Nm1Z4KACJTWxTBR -O results/scene+/tcn_voxel_4_5/models/ # pretrained EmbodiedPose policy
12 | gdown https://drive.google.com/uc?id=1nxWxagRZA8FjztuuXMiYEyt4HENRbPsV -O UniversalHumanoidControl/results/motion_im/uhc_explicit/models/ # pretrained UHC, used to train the EmbodiedPose policy
13 |
14 |
--------------------------------------------------------------------------------
/embodiedpose/__init__.py:
--------------------------------------------------------------------------------
1 | import warnings
2 |
3 | warnings.simplefilter(action='ignore', category=FutureWarning)
4 |
--------------------------------------------------------------------------------
/embodiedpose/agents/__init__.py:
--------------------------------------------------------------------------------
1 | from embodiedpose.agents.agent_embodied_pose import AgentEmbodiedPose
2 |
3 | agent_dict = {
4 | "embodied_agent": AgentEmbodiedPose,
5 | }
6 |
--------------------------------------------------------------------------------
/embodiedpose/core/__init__.py:
--------------------------------------------------------------------------------
1 | from embodiedpose.core.common import *
2 | from embodiedpose.core.critic import Value
3 | from embodiedpose.core.distributions import DiagGaussian, Categorical
4 | from embodiedpose.core.logger_rl import LoggerRL
5 | from embodiedpose.models.policy import Policy
6 | from embodiedpose.core.trajbatch import TrajBatch
7 |
--------------------------------------------------------------------------------
/embodiedpose/core/common.py:
--------------------------------------------------------------------------------
1 | import torch
2 | from uhc.utils.torch_ext import batch_to
3 |
4 |
5 | def estimate_advantages(rewards, masks, values, gamma, tau):
6 | device = rewards.device
7 | rewards, masks, values = batch_to(torch.device('cpu'), rewards, masks, values)
8 | tensor_type = type(rewards)
9 | deltas = tensor_type(rewards.size(0), 1)
10 | advantages = tensor_type(rewards.size(0), 1)
11 |
12 | prev_value = 0
13 | prev_advantage = 0
14 | for i in reversed(range(rewards.size(0))):
15 | deltas[i] = rewards[i] + gamma * prev_value * masks[i] - values[i]
16 | advantages[i] = deltas[i] + gamma * tau * prev_advantage * masks[i]
17 |
18 | prev_value = values[i, 0]
19 | prev_advantage = advantages[i, 0]
20 |
21 | returns = values + advantages
22 | advantages = (advantages - advantages.mean()) / advantages.std()
23 |
24 | advantages, returns = batch_to(device, advantages, returns)
25 | return advantages, returns
26 |
--------------------------------------------------------------------------------
/embodiedpose/core/critic.py:
--------------------------------------------------------------------------------
1 | import torch.nn as nn
2 | import torch
3 |
4 |
5 | class Value(nn.Module):
6 | def __init__(self, net, net_out_dim=None):
7 | super().__init__()
8 | self.net = net
9 | if net_out_dim is None:
10 | net_out_dim = net.out_dim
11 | self.value_head = nn.Linear(net_out_dim, 1)
12 | self.value_head.weight.data.mul_(0.1)
13 | self.value_head.bias.data.mul_(0.0)
14 |
15 | def forward(self, x):
16 | x = self.net(x)
17 | value = self.value_head(x)
18 | return value
19 |
--------------------------------------------------------------------------------
/embodiedpose/core/distributions.py:
--------------------------------------------------------------------------------
1 | import torch
2 | from torch.distributions import Normal
3 | from torch.distributions import Categorical as TorchCategorical
4 |
5 |
6 | class DiagGaussian(Normal):
7 | def __init__(self, loc, scale):
8 | super().__init__(loc, scale)
9 |
10 | def kl(self):
11 | loc1 = self.loc
12 | scale1 = self.scale
13 | log_scale1 = self.scale.log()
14 | loc0 = self.loc.detach()
15 | scale0 = self.scale.detach()
16 | log_scale0 = log_scale1.detach()
17 | kl = log_scale1 - log_scale0 + (
18 | scale0.pow(2) + (loc0 - loc1).pow(2)) / (2.0 * scale1.pow(2)) - 0.5
19 | return kl.sum(1, keepdim=True)
20 |
21 | def log_prob(self, value):
22 | return super().log_prob(value).sum(1, keepdim=True)
23 |
24 | def mean_sample(self):
25 | return self.loc
26 |
27 |
28 | class Categorical(TorchCategorical):
29 | def __init__(self, probs=None, logits=None):
30 | super().__init__(probs, logits)
31 |
32 | def kl(self):
33 | loc1 = self.loc
34 | scale1 = self.scale
35 | log_scale1 = self.scale.log()
36 | loc0 = self.loc.detach()
37 | scale0 = self.scale.detach()
38 | log_scale0 = log_scale1.detach()
39 | kl = log_scale1 - log_scale0 + (
40 | scale0.pow(2) + (loc0 - loc1).pow(2)) / (2.0 * scale1.pow(2)) - 0.5
41 | return kl.sum(1, keepdim=True)
42 |
43 | def log_prob(self, value):
44 | return super().log_prob(value).unsqueeze(1)
45 |
46 | def mean_sample(self):
47 | return self.probs.argmax(dim=1)
48 |
--------------------------------------------------------------------------------
/embodiedpose/core/logger_rl.py:
--------------------------------------------------------------------------------
1 | import math
2 |
3 |
4 | class LoggerRL:
5 | def __init__(self):
6 | self.num_steps = 0
7 | self.num_episodes = 0
8 | self.total_reward = 0
9 | self.min_episode_reward = math.inf
10 | self.max_episode_reward = -math.inf
11 | self.total_c_reward = 0
12 | self.min_c_reward = math.inf
13 | self.max_c_reward = -math.inf
14 | self.episode_reward = 0
15 | self.avg_episode_reward = 0
16 | self.avg_c_reward = 0
17 | self.total_c_info = 0
18 | self.avg_c_info = 0
19 | self.sample_time = 0
20 |
21 | def start_episode(self, env):
22 | self.episode_reward = 0
23 |
24 | def step(self, env, reward, c_reward, c_info):
25 | self.episode_reward += reward
26 | self.total_c_reward += c_reward
27 | self.total_c_info += c_info
28 | self.min_c_reward = min(self.min_c_reward, c_reward)
29 | self.max_c_reward = max(self.max_c_reward, c_reward)
30 | self.num_steps += 1
31 |
32 | def end_episode(self, env):
33 | self.num_episodes += 1
34 | self.total_reward += self.episode_reward
35 | self.min_episode_reward = min(self.min_episode_reward,
36 | self.episode_reward)
37 | self.max_episode_reward = max(self.max_episode_reward,
38 | self.episode_reward)
39 |
40 | def end_sampling(self):
41 | self.avg_episode_reward = self.total_reward / self.num_episodes
42 | self.avg_c_reward = self.total_c_reward / self.num_steps
43 | self.avg_c_info = self.total_c_info / self.num_steps
44 |
45 | @classmethod
46 | def merge(cls, logger_list):
47 | logger = cls()
48 | logger.total_reward = sum([x.total_reward for x in logger_list])
49 | logger.num_episodes = sum([x.num_episodes for x in logger_list])
50 | logger.num_steps = sum([x.num_steps for x in logger_list])
51 | logger.avg_episode_reward = logger.total_reward / logger.num_episodes
52 | logger.max_episode_reward = max(
53 | [x.max_episode_reward for x in logger_list])
54 | logger.min_episode_reward = max(
55 | [x.min_episode_reward for x in logger_list])
56 | logger.total_c_reward = sum([x.total_c_reward for x in logger_list])
57 | logger.avg_c_reward = logger.total_c_reward / logger.num_steps
58 | logger.max_c_reward = max([x.max_c_reward for x in logger_list])
59 | logger.min_c_reward = min([x.min_c_reward for x in logger_list])
60 | logger.total_c_info = sum([x.total_c_info for x in logger_list])
61 | logger.avg_c_info = logger.total_c_info / logger.num_steps
62 | return logger
63 |
--------------------------------------------------------------------------------
/embodiedpose/core/trajbatch.py:
--------------------------------------------------------------------------------
1 | import numpy as np
2 |
3 |
4 | class TrajBatch:
5 | def __init__(self, memory_list):
6 | memory = memory_list[0]
7 | for x in memory_list[1:]:
8 | memory.append(x)
9 | self.batch = zip(*memory.sample())
10 | self.states = np.stack(next(self.batch))
11 | self.actions = np.stack(next(self.batch))
12 | self.masks = np.stack(next(self.batch))
13 | self.next_states = np.stack(next(self.batch))
14 | self.rewards = np.stack(next(self.batch))
15 | self.exps = np.stack(next(self.batch))
16 |
--------------------------------------------------------------------------------
/embodiedpose/core/trajbatch_humor.py:
--------------------------------------------------------------------------------
1 | from embodiedpose.core import TrajBatch
2 | import numpy as np
3 |
4 |
5 | class TrajBatchHumor(TrajBatch):
6 | def __init__(self, memory_list):
7 | super().__init__(memory_list)
8 | self.v_metas = np.stack(next(self.batch))
9 |
10 | self.humor_target = np.stack(next(self.batch))
11 | self.sim_humor_state = np.stack(next(self.batch))
--------------------------------------------------------------------------------
/embodiedpose/data_loaders/__init__.py:
--------------------------------------------------------------------------------
1 | from embodiedpose.data_loaders.amass_dataset import AMASSDataset
2 | from embodiedpose.data_loaders.video_pose_dataset import VideoPoseDataset
3 | from embodiedpose.data_loaders.scene_pose_dataset import ScenePoseDataset
4 | from embodiedpose.data_loaders.amass_multi_dataset import AMASSDatasetMulti
5 |
6 | data_dict = {
7 | "scene_pose": ScenePoseDataset,
8 | "video_pose": VideoPoseDataset,
9 | "amass": AMASSDataset,
10 | "amass_multi": AMASSDatasetMulti
11 | }
12 |
--------------------------------------------------------------------------------
/embodiedpose/data_process/process_fpv_raw.py:
--------------------------------------------------------------------------------
1 | import argparse
2 | import os
3 | import glob
4 | import subprocess
5 |
6 | parser = argparse.ArgumentParser()
7 | parser.add_argument('--mocap-id', type=str, default='1011')
8 | parser.add_argument('--crop-size', type=int, default=1000)
9 | parser.add_argument('--scale-size', type=int, default=224)
10 | parser.add_argument('--v-width', type=int, default=1920)
11 | parser.add_argument('--v-height', type=int, default=1080)
12 | parser.add_argument('--wild', action='store_true', default=False)
13 | parser.add_argument(
14 | '--data_dir',
15 | action='store_true',
16 | default="/hdd/zen/data/Reallite/contextegopose/ReliveDataset/")
17 |
18 | args = parser.parse_args()
19 |
20 | v_width = args.v_width
21 | v_height = args.v_height
22 | c_size = args.crop_size
23 | s_size = args.scale_size
24 | fpv_raw_folder = f'{args.data_dir}/fpv_raw'
25 | fpv_proc_folder = f'{args.data_dir}/fpv_process_vids'
26 | fpv_frames_folder = f'{args.data_dir}/fpv_frames'
27 | slam_frames_folder = f'{args.data_dir}/fpv_slams'
28 | os.makedirs(fpv_frames_folder, exist_ok=True)
29 | os.makedirs(slam_frames_folder, exist_ok=True)
30 |
31 | # fpv_files = glob.glob(os.path.join(fpv_raw_folder, '%s_*.MP4' % args.mocap_id)) \
32 | # + glob.glob(os.path.join(fpv_raw_folder, '%s_*.mp4' % args.mocap_id))
33 | fpv_files = glob.glob(os.path.join(fpv_raw_folder, '%s*.MP4' % args.mocap_id)) \
34 | + glob.glob(os.path.join(fpv_raw_folder, '%s*.mp4' % args.mocap_id))
35 | fpv_files.sort()
36 |
37 | for file in fpv_files:
38 | name = os.path.splitext(os.path.basename(file))[0]
39 | frame_dir = os.path.join(fpv_frames_folder, name)
40 | frame_slam_dir = os.path.join(slam_frames_folder, name)
41 | os.makedirs(frame_dir, exist_ok=True)
42 | if args.wild:
43 | os.makedirs(frame_slam_dir, exist_ok=True)
44 |
45 | crop_file = '%s/%s_crop.mp4' % (fpv_proc_folder, name)
46 | scale_file = '%s/%s_scale.mp4' % (fpv_proc_folder, name)
47 |
48 | cmd = [
49 | 'ffmpeg', '-y', '-i', file, '-vf',
50 | 'crop=%d:%d:%d:%d' % (c_size, c_size, v_width // 2 - c_size // 2,
51 | v_height // 2 - c_size // 2), '-c:v', 'libx264',
52 | '-crf', '15', '-pix_fmt', 'yuv420p', crop_file
53 | ]
54 | subprocess.call(cmd)
55 |
56 | cmd = [
57 | 'ffmpeg', '-y', '-i', crop_file, '-vf',
58 | 'scale=%d:-1' % s_size, '-c:v', 'libx264', '-crf', '15', '-pix_fmt',
59 | 'yuv420p', scale_file
60 | ]
61 | subprocess.call(cmd)
62 |
63 | cmd = [
64 | 'ffmpeg', '-i', scale_file, '-r', '30', '-start_number', '0',
65 | os.path.join(frame_dir, '%05d.png')
66 | ]
67 | subprocess.call(cmd)
68 | if args.wild:
69 | cmd = [
70 | 'ffmpeg', '-i', file, '-r', '60', '-start_number', '0',
71 | os.path.join(frame_slam_dir, '%05d.png')
72 | ]
73 | subprocess.call(cmd)
74 |
75 | # cmd = ['rm', '-rf', crop_file, scale_file]
76 | # subprocess.call(cmd)
77 |
--------------------------------------------------------------------------------
/embodiedpose/data_process/process_gpa.py:
--------------------------------------------------------------------------------
1 | import shutil
2 | import glob
3 | import os
4 | import sys
5 | import pdb
6 | import os.path as osp
7 |
8 | sys.path.append(os.getcwd())
9 |
10 | import torch
11 | import numpy as np
12 | import matplotlib.pyplot as plt
13 | import pickle as pk
14 | import joblib
15 |
16 | from tqdm import tqdm
17 | import pickle as pk
18 | import joblib
19 | from scipy.spatial.transform import Rotation as sRot
20 | from collections import defaultdict
21 | import json
22 | from tqdm import tqdm
23 |
24 |
25 | def convert_to_h36m(joints):
26 | joints = joints / 1000
27 | j3ds_acc, j3d_h36m_acc = [], []
28 | for j3ds in joints:
29 | j3d_h36m = j3ds[j_ind]
30 | j3d_s24 = np.zeros([24, 4])
31 | j3d_s24[global_idx, :3] = j3d_h36m
32 | j3d_s24[global_idx, 3] = 1
33 | j3ds_acc.append(j3d_s24)
34 | j3d_h36m_acc.append(j3ds[j_ind_h36m_correct])
35 | j3ds_acc, j3d_h36m_acc = np.array(j3ds_acc), np.array(j3d_h36m_acc)
36 | return j3ds_acc, j3d_h36m_acc
37 |
38 |
39 | ids = np.load('/hdd/zen/data/video_pose/GPA/c2gimgid.npy')
40 | gpa_base_dir = "/hdd/zen/data/video_pose/GPA/"
41 | cam_ids = np.load('/hdd/zen/data/video_pose/GPA/cam_ids_750k.npy')
42 | # joints_3d = json.load(open('/hdd/zen/data/video_pose/GPA/xyz_gpa12_cntind_world_cams.json', "r"))
43 | joints_3d_full = json.load(
44 | open('/hdd/zen/data/video_pose/GPA/gpa_videojson_full.json', "r"))
45 |
46 | global_idx = [14, 3, 4, 5, 2, 1, 0, 16, 12, 17, 13, 9, 10, 11, 8, 7,
47 | 6] # Fixing top of head
48 | j_ind = [0, 29, 30, 31, 24, 25, 26, 3, 5, 6, 7, 17, 18, 19, 9, 10,
49 | 11] # Upper one spine joint
50 | j_ind_h36m_correct = [
51 | 0, 24, 25, 26, 29, 30, 31, 2, 5, 6, 7, 17, 18, 19, 9, 10, 11
52 | ]
53 |
54 |
55 | def convert_to_h36m(joints):
56 | joints = joints / 1000
57 | j3ds_acc, j3d_h36m_acc = [], []
58 | for j3ds in joints:
59 | j3d_h36m = j3ds[j_ind]
60 | j3d_s24 = np.zeros([24, 4])
61 | j3d_s24[global_idx, :3] = j3d_h36m
62 | j3d_s24[global_idx, 3] = 1
63 | j3ds_acc.append(j3d_s24)
64 | j3d_h36m_acc.append(j3ds[j_ind_h36m_correct])
65 | j3ds_acc, j3d_h36m_acc = np.array(j3ds_acc), np.array(j3d_h36m_acc)
66 | return j3ds_acc, j3d_h36m_acc
67 |
68 |
69 | gpa_dataset_full = {}
70 | agg_keys = ['markers', 'joints_3d_mm', "joints_2d", "file_name"]
71 |
72 | video_byframe_data = defaultdict(list)
73 | for i in range(len(joints_3d_full['annotations'])):
74 | video_name = "_".join(
75 | (joints_3d_full['annotations'][i]['take_name'],
76 | joints_3d_full['annotations'][i]['subject_id'], cam_ids[i]))
77 | video_byframe_data[video_name].append(joints_3d_full['annotations'][i])
78 |
79 | for video_key, frames_data in video_byframe_data.items():
80 | video_data = defaultdict(list)
81 | for k in [
82 | 'camera_p0', 'camera_p1', 'camera_p2', 'camera_p3', 'subject_id',
83 | 'take_name'
84 | ]:
85 | video_data[k] = frames_data[0][k]
86 | for frame_data in frames_data:
87 | for k in agg_keys:
88 | video_data[k].append(frame_data[k])
89 |
90 | for k in agg_keys:
91 | video_data[k] = np.array(video_data[k])
92 | j3ds_acc, j3d_h36m_acc = convert_to_h36m(
93 | np.array(video_data['joints_3d_mm']))
94 | video_data["S24"] = j3ds_acc
95 | video_data["S17"] = j3d_h36m_acc
96 | video_data["S34"] = np.array(video_data['joints_3d_mm']) / 1000
97 | gpa_dataset_full[video_key] = video_data
98 |
99 | joblib.dump(gpa_dataset_full,
100 | osp.join(gpa_base_dir, 'gpa_dataset_full_take1.pkl'))
101 | # gap_annot = joblib.load(osp.join(gpa_base_dir, 'gpa_dataset_full_take1.pkl'))
102 | # import ipdb; ipdb.set_trace()
--------------------------------------------------------------------------------
/embodiedpose/data_process/process_hybrik.py:
--------------------------------------------------------------------------------
1 | import glob
2 | import os
3 | import os.path as osp
4 | import sys
5 | import joblib
6 |
7 | import numpy as np
8 | import torch
9 |
10 | sys.path.append(os.getcwd())
11 |
12 | from embodiedpose.utils.torch_geometry_transforms import quaternion_to_angle_axis as quat2aa
13 |
14 | TRIM_EDGES = 90
15 |
16 | if __name__ == '__main__':
17 | seq_filenames = sorted(glob.glob('/home/shun/dev/cmu/HybrIK/data/PROX/*'))
18 |
19 | data = {}
20 | for seq_filename in seq_filenames:
21 | seq_name = osp.basename(seq_filename)
22 | female_subjects_ids = [162, 3452, 159, 3403]
23 | subject_id = int(seq_filename.split('_')[-2])
24 | if subject_id in female_subjects_ids:
25 | gender = 'female'
26 | else:
27 | gender = 'male'
28 | npy_filenames = sorted(glob.glob(osp.join(seq_filename, '*.npz')))
29 | smpl_dict = {
30 | 'betas': [],
31 | 'trans': [],
32 | 'pose_aa': [],
33 | 'joints3d': [],
34 | 'gender': gender,
35 | }
36 | for npy_filename in npy_filenames:
37 | result = np.load(npy_filename)
38 | smpl_dict['betas'].append(result['pred_shape'])
39 | smpl_dict['trans'].append(result['pred_3d_root'] / 1000.0)
40 | pose_aa = quat2aa(torch.from_numpy(
41 | result['pred_theta_quat'])).numpy().reshape(-1)
42 | smpl_dict['pose_aa'].append(pose_aa)
43 | smpl_dict['joints3d'].append(result['pred_3d_kpt'])
44 |
45 | smpl_dict['betas'] = np.stack(smpl_dict['betas'][0],
46 | axis=0)[:10].mean(axis=0)
47 | smpl_dict['pose_aa'] = np.stack(
48 | smpl_dict['pose_aa'])[TRIM_EDGES:-TRIM_EDGES]
49 | smpl_dict['trans'] = np.stack(
50 | smpl_dict['trans'])[TRIM_EDGES:-TRIM_EDGES]
51 | smpl_dict['joints3d'] = np.stack(
52 | smpl_dict['joints3d'])[TRIM_EDGES:-TRIM_EDGES]
53 |
54 | data[seq_name] = smpl_dict
55 | print(seq_name)
56 |
57 | joblib.dump(data,
58 | open('/data/dataset/prox_dataset/hybrik_processed.pkl', "wb"))
59 |
--------------------------------------------------------------------------------
/embodiedpose/data_process/process_lemo_and_prox.py:
--------------------------------------------------------------------------------
1 | import argparse
2 | import glob
3 | import numpy as np
4 | import os
5 | import sys
6 | import pickle
7 | import joblib
8 |
9 | sys.path.append(os.getcwd())
10 |
11 | from uhc.smpllib.smpl_robot import Robot
12 | from uhc.smpllib.torch_smpl_humanoid import Humanoid
13 | import mujoco_py
14 |
15 | from uhc.utils.config_utils.copycat_config import Config as CC_Config
16 |
17 | if __name__ == '__main__':
18 | parser = argparse.ArgumentParser()
19 | parser.add_argument("--dataset", default='lemo', choices=['lemo', 'prox', 'proxd'])
20 | args = parser.parse_args()
21 |
22 | TRIM_EDGES = 90
23 | prox_path = "/data/dataset/prox_dataset/"
24 | if args.dataset == 'prox':
25 | results_path = '/data/dataset/prox_dataset/PROX_v2/**/*.pkl'
26 | elif args.dataset == 'proxd':
27 | results_path = '/data/dataset/prox_dataset/PROXD_v2/**/*.pkl'
28 | elif args.dataset == 'lemo':
29 | results_path = '/data/dataset/prox_dataset/LEMO_results/**/*.pkl'
30 | results_filepaths = glob.glob(results_path)
31 |
32 | data = {}
33 | for result_filepath in results_filepaths:
34 | with open(result_filepath, 'rb') as f:
35 | results = pickle.load(f)
36 | betas = results['betas']
37 | global_orient = results['global_orient']
38 | body_pose = results['body_pose']
39 | transl = results['transl']
40 | seq_length = transl.shape[0] - 2 * TRIM_EDGES
41 |
42 | pose_aa = np.concatenate((global_orient, body_pose, np.zeros((body_pose.shape[0], 6))), axis=1)
43 |
44 | female_subjects_ids = [162, 3452, 159, 3403]
45 | subject_id = int(result_filepath.split('_')[-2])
46 | if subject_id in female_subjects_ids:
47 | gender = 'female'
48 | else:
49 | gender = 'male'
50 |
51 | seq_name = result_filepath.split('/')[-2]
52 |
53 | smpl_dict = {}
54 | smpl_dict['gender'] = gender
55 | smpl_dict['betas'] = betas
56 | smpl_dict['pose_aa'] = pose_aa[TRIM_EDGES:-TRIM_EDGES]
57 | smpl_dict['trans'] = transl[TRIM_EDGES:-TRIM_EDGES]
58 | data[seq_name] = smpl_dict
59 |
60 | joblib.dump(data, f'/data/dataset/prox_dataset/{args.dataset}_processed.pkl')
61 | print(args.dataset)
62 | print(len(data.keys()))
63 | print('Saved')
64 |
--------------------------------------------------------------------------------
/embodiedpose/data_process/process_thirdeye.py:
--------------------------------------------------------------------------------
1 | import os
2 | import argparse
3 | import joblib
4 | import glob
5 | import os.path as osp
6 |
7 | import torch
8 | import mujoco_py
9 |
10 | from uhc.smpllib.smpl_mujoco import qpos_to_smpl
11 | from uhc.utils.config_utils.copycat_config import Config as CC_Config
12 | from uhc.smpllib.smpl_robot import Robot
13 | from uhc.smpllib.torch_smpl_humanoid import Humanoid
14 |
15 |
16 | def load_humanoid():
17 | cc_cfg = CC_Config(cfg_id="copycat_e_1", base_dir="../Copycat")
18 | smpl_robot = Robot(
19 | cc_cfg.robot_cfg,
20 | data_dir=osp.join(cc_cfg.base_dir, "data/smpl"),
21 | masterfoot=cc_cfg.masterfoot,
22 | )
23 | model = mujoco_py.load_model_from_xml(smpl_robot.export_xml_string().decode("utf-8"))
24 | humanoid = Humanoid(model=model)
25 | return smpl_robot, humanoid, cc_cfg
26 |
27 |
28 | if __name__ == '__main__':
29 | parser = argparse.ArgumentParser()
30 | parser.add_argument("--cfg_id", default=None)
31 | parser.add_argument("--epoch", default=-1, type=int)
32 | parser.add_argument("--data", default="prox", type=str)
33 | args = parser.parse_args()
34 |
35 | data_root = '/hdd/zen/data/video_pose/prox/qualitative/'
36 | res_dir = f"results/scene+/{args.cfg_id}/results/"
37 | humor_path = osp.join(data_root, "thirdeye_anns_proxd_overlap_full.pkl")
38 | if args.data == "prox":
39 | thirdeye_path = osp.join(res_dir, f"{args.epoch}_thirdeye_anns_prox_overlap_no_clip_coverage_full.pkl")
40 | elif args.data == "proxd":
41 | thirdeye_path = osp.join(res_dir, f"{args.epoch}_thirdeye_anns_proxd_overlap_full_coverage_full.pkl")
42 |
43 | humor_results = joblib.load(humor_path)
44 | thirdeye_results = joblib.load(thirdeye_path)
45 |
46 | data = {}
47 | success_cnt = 0
48 | smpl_robot, humanoid, cc_cfg = load_humanoid()
49 | for seq_name in humor_results.keys():
50 | mean_shape = humor_results[seq_name]['betas']
51 | qpos = thirdeye_results[seq_name]['pred']
52 | if thirdeye_results[seq_name]['succ']:
53 | success_cnt += 1
54 |
55 | smpl_robot.load_from_skeleton(torch.from_numpy(mean_shape[None,]), gender=[0], objs_info=None)
56 | model = mujoco_py.load_model_from_xml(smpl_robot.export_xml_string().decode("utf-8"))
57 |
58 | pose_aa, trans = qpos_to_smpl(qpos, model, cc_cfg.robot_cfg.get("model", "smpl"))
59 |
60 | female_subjects_ids = [162, 3452, 159, 3403]
61 | subject_id = int(seq_name.split('_')[-2])
62 | if subject_id in female_subjects_ids:
63 | gender = 'female'
64 | else:
65 | gender = 'male'
66 | smpl_dict = {}
67 | smpl_dict['gender'] = gender
68 | smpl_dict['betas'] = mean_shape
69 | smpl_dict['pose_aa'] = pose_aa
70 | smpl_dict['trans'] = trans
71 | smpl_dict['fail'] = thirdeye_results[seq_name]['fail_safe']
72 | if smpl_dict['fail']:
73 | print('fail!')
74 | data[seq_name] = smpl_dict
75 |
76 | print(seq_name, "gender:", gender)
77 | data['success_rate'] = success_cnt / 60
78 | out_path = osp.join(res_dir, f'thirdeye_final_processed.pkl')
79 | joblib.dump(data, out_path)
80 | print('Saved')
81 | print(thirdeye_path, out_path)
82 |
--------------------------------------------------------------------------------
/embodiedpose/data_process/script_pwc.py:
--------------------------------------------------------------------------------
1 | import glob
2 | import os
3 | import sys
4 | import pdb
5 | import os.path as osp
6 |
7 | sys.path.append(os.getcwd())
8 | sys.path.append("./3rdparty/PWC_Net/PyTorch")
9 |
10 | import cv2
11 | import argparse
12 | import torch
13 | import numpy as np
14 | from math import ceil
15 | from torch.autograd import Variable
16 | # import pwc_models
17 | from PWC_Net.PyTorch.models.PWCNet import pwc_dc_net
18 | import glob
19 | from tqdm import tqdm
20 |
21 | parser = argparse.ArgumentParser()
22 | parser.add_argument('--mocap-id', type=str, default=None)
23 | parser.add_argument('--take-id', type=str, default=None)
24 | parser.add_argument(
25 | '--data_dir',
26 | action='store_true',
27 | default="/hdd/zen/data/Reallite/contextegopose/ReliveDataset/")
28 | args = parser.parse_args()
29 |
30 | print('model loaded...')
31 | pwc_model_fn = './3rdparty/PWC-Net/PyTorch/pwc_net.pth.tar'
32 | net = pwc_dc_net(pwc_model_fn)
33 | print('model loaded...')
34 | net = net.cuda()
35 | net.eval()
36 |
37 |
38 | def get_flow(im1, im2):
39 | im_all = [im[:, :, :3] for im in [im1, im2]]
40 | # rescale the image size to be multiples of 64e
41 | divisor = 64.
42 | H = im_all[0].shape[0]
43 | W = im_all[0].shape[1]
44 | H_ = int(ceil(H / divisor) * divisor)
45 | W_ = int(ceil(W / divisor) * divisor)
46 | for i in range(len(im_all)):
47 | im_all[i] = cv2.resize(im_all[i], (W_, H_))
48 |
49 | for _i, _inputs in enumerate(im_all):
50 | # im_all[_i] = im_all[_i][:, :, ::-1] # for OpenCV, it is already BGR mode, so no need for this reversion
51 | im_all[_i] = 1.0 * im_all[_i] / 255.0
52 | im_all[_i] = np.transpose(im_all[_i], (2, 0, 1))
53 | im_all[_i] = torch.from_numpy(im_all[_i])
54 | im_all[_i] = im_all[_i].expand(1, im_all[_i].size()[0],
55 | im_all[_i].size()[1],
56 | im_all[_i].size()[2])
57 | im_all[_i] = im_all[_i].float()
58 |
59 | im_all = torch.autograd.Variable(torch.cat(im_all, 1).cuda(),
60 | volatile=True)
61 | flo = net(im_all)
62 | flo = flo[0] * 20.0
63 | flo = flo.cpu().data.numpy()
64 | # scale the flow back to the input size
65 | flo = np.swapaxes(np.swapaxes(flo, 0, 1), 1, 2) #
66 | u_ = cv2.resize(flo[:, :, 0], (W, H))
67 | v_ = cv2.resize(flo[:, :, 1], (W, H))
68 | u_ *= W / float(W_)
69 | v_ *= H / float(H_)
70 | flo = np.dstack((u_, v_))
71 | return flo
72 |
73 |
74 | def visualize_flow(flo, vis_fn):
75 | mag, ang = cv2.cartToPolar(flo[..., 0], flo[..., 1])
76 | hsv = np.zeros((flo.shape[0], flo.shape[1], 3), dtype=np.uint8)
77 | hsv[..., 0] = ang * 180 / np.pi / 2
78 | hsv[..., 1] = 255
79 | hsv[..., 2] = cv2.normalize(mag, None, 0, 255, cv2.NORM_MINMAX)
80 | rgb = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)
81 | cv2.imwrite(vis_fn, rgb)
82 |
83 |
84 | fpv_frames_folder = os.path.expanduser("{}/fpv_frames".format(args.data_dir))
85 | fpv_of_folder = os.path.expanduser("{}/fpv_of".format(args.data_dir))
86 | if not os.path.exists(fpv_of_folder):
87 | os.makedirs(fpv_of_folder)
88 |
89 | if args.mocap_id is not None:
90 | # take_folders = [os.path.basename(x) for x in glob.glob('%s/%s_*' % (fpv_frames_folder, args.mocap_id))]
91 | take_folders = [
92 | os.path.basename(x)
93 | for x in glob.glob('%s/%s*' % (fpv_frames_folder, args.mocap_id))
94 | ]
95 | else:
96 | take_folders = [args.take_id]
97 | take_folders.sort()
98 | for folder in take_folders:
99 | print(folder)
100 |
101 | for folder in take_folders:
102 | flo_folder = os.path.join(fpv_of_folder, folder)
103 | if not os.path.exists(flo_folder):
104 | os.makedirs(flo_folder)
105 | frames = glob.glob(os.path.join(fpv_frames_folder, folder, '*.png'))
106 | frames.sort()
107 | print(frames)
108 | im1 = cv2.imread(frames[0])
109 | for i in range(0, len(frames) - 1):
110 | im2 = cv2.imread(frames[i + 1])
111 | flo = get_flow(im1, im2)
112 | print(i, np.min(flo), np.max(flo))
113 | np.save('%s/%05d.npy' % (flo_folder, i), flo)
114 | visualize_flow(flo, '%s/%05d.png' % (flo_folder, i))
115 | im1 = im2
116 |
--------------------------------------------------------------------------------
/embodiedpose/envs/__init__.py:
--------------------------------------------------------------------------------
1 | from .humanoid_kin_res import HumanoidKinEnvRes
2 |
3 | env_dict = {
4 | "kin_res": HumanoidKinEnvRes,
5 | }
6 |
--------------------------------------------------------------------------------
/embodiedpose/mocap/pose.py:
--------------------------------------------------------------------------------
1 | import numpy as np
2 | import math
3 | from mocap.bvh import Bvh
4 | from embodiedpose.utils.transformation import quaternion_slerp, quaternion_from_euler, euler_from_quaternion
5 | import os
6 |
7 |
8 | def load_amc_file(fname, scale):
9 |
10 | with open(fname) as f:
11 | content = f.readlines()
12 |
13 | bone_addr = dict()
14 | poses = []
15 | cur_pos = None
16 | fr = 1
17 | for line in content:
18 | line_words = line.split()
19 | cmd = line_words[0]
20 | if cmd == str(fr):
21 | if cur_pos:
22 | poses.append(np.array(cur_pos))
23 | cur_pos = []
24 | fr += 1
25 | elif cur_pos is not None:
26 | start_ind = len(cur_pos)
27 | if cmd == 'root':
28 | cur_pos += [float(word) * scale for word in line_words[1:4]]
29 | cur_pos += [
30 | math.radians(float(word)) for word in line_words[4:]
31 | ]
32 | elif cmd == 'lfoot' or cmd == 'rfoot':
33 | cur_pos += reversed(
34 | [math.radians(float(word)) for word in line_words[1:]])
35 | if len(cur_pos) < 3:
36 | cur_pos.insert(-1, 0.0)
37 | else:
38 | cur_pos += reversed(
39 | [math.radians(float(word)) for word in line_words[1:]])
40 | if fr == 2:
41 | end_ind = len(cur_pos)
42 | bone_addr[cmd] = (start_ind, end_ind)
43 |
44 | if cur_pos:
45 | poses.append(np.array(cur_pos))
46 | poses = np.vstack(poses)
47 | return poses, bone_addr
48 |
49 |
50 | def load_bvh_file(fname, skeleton):
51 | with open(fname) as f:
52 | mocap = Bvh(f.read())
53 |
54 | # build bone_addr
55 | bone_addr = dict()
56 | start_ind = 0
57 | for bone in skeleton.bones:
58 | end_ind = start_ind + len(bone.channels)
59 | bone_addr[bone.name] = (start_ind, end_ind)
60 | start_ind = end_ind
61 | dof_num = start_ind
62 |
63 | poses = np.zeros((mocap.nframes, dof_num))
64 | for i in range(mocap.nframes):
65 | for bone in skeleton.bones:
66 | trans = np.array(
67 | mocap.frame_joint_channels(i, bone.name, bone.channels))
68 | if bone == skeleton.root:
69 | trans[:3] *= skeleton.len_scale
70 | trans[3:6] = np.deg2rad(trans[3:6])
71 | else:
72 | trans = np.deg2rad(trans)
73 | start_ind, end_ind = bone_addr[bone.name]
74 | poses[i, start_ind:end_ind] = trans
75 |
76 | return poses, bone_addr, mocap.frame_rate
77 |
78 |
79 | ##numpy genfromtxt parser
80 | def load_obj_bvh_file(fname):
81 | len_scale = 0.0254
82 | skip_line = 9
83 | #skip_line = 54
84 | data = np.genfromtxt(fname,
85 | dtype=float,
86 | delimiter=' ',
87 | skip_header=skip_line)[:, :6]
88 | data[:, :3] *= len_scale
89 | data[:, 3:] = np.deg2rad(data[:, 3:])
90 |
91 | f = open(fname)
92 | frameRate = float(f.readlines()[skip_line - 1].split(':')[1].rstrip(
93 | os.linesep))
94 |
95 | return data, round(1.0 / frameRate)
96 |
97 |
98 | def load_obj_position(fname):
99 | len_scale = 0.0254
100 | data = np.genfromtxt(fname, dtype=float, delimiter=' ',
101 | skip_header=9)[:, :3]
102 | data[:, :] *= len_scale
103 | return np.mean(data, axis=0)
104 |
105 |
106 | def lin_interp(pose1, pose2, t):
107 | pose_t = (1 - t) * pose1 + t * pose2
108 | return pose_t
109 |
110 |
111 | def interpolated_traj(poses, sample_t=0.030, mocap_fr=120):
112 | N = poses.shape[0]
113 | T = float(N - 1) / mocap_fr
114 | num = int(math.floor(T / sample_t))
115 | sampling_times = np.arange(num + 1) * sample_t * mocap_fr
116 |
117 | poses_samp = []
118 | for t in sampling_times:
119 | start = int(math.floor(t))
120 | end = min(int(math.ceil(t)), poses.shape[0] - 1)
121 | poses_samp.append(
122 | lin_interp(poses[start, :], poses[end, :], t - math.floor(t)))
123 | poses_samp = np.vstack(poses_samp)
124 |
125 | return poses_samp
126 |
--------------------------------------------------------------------------------
/embodiedpose/models/__init__.py:
--------------------------------------------------------------------------------
1 | from .kin_net_humor_res import KinNetHumorRes
2 |
3 | model_dict = {
4 | "kin_net_humor_res": KinNetHumorRes,
5 | }
6 |
7 | from .kin_policy_humor_res import KinPolicyHumorRes
8 |
9 | policy_dict = {
10 | "kin_policy_humor_res": KinPolicyHumorRes,
11 | }
12 |
--------------------------------------------------------------------------------
/embodiedpose/models/humor/chamfer_distance/LICENSE:
--------------------------------------------------------------------------------
1 |
2 |
3 | MIT License
4 |
5 | Copyright (c) [year] [fullname]
6 |
7 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
8 |
9 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
10 |
11 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
12 |
--------------------------------------------------------------------------------
/embodiedpose/models/humor/chamfer_distance/__init__.py:
--------------------------------------------------------------------------------
1 | from .chamfer_distance import ChamferDistance
2 |
--------------------------------------------------------------------------------
/embodiedpose/models/humor/chamfer_distance/chamfer_distance.py:
--------------------------------------------------------------------------------
1 | #
2 | # Taken from https://github.com/chrdiller/pyTorchChamferDistance
3 | #
4 |
5 | import torch
6 | from torch.utils.cpp_extension import load
7 | import os
8 | FileDirPath = os.path.dirname(os.path.realpath(__file__))
9 | #print('[ INFO ]: Chamfer directory:', FileDirPath)
10 | cd = load(name='cd', sources=[os.path.join(FileDirPath, 'chamfer_distance.cpp'), os.path.join(FileDirPath, 'chamfer_distance.cu')])
11 |
12 | class ChamferDistanceFunction(torch.autograd.Function):
13 | @staticmethod
14 | def forward(ctx, xyz1, xyz2):
15 | batchsize, n, _ = xyz1.size()
16 | _, m, _ = xyz2.size()
17 | xyz1 = xyz1.contiguous()
18 | xyz2 = xyz2.contiguous()
19 | dist1 = torch.zeros(batchsize, n)
20 | dist2 = torch.zeros(batchsize, m)
21 |
22 | idx1 = torch.zeros(batchsize, n, dtype=torch.int)
23 | idx2 = torch.zeros(batchsize, m, dtype=torch.int)
24 |
25 | if not xyz1.is_cuda:
26 | cd.forward(xyz1, xyz2, dist1, dist2, idx1, idx2)
27 | else:
28 | dist1 = dist1.cuda()
29 | dist2 = dist2.cuda()
30 | idx1 = idx1.cuda()
31 | idx2 = idx2.cuda()
32 | cd.forward_cuda(xyz1, xyz2, dist1, dist2, idx1, idx2)
33 |
34 | ctx.save_for_backward(xyz1, xyz2, idx1, idx2)
35 |
36 | return dist1, dist2
37 |
38 | @staticmethod
39 | def backward(ctx, graddist1, graddist2):
40 | xyz1, xyz2, idx1, idx2 = ctx.saved_tensors
41 |
42 | graddist1 = graddist1.contiguous()
43 | graddist2 = graddist2.contiguous()
44 |
45 | gradxyz1 = torch.zeros(xyz1.size())
46 | gradxyz2 = torch.zeros(xyz2.size())
47 |
48 | if not graddist1.is_cuda:
49 | cd.backward(xyz1, xyz2, gradxyz1, gradxyz2, graddist1, graddist2, idx1, idx2)
50 | else:
51 | gradxyz1 = gradxyz1.cuda()
52 | gradxyz2 = gradxyz2.cuda()
53 | cd.backward_cuda(xyz1, xyz2, gradxyz1, gradxyz2, graddist1, graddist2, idx1, idx2)
54 |
55 | return gradxyz1, gradxyz2
56 |
57 |
58 | class ChamferDistance(torch.nn.Module):
59 | def forward(self, xyz1, xyz2):
60 | return ChamferDistanceFunction.apply(xyz1, xyz2)
61 |
--------------------------------------------------------------------------------
/embodiedpose/models/humor/utils/humor_mujoco.py:
--------------------------------------------------------------------------------
1 | from uhc.smpllib.smpl_parser import SMPL_BONE_ORDER_NAMES, SMPLH_BONE_ORDER_NAMES
2 | from uhc.khrylib.utils import get_body_qposaddr
3 | import numpy as np
4 |
5 | MUJOCO_2_SMPL = np.array([0, 1, 5, 9, 2, 6, 10, 3, 7, 11, 4, 8, 12, 14, 19, 13, 15, 20, 16, 21, 17, 22, 18, 23])
6 | SMPL_2_OP = np.array([False, True, True, True, True, True, True, True, True, True, True, True, True, True, True, False, False, False, False, False, False, False, False, False, False]) # 25 joints -> 14 joints
7 | OP_14_to_OP_12 = np.array([True, True, True, True, True, True, True, True, False, True, True, False, True, True])
8 |
9 |
10 | def reorder_joints_to_humor(joints, mj_model, model="smpl"):
11 | if model == "smpl":
12 | joint_names = SMPL_BONE_ORDER_NAMES
13 | elif model == "smplh":
14 | joint_names = SMPLH_BONE_ORDER_NAMES
15 |
16 | mujoco_joint_names = list(get_body_qposaddr(mj_model).keys())
17 | mujoco_2_smpl = [mujoco_joint_names.index(q) for q in joint_names if q in mujoco_joint_names]
18 | ordered_joints = joints.reshape(-1, 24, 3)[:, mujoco_2_smpl].reshape(-1, 72)
19 | return ordered_joints
20 |
--------------------------------------------------------------------------------
/embodiedpose/models/humor/utils/torch.py:
--------------------------------------------------------------------------------
1 | import sys, os, time
2 | import torch
3 | import torch.nn as nn
4 | import numpy as np
5 |
6 |
7 | def get_device(gpu_idx=0):
8 | '''
9 | Returns the pytorch device for the given gpu index.
10 | '''
11 | gpu_device_str = 'cuda:%d' % (gpu_idx)
12 | device_str = gpu_device_str if torch.cuda.is_available() else 'cpu'
13 | if device_str == gpu_device_str:
14 | print('Using detected GPU...')
15 | device_str = 'cuda:0'
16 | else:
17 | print('No detected GPU...using CPU.')
18 | device = torch.device(device_str)
19 | return device
20 |
21 |
22 | def torch_to_numpy(tensor_list):
23 | return [x.to('cpu').data.numpy() for x in tensor_list]
24 |
25 |
26 | def torch_to_scalar(tensor_list):
27 | return [x.to('cpu').item() for x in tensor_list]
28 |
29 |
30 | copy2cpu = lambda tensor: tensor.detach().cpu().numpy()
31 |
32 |
33 | def save_state(file_out,
34 | model,
35 | optimizer,
36 | cur_epoch=0,
37 | min_val_loss=float('Inf'),
38 | min_train_loss=float('Inf'),
39 | ignore_keys=None):
40 | model_state_dict = model.state_dict()
41 | if ignore_keys is not None:
42 | model_state_dict = {
43 | k: v
44 | for k, v in model_state_dict.items()
45 | if k.split('.')[0] not in ignore_keys
46 | }
47 |
48 | full_checkpoint_dict = {
49 | 'model': model_state_dict,
50 | 'optim': optimizer.state_dict(),
51 | 'epoch': cur_epoch,
52 | 'min_val_loss': min_val_loss,
53 | 'min_train_loss': min_train_loss
54 | }
55 | torch.save(full_checkpoint_dict, file_out)
56 |
57 |
58 | def load_state(load_path,
59 | model,
60 | optimizer=None,
61 | is_parallel=False,
62 | map_location=None,
63 | ignore_keys=None):
64 | if not os.path.exists(load_path):
65 | print('Could not find checkpoint at path ' + load_path)
66 |
67 | full_checkpoint_dict = torch.load(load_path, map_location=map_location)
68 | model_state_dict = full_checkpoint_dict['model']
69 | optim_state_dict = full_checkpoint_dict['optim']
70 |
71 | # load model weights
72 | for k, v in model_state_dict.items():
73 | if k.split('.')[0] == 'module' and not is_parallel:
74 | # then it was trained with Data parallel
75 | print('Loading weights trained with DataParallel...')
76 | model_state_dict = {
77 | '.'.join(k.split('.')[1:]): v
78 | for k, v in model_state_dict.items()
79 | if k.split('.')[0] == 'module'
80 | }
81 | break
82 |
83 | if ignore_keys is not None:
84 | model_state_dict = {
85 | k: v
86 | for k, v in model_state_dict.items()
87 | if k.split('.')[0] not in ignore_keys
88 | }
89 |
90 | # overwrite entries in the existing state dict
91 | missing_keys, unexpected_keys = model.load_state_dict(model_state_dict,
92 | strict=False)
93 | if ignore_keys is not None:
94 | missing_keys = [
95 | k for k in missing_keys if k.split('.')[0] not in ignore_keys
96 | ]
97 | unexpected_keys = [
98 | k for k in unexpected_keys if k.split('.')[0] not in ignore_keys
99 | ]
100 | if len(missing_keys) > 0:
101 | print(
102 | 'WARNING: The following keys could not be found in the given state dict - ignoring...'
103 | )
104 | # print(missing_keys)
105 | if len(unexpected_keys) > 0:
106 | print(
107 | 'WARNING: The following keys were found in the given state dict but not in the current model - ignoring...'
108 | )
109 | print(unexpected_keys)
110 |
111 | # load optimizer weights
112 | if optimizer is not None:
113 | optimizer.load_state_dict(optim_state_dict)
114 |
115 | min_train_loss = float('Inf')
116 | if 'min_train_loss' in full_checkpoint_dict.keys():
117 | min_train_loss = full_checkpoint_dict['min_train_loss']
118 |
119 | return full_checkpoint_dict['epoch'], full_checkpoint_dict[
120 | 'min_val_loss'], min_train_loss
121 |
--------------------------------------------------------------------------------
/embodiedpose/models/humor/utils/velocities.py:
--------------------------------------------------------------------------------
1 | import torch
2 | from embodiedpose.models.humor.utils.transforms import rotation_matrix_to_angle_axis, batch_rodrigues
3 |
4 |
5 | def estimate_velocities(trans, root_orient, joints3d, data_fps, aa_to_mat = True):
6 | '''
7 | From the SMPL sequence, estimates velocity inputs to the motion prior.
8 |
9 | - trans : root translation
10 | - root_orient : aa root orientation
11 | - body_pose
12 | '''
13 | B, T, _ = trans.size()
14 | h = 1.0 / data_fps
15 | trans_vel = estimate_linear_velocity(trans, h)
16 | joints_vel = estimate_linear_velocity(joints3d, h)
17 | if aa_to_mat:
18 | root_orient = batch_rodrigues(root_orient.reshape((-1, 3))).reshape((B, T, 3, 3))
19 |
20 | if root_orient.shape[-1] != 3: root_orient = root_orient.reshape((B, T, 3, 3))
21 | root_orient_vel = estimate_angular_velocity(root_orient, h)
22 | return trans_vel, joints_vel, root_orient_vel
23 |
24 |
25 | def estimate_linear_velocity(data_seq, h):
26 | '''
27 | Given some batched data sequences of T timesteps in the shape (B, T, ...), estimates
28 | the velocity for the middle T-2 steps using a second order central difference scheme.
29 | The first and last frames are with forward and backward first-order
30 | differences, respectively
31 | - h : step size
32 | '''
33 | # first steps is forward diff (t+1 - t) / h
34 | init_vel = (data_seq[:, 1:2] - data_seq[:, :1]) / h
35 | # middle steps are second order (t+1 - t-1) / 2h
36 | middle_vel = (data_seq[:, 2:] - data_seq[:, 0:-2]) / (2 * h)
37 | # last step is backward diff (t - t-1) / h
38 | final_vel = (data_seq[:, -1:] - data_seq[:, -2:-1]) / h
39 |
40 | vel_seq = torch.cat([init_vel, middle_vel, final_vel], dim=1)
41 | return vel_seq
42 |
43 |
44 | def estimate_angular_velocity(rot_seq, h):
45 | '''
46 | Given a batch of sequences of T rotation matrices, estimates angular velocity at T-2 steps.
47 | Input sequence should be of shape (B, T, ..., 3, 3)
48 | '''
49 | # see https://en.wikipedia.org/wiki/Angular_velocity#Calculation_from_the_orientation_matrix
50 | dRdt = estimate_linear_velocity(rot_seq, h)
51 | R = rot_seq
52 | RT = R.transpose(-1, -2)
53 | # compute skew-symmetric angular velocity tensor
54 | w_mat = torch.matmul(dRdt, RT)
55 | # pull out angular velocity vector
56 | # average symmetric entries
57 | w_x = (-w_mat[..., 1, 2] + w_mat[..., 2, 1]) / 2.0
58 | w_y = (w_mat[..., 0, 2] - w_mat[..., 2, 0]) / 2.0
59 | w_z = (-w_mat[..., 0, 1] + w_mat[..., 1, 0]) / 2.0
60 | w = torch.stack([w_x, w_y, w_z], axis=-1)
61 | return w
62 |
63 |
64 | def estimate_single_angular_velocity(rot1, rot2, h):
65 | '''
66 | Given a sequence of 2 rotation matrices,
67 | estimates angular velocity at the first step.
68 | '''
69 | dRdt = (rot1 - rot2) / h
70 | R = rot1
71 | RT = R.transpose(-1, -2)
72 | # compute skew-symmetric angular velocity tensor
73 | w_mat = torch.matmul(dRdt, RT)
74 | # pull out angular velocity vector
75 | # average symmetric entries
76 | w_x = (-w_mat[1, 2] + w_mat[2, 1]) / 2.0
77 | w_y = (w_mat[0, 2] - w_mat[2, 0]) / 2.0
78 | w_z = (-w_mat[0, 1] + w_mat[1, 0]) / 2.0
79 | w = torch.stack([w_x, w_y, w_z], axis=-1)
80 | return w
81 |
--------------------------------------------------------------------------------
/embodiedpose/models/implicit_sdfs.py:
--------------------------------------------------------------------------------
1 | from unittest import skip
2 | import torch
3 | import torch.nn.functional as F
4 |
5 | from torch import autograd
6 |
7 | # Sphere SDF class
8 | class SphereSDF_F(torch.nn.Module):
9 | def __init__(self, center=[0, 0, 0], radius=1.0):
10 | super().__init__()
11 |
12 | self.center = torch.nn.Parameter(
13 | torch.tensor(center).float().unsqueeze(0), requires_grad=False)
14 | self.radius = torch.nn.Parameter(torch.tensor(radius).float(),
15 | requires_grad=False)
16 |
17 | def forward(self, points):
18 | points = points.view(-1, 3)
19 |
20 | return torch.linalg.norm(points - self.center, dim=-1,
21 | keepdim=True) - self.radius
22 |
23 |
24 | # Box SDF class
25 | class BoxSDF_F(torch.nn.Module):
26 | def __init__(self,
27 | orientation=[[1, 0, 0], [0, 1, 0], [0, 0, 1]],
28 | trans=[0, 0, 0],
29 | side_lengths=[1.75, 1.75, 1.75],
30 | ):
31 | super().__init__()
32 |
33 | self.center = torch.nn.Parameter(
34 | torch.tensor(trans).double().unsqueeze(0), requires_grad=True)
35 | self.rotmat = torch.nn.Parameter(torch.tensor(orientation).double(), requires_grad=True)
36 | self.side_lengths = torch.nn.Parameter(
37 | torch.tensor(side_lengths).double().unsqueeze(0),
38 | requires_grad=True)
39 |
40 | def forward(self, points):
41 | points = points.view(-1, 3)
42 |
43 | point_local = torch.matmul((points - self.center), self.rotmat)
44 |
45 | diff = torch.abs(point_local) - self.side_lengths / 2.0
46 | signed_distance = torch.linalg.norm(
47 | torch.maximum(
48 | diff, torch.zeros_like(diff)), dim=-1) + torch.minimum(
49 | torch.max(diff, dim=-1)[0], torch.zeros_like(diff[..., 0]))
50 | return signed_distance.unsqueeze(-1)
51 |
52 | # Torus SDF class
53 | class CylinderSDF_F(torch.nn.Module):
54 | def __init__(self, orientation=[[1, 0, 0], [0, 1, 0], [0, 0, 1]], trans=[0, 0, 0], size = [0.03, 0.35]): # radius, height
55 | super().__init__()
56 |
57 | self.center = torch.nn.Parameter(
58 | torch.tensor(trans).double().unsqueeze(0), requires_grad=True)
59 | self.rotmat = torch.nn.Parameter(torch.tensor(orientation).double(), requires_grad=True)
60 | self.size = torch.nn.Parameter(
61 | torch.tensor(size).double().unsqueeze(0),
62 | requires_grad=True)
63 |
64 | def forward(self, points):
65 | # vec2 d = abs(vec2(length(p.xz),p.y)) - vec2(h,r);
66 | # return min(max(d.x,d.y),0.0) + length(max(d,0.0));
67 |
68 | points = points.view(-1, 3)
69 | point_local = torch.matmul((points - self.center), self.rotmat)
70 | diff = torch.abs(torch.cat([torch.norm(point_local[:, [0, 2]], dim = 1)[:, None], point_local[:, 1:2]], dim = 1)) - self.size
71 | signed_distance = torch.min(torch.max(diff[:, 0], diff[:, 1]), torch.zeros_like(diff[:, 0])) + torch.norm(torch.max(diff, torch.zeros_like(diff)), dim = -1)
72 |
73 | return signed_distance.unsqueeze(-1)
74 |
75 |
76 | # Torus SDF class
77 | class TorusSDF_F(torch.nn.Module):
78 | def __init__(self, center=[0, 0, 0], radii=[1.0, 0.25]):
79 | super().__init__()
80 |
81 | self.center = torch.nn.Parameter(
82 | torch.tensor(center).float().unsqueeze(0), requires_grad=False)
83 | self.radii = torch.nn.Parameter(
84 | torch.tensor(radii).float().unsqueeze(0), requires_grad=False)
85 |
86 | def forward(self, points):
87 | points = points.view(-1, 3)
88 | diff = points - self.center
89 | q = torch.stack([
90 | torch.linalg.norm(diff[..., :2], dim=-1) - self.radii[..., 0],
91 | diff[..., -1],
92 | ],
93 | dim=-1)
94 | return (torch.linalg.norm(q, dim=-1) -
95 | self.radii[..., 1]).unsqueeze(-1)
96 |
--------------------------------------------------------------------------------
/embodiedpose/models/implicit_sdfs_np.py:
--------------------------------------------------------------------------------
1 | from matplotlib.pyplot import axis
2 | import autograd.numpy as np
3 | from autograd import grad
4 | from autograd import elementwise_grad as egrad
5 |
6 | # # Sphere SDF class
7 | class SphereSDF_N():
8 | def __init__(self, center=[0, 0, 0], radius=1.0):
9 | super().__init__()
10 |
11 | self.center = center.unsqueeze(0)
12 | self.radius = radius
13 | self.egrad_fun = egrad(self.compute_grad)
14 |
15 |
16 | def forward(self, points):
17 | points = points.reshape(-1, 3)
18 |
19 | return np.linalg.norm(points - self.center, dim=-1,
20 | keepdim=True) - self.radius
21 |
22 | def compute_grad(self, points):
23 | dist = self.forward(points)
24 | return (dist - 0).sum()
25 |
26 |
27 |
28 | # Box SDF class
29 | class BoxSDF_N():
30 | def __init__(self,
31 | orientation=[[1, 0, 0], [0, 1, 0], [0, 0, 1]],
32 | trans=[0, 0, 0],
33 | side_lengths=[1.75, 1.75, 1.75],
34 | ):
35 | super().__init__()
36 |
37 | self.center = trans[None, ]
38 | self.rotmat = orientation
39 | self.side_lengths = side_lengths[None, ]
40 | self.egrad_fun = egrad(self.compute_grad)
41 |
42 | def forward(self, points):
43 | points = points.reshape(-1, 3)
44 |
45 | point_local = np.matmul((points - self.center), self.rotmat)
46 | diff = np.abs(point_local) - self.side_lengths / 2.0
47 |
48 | signed_distance = np.linalg.norm(np.maximum(diff, np.zeros_like(diff)), axis=-1) + np.minimum(np.max(diff, axis=-1), np.zeros_like(diff[..., 0]))
49 | return signed_distance[:, None]
50 |
51 | def compute_grad(self, points):
52 | dist = self.forward(points)
53 | return (dist - 0).sum()
54 |
55 |
56 | # Torus SDF class
57 | class CylinderSDF_N():
58 | def __init__(self, orientation=[[1, 0, 0], [0, 1, 0], [0, 0, 1]], trans=[0, 0, 0], size = [0.03, 0.35]): # radius, height
59 | super().__init__()
60 |
61 | self.center = trans[None, ]
62 | self.rotmat = orientation
63 | self.size = size
64 | self.egrad_fun = egrad(self.compute_grad)
65 |
66 | def forward(self, points):
67 | # vec2 d = abs(vec2(length(p.xz),p.y)) - vec2(h,r);
68 | # return min(max(d.x,d.y),0.0) + length(max(d,0.0));
69 |
70 | points = points.reshape(-1, 3)
71 | point_local = np.matmul((points - self.center), self.rotmat)
72 | diff = np.abs(np.concatenate([np.linalg.norm(point_local[:, [0, 2]], axis = 1)[:, None], point_local[:, 1:2]], axis = 1)) - self.size
73 | signed_distance = np.minimum(np.maximum(diff[:, 0], diff[:, 1]), np.zeros_like(diff[:, 0])) + np.linalg.norm(
74 | np.maximum(diff, np.zeros_like(diff)), axis=-1)
75 |
76 | return signed_distance[:, None]
77 |
78 | def compute_grad(self, points):
79 | dist = self.forward(points)
80 | return (dist - 0).sum()
81 |
82 | # Torus SDF class
83 | class TorusSDF_N():
84 | def __init__(self, center=[0, 0, 0], radii=[1.0, 0.25]):
85 | super().__init__()
86 |
87 | self.center = np.nn.Parameter(
88 | np.tensor(center).float().unsqueeze(0), requires_grad=False)
89 | self.radii = np.nn.Parameter(
90 | np.tensor(radii).float().unsqueeze(0), requires_grad=False)
91 |
92 | def forward(self, points):
93 | points = points.reshape(-1, 3)
94 | diff = points - self.center
95 | q = np.stack([
96 | np.linalg.norm(diff[..., :2], dim=-1) - self.radii[..., 0],
97 | diff[..., -1],
98 | ],
99 | dim=-1)
100 | return (np.linalg.norm(q, dim=-1) -
101 | self.radii[..., 1]).unsqueeze(-1)
102 |
--------------------------------------------------------------------------------
/embodiedpose/models/models.py:
--------------------------------------------------------------------------------
1 | def get_model(cfg, device, mjdict, data, dataset):
2 | if cfg.model_name == 'ar':
3 | model = KinMLP(cfg, device, mjdict, data)
4 | elif cfg.model_name == 'reg':
5 | model = KinReg(cfg, device, mjdict, data)
6 | elif cfg.model_name == 'sim':
7 | model = KinSim(cfg, device, mjdict, data)
8 | elif cfg.model_name == 'refine':
9 | model = KinRefine(cfg, device, mjdict, data, dataset)
10 | return model
--------------------------------------------------------------------------------
/embodiedpose/models/policy.py:
--------------------------------------------------------------------------------
1 | import torch.nn as nn
2 |
3 |
4 | class Policy(nn.Module):
5 | def __init__(self):
6 | super().__init__()
7 |
8 | def forward(self, x):
9 | """This function should return a distribution to sample action from"""
10 | raise NotImplementedError
11 |
12 | def select_action(self, x, mean_action=False):
13 | dist = self.forward(x)
14 | action = dist.mean_sample() if mean_action else dist.sample()
15 | return action
16 |
17 | def get_kl(self, x):
18 | dist = self.forward(x)
19 | return dist.kl()
20 |
21 | def get_log_prob(self, x, action):
22 | dist = self.forward(x)
23 | return dist.log_prob(action)
24 |
--------------------------------------------------------------------------------
/embodiedpose/models/smpl_multi.py:
--------------------------------------------------------------------------------
1 | import torch
2 | import numpy as np
3 | import smplx
4 | from smplx import SMPL as _SMPL
5 | from smplx.utils import SMPLOutput
6 | from smplx.lbs import vertices2joints
7 |
8 | joint_names = [
9 | # 24 Ground Truth joints (superset of joints from different datasets)
10 | 'Right Ankle',
11 | 'Right Knee',
12 | 'Right Hip',
13 | 'Left Hip',
14 | 'Left Knee',
15 | 'Left Ankle',
16 | 'Right Wrist',
17 | 'Right Elbow',
18 | 'Right Shoulder',
19 | 'Left Shoulder',
20 | 'Left Elbow',
21 | 'Left Wrist',
22 | 'Neck (LSP)',
23 | 'Top of Head (LSP)',
24 | 'Pelvis (MPII)',
25 | 'Thorax (MPII)',
26 | 'Spine (H36M)',
27 | 'Jaw (H36M)',
28 | 'Head (H36M)',
29 | 'Nose',
30 | 'Left Eye',
31 | 'Right Eye',
32 | 'Left Ear',
33 | 'Right Ear'
34 | ]
35 | joint_map = {
36 | 'Right Ankle': 8,
37 | 'Right Knee': 5,
38 | 'Right Hip': 45,
39 | 'Left Hip': 46,
40 | 'Left Knee': 4,
41 | 'Left Ankle': 7,
42 | 'Right Wrist': 21,
43 | 'Right Elbow': 19,
44 | 'Right Shoulder': 17,
45 | 'Left Shoulder': 16,
46 | 'Left Elbow': 18,
47 | 'Left Wrist': 20,
48 | 'Neck (LSP)': 47,
49 | 'Top of Head (LSP)': 48,
50 | 'Pelvis (MPII)': 49,
51 | 'Thorax (MPII)': 50,
52 | 'Spine (H36M)': 51,
53 | 'Jaw (H36M)': 52,
54 | 'Head (H36M)': 53,
55 | 'Nose': 24,
56 | 'Left Eye': 26,
57 | 'Right Eye': 25,
58 | 'Left Ear': 28,
59 | 'Right Ear': 27
60 | }
61 |
62 |
63 | class SMPL(_SMPL):
64 | """ Extension of the official SMPL implementation to support more joints """
65 | def __init__(self,
66 | *args,
67 | joint_regressor_extra='data/J_regressor_extra.npy',
68 | dtype=torch.float32,
69 | **kwargs):
70 | super(SMPL, self).__init__(*args,
71 | create_global_orient=True,
72 | create_body_pose=True,
73 | create_betas=True,
74 | create_transl=True,
75 | dtype=dtype,
76 | **kwargs)
77 | joints = [joint_map[i] for i in joint_names]
78 | J_regressor_extra = np.load(joint_regressor_extra)
79 | self.register_buffer('J_regressor_extra',
80 | torch.tensor(J_regressor_extra, dtype=dtype))
81 | self.joint_map = torch.tensor(joints, dtype=torch.long)
82 |
83 | def forward(self, *args, **kwargs):
84 | kwargs['get_skin'] = True
85 | smpl_output = super(SMPL, self).forward(*args, **kwargs)
86 | extra_joints = vertices2joints(self.J_regressor_extra,
87 | smpl_output.vertices)
88 | joints = torch.cat([smpl_output.joints, extra_joints], dim=1)
89 | joints = joints[:, self.joint_map, :]
90 | output = SMPLOutput(vertices=smpl_output.vertices,
91 | global_orient=smpl_output.global_orient,
92 | body_pose=smpl_output.body_pose,
93 | joints=joints,
94 | betas=smpl_output.betas,
95 | full_pose=smpl_output.full_pose)
96 |
97 | return output
98 |
99 | # def forward(self, *args, **kwargs):
100 | # smpl_output = super(SMPL_Parser, self).forward(*args, **kwargs)
101 | # return smpl_output
102 |
103 | def get_joints_verts(self, pose, th_betas=None, th_trans=None):
104 | """
105 | Pose should be batch_size x 72
106 | """
107 | if pose.shape[1] != 72:
108 | pose = pose.reshape(-1, 72)
109 |
110 | pose = pose.float()
111 | if th_betas is not None:
112 | th_betas = th_betas.float()
113 |
114 | if th_betas.shape[-1] == 16:
115 | th_betas = th_betas[:, :10]
116 |
117 | batch_size = pose.shape[0]
118 | smpl_output = self.forward(
119 | betas=th_betas,
120 | transl=th_trans,
121 | body_pose=pose[:, 3:],
122 | global_orient=pose[:, :3],
123 | )
124 | vertices = smpl_output.vertices
125 | joints = smpl_output.joints[:, :24]
126 | # joints = smpl_output.joints[:,JOINST_TO_USE]
127 | return vertices, joints
--------------------------------------------------------------------------------
/embodiedpose/models/smpl_spin.py:
--------------------------------------------------------------------------------
1 | # This script is borrowed and extended from https://github.com/nkolot/SPIN/blob/master/models/hmr.py
2 | # Adhere to their licence to use this script
3 |
4 | import torch
5 | import numpy as np
6 | import os.path as osp
7 | from smplx import SMPL as _SMPL
8 | from smplx.body_models import ModelOutput
9 | from smplx.lbs import vertices2joints
10 |
11 | # Map joints to SMPL joints
12 | JOINT_MAP = {
13 | 'OP Nose': 24,
14 | 'OP Neck': 12,
15 | 'OP RShoulder': 17,
16 | 'OP RElbow': 19,
17 | 'OP RWrist': 21,
18 | 'OP LShoulder': 16,
19 | 'OP LElbow': 18,
20 | 'OP LWrist': 20,
21 | 'OP MidHip': 0,
22 | 'OP RHip': 2,
23 | 'OP RKnee': 5,
24 | 'OP RAnkle': 8,
25 | 'OP LHip': 1,
26 | 'OP LKnee': 4,
27 | 'OP LAnkle': 7,
28 | 'OP REye': 25,
29 | 'OP LEye': 26,
30 | 'OP REar': 27,
31 | 'OP LEar': 28,
32 | 'OP LBigToe': 29,
33 | 'OP LSmallToe': 30,
34 | 'OP LHeel': 31,
35 | 'OP RBigToe': 32,
36 | 'OP RSmallToe': 33,
37 | 'OP RHeel': 34,
38 | 'Right Ankle': 8,
39 | 'Right Knee': 5,
40 | 'Right Hip': 45,
41 | 'Left Hip': 46,
42 | 'Left Knee': 4,
43 | 'Left Ankle': 7,
44 | 'Right Wrist': 21,
45 | 'Right Elbow': 19,
46 | 'Right Shoulder': 17,
47 | 'Left Shoulder': 16,
48 | 'Left Elbow': 18,
49 | 'Left Wrist': 20,
50 | 'Neck (LSP)': 47,
51 | 'Top of Head (LSP)': 48,
52 | 'Pelvis (MPII)': 49,
53 | 'Thorax (MPII)': 50,
54 | 'Spine (H36M)': 51,
55 | 'Jaw (H36M)': 52,
56 | 'Head (H36M)': 53,
57 | 'Nose': 24,
58 | 'Left Eye': 26,
59 | 'Right Eye': 25,
60 | 'Left Ear': 28,
61 | 'Right Ear': 27
62 | }
63 | JOINT_NAMES = [
64 | 'OP Nose', 'OP Neck', 'OP RShoulder', 'OP RElbow', 'OP RWrist',
65 | 'OP LShoulder', 'OP LElbow', 'OP LWrist', 'OP MidHip', 'OP RHip',
66 | 'OP RKnee', 'OP RAnkle', 'OP LHip', 'OP LKnee', 'OP LAnkle', 'OP REye',
67 | 'OP LEye', 'OP REar', 'OP LEar', 'OP LBigToe', 'OP LSmallToe', 'OP LHeel',
68 | 'OP RBigToe', 'OP RSmallToe', 'OP RHeel', 'Right Ankle', 'Right Knee',
69 | 'Right Hip', 'Left Hip', 'Left Knee', 'Left Ankle', 'Right Wrist',
70 | 'Right Elbow', 'Right Shoulder', 'Left Shoulder', 'Left Elbow',
71 | 'Left Wrist', 'Neck (LSP)', 'Top of Head (LSP)', 'Pelvis (MPII)',
72 | 'Thorax (MPII)', 'Spine (H36M)', 'Jaw (H36M)', 'Head (H36M)', 'Nose',
73 | 'Left Eye', 'Right Eye', 'Left Ear', 'Right Ear'
74 | ]
75 |
76 | VIBE_DATA_DIR = "/hdd/zen/dev/ActMix/actmix/DataGen/MotionCapture/VIBE/data/vibe_data"
77 |
78 | JOINT_IDS = {JOINT_NAMES[i]: i for i in range(len(JOINT_NAMES))}
79 | JOINT_REGRESSOR_TRAIN_EXTRA = osp.join(VIBE_DATA_DIR, 'J_regressor_extra.npy')
80 | SMPL_MEAN_PARAMS = osp.join(VIBE_DATA_DIR, 'smpl_mean_params.npz')
81 | SMPL_MODEL_DIR = VIBE_DATA_DIR
82 | H36M_TO_J17 = [6, 5, 4, 1, 2, 3, 16, 15, 14, 11, 12, 13, 8, 10, 0, 7, 9]
83 | H36M_TO_J14 = H36M_TO_J17[:14]
84 |
85 |
86 | class SMPL(_SMPL):
87 | """ Extension of the official SMPL implementation to support more joints """
88 | def __init__(self, *args, **kwargs):
89 | super(SMPL, self).__init__(*args, **kwargs)
90 | joints = [JOINT_MAP[i] for i in JOINT_NAMES]
91 | J_regressor_extra = np.load(JOINT_REGRESSOR_TRAIN_EXTRA)
92 | self.register_buffer(
93 | 'J_regressor_extra',
94 | torch.tensor(J_regressor_extra, dtype=torch.float32))
95 | self.joint_map = torch.tensor(joints, dtype=torch.long)
96 |
97 | def forward(self, *args, **kwargs):
98 | kwargs['get_skin'] = True
99 | smpl_output = super(SMPL, self).forward(*args, **kwargs)
100 | extra_joints = vertices2joints(self.J_regressor_extra,
101 | smpl_output.vertices)
102 | joints = torch.cat([smpl_output.joints, extra_joints], dim=1)
103 | joints = joints[:, self.joint_map, :]
104 | output = ModelOutput(vertices=smpl_output.vertices,
105 | global_orient=smpl_output.global_orient,
106 | body_pose=smpl_output.body_pose,
107 | joints=joints,
108 | betas=smpl_output.betas,
109 | full_pose=smpl_output.full_pose)
110 | return output
111 |
112 |
113 | def get_smpl_faces():
114 | smpl = SMPL(SMPL_MODEL_DIR, batch_size=1, create_transl=False)
115 | return smpl.faces
--------------------------------------------------------------------------------
/embodiedpose/models/tcn.py:
--------------------------------------------------------------------------------
1 | import torch.nn as nn
2 | from torch.nn.utils import weight_norm
3 | from uhc.utils.torch_ext import *
4 |
5 |
6 | class Chomp1d(nn.Module):
7 |
8 | def __init__(self, chomp_size):
9 | super().__init__()
10 | self.chomp_size = chomp_size
11 |
12 | def forward(self, x):
13 | return x[:, :, :-self.chomp_size].contiguous()
14 |
15 |
16 | class TemporalBlock(nn.Module):
17 |
18 | def __init__(self, n_inputs, n_outputs, kernel_size, stride, dilation, dropout, causal):
19 | super().__init__()
20 | padding = (kernel_size - 1) * dilation // (1 if causal else 2)
21 | modules = []
22 | self.conv1 = weight_norm(nn.Conv1d(n_inputs, n_outputs, kernel_size, stride=stride, padding=padding, dilation=dilation))
23 | modules.append(self.conv1)
24 | if causal:
25 | modules.append(Chomp1d(padding))
26 | modules.append(nn.ReLU())
27 | if dropout > 0:
28 | modules.append(nn.Dropout(dropout))
29 |
30 | self.conv2 = weight_norm(nn.Conv1d(n_outputs, n_outputs, kernel_size, stride=stride, padding=padding, dilation=dilation))
31 | modules.append(self.conv2)
32 | if causal:
33 | modules.append(Chomp1d(padding))
34 | modules.append(nn.ReLU())
35 | if dropout > 0:
36 | modules.append(nn.Dropout(dropout))
37 |
38 | self.net = nn.Sequential(*modules)
39 |
40 | self.downsample = nn.Conv1d(n_inputs, n_outputs, 1) if n_inputs != n_outputs else None
41 | self.relu = nn.ReLU()
42 | self.init_weights()
43 |
44 | def init_weights(self):
45 | self.conv1.weight.data.normal_(0, 0.01)
46 | self.conv2.weight.data.normal_(0, 0.01)
47 | if self.downsample is not None:
48 | self.downsample.weight.data.normal_(0, 0.01)
49 |
50 | def forward(self, x):
51 | out = self.net(x)
52 | res = x if self.downsample is None else self.downsample(x)
53 | return self.relu(out + res)
54 |
55 |
56 | class TemporalConvNet(nn.Module):
57 |
58 | def __init__(self, num_inputs, num_channels, kernel_size=3, dropout=0.2, causal=False):
59 | super().__init__()
60 | assert kernel_size % 2 == 1
61 | layers = []
62 | num_levels = len(num_channels)
63 | for i in range(num_levels):
64 | dilation_size = 2**i
65 | in_channels = num_inputs if i == 0 else num_channels[i - 1]
66 | out_channels = num_channels[i]
67 | layers += [TemporalBlock(in_channels, out_channels, kernel_size, stride=1, dilation=dilation_size, dropout=dropout, causal=causal)]
68 |
69 | self.network = nn.Sequential(*layers)
70 |
71 | def forward(self, x):
72 | return self.network(x)
73 |
74 |
75 | if __name__ == '__main__':
76 | tcn = TemporalConvNet(4, [1, 2, 8], kernel_size=3, causal=False)
77 | input = zeros(3, 4, 80)
78 | out = tcn(input)
79 | print(tcn)
80 | print(out.shape)
81 |
--------------------------------------------------------------------------------
/embodiedpose/utils/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/embodiedpose/utils/__init__.py
--------------------------------------------------------------------------------
/embodiedpose/utils/image_utils.py:
--------------------------------------------------------------------------------
1 | import glob
2 | import os
3 | import sys
4 | import pdb
5 | import os.path as osp
6 |
7 | sys.path.append(os.getcwd())
8 |
9 | import numpy as np
10 | import cv2
11 |
12 |
13 | def assemble_videos(videos,
14 | grid_size,
15 | description,
16 | out_file_name,
17 | text_color=(255, 255, 255)):
18 | x_grid_num = grid_size[1]
19 | y_grid_num = grid_size[0]
20 | y_shape, x_shape, _ = videos[0][0].shape
21 | canvas = np.zeros(
22 | (y_shape * y_grid_num, x_shape * x_grid_num, 3)).astype(np.uint8)
23 |
24 | out = cv2.VideoWriter(out_file_name, cv2.VideoWriter_fourcc(*'FMP4'), 30,
25 | (canvas.shape[1], canvas.shape[0]))
26 | for i in range(len(videos[0])):
27 | for x in range(x_grid_num):
28 | for y in range(y_grid_num):
29 | curr_image = videos[x * y + x][i]
30 | curr_discription = description[x * y + x]
31 | canvas[y_shape * y:y_shape * (y + 1),
32 | x_shape * x:x_shape * (x + 1), :] = curr_image
33 | cv2.putText(canvas, curr_discription,
34 | (x_shape * x, y_shape * y + 20), 2, 0.5,
35 | text_color)
36 | out.write(canvas)
37 | out.release()
38 |
39 |
40 | def crop_center(img, cropx, cropy):
41 | y, x, _ = img.shape
42 | startx = x // 2 - (cropx // 2)
43 | starty = y // 2 - (cropy // 2)
44 | return img[starty:starty + cropy, startx:startx + cropx, :]
45 |
46 |
47 | def crop_side(img, cropx, cropy):
48 | y, x, _ = img.shape
49 | startx = x // 8 - (cropx // 2)
50 | starty = y // 2 - (cropy // 2)
51 | return img[starty:starty + cropy, startx:startx + cropx, :]
52 |
53 |
54 | def read_video_frames(vid_dir):
55 | cap = cv2.VideoCapture(vid_dir)
56 | frames = []
57 | while (cap.isOpened()):
58 | # Capture frame-by-frame
59 | ret, frame = cap.read()
60 | if ret == True:
61 | frames.append(frame)
62 | pass
63 | else:
64 | break
65 | cap.release()
66 | return frames
67 |
68 |
69 | def write_individaul_frames(frames, output_dir):
70 | for i in range(len(frames)):
71 | cv2.imwrite(os.path.join(output_dir, "frame%06d.jpg" % i), frames[i])
72 |
73 |
74 | def write_frames_to_video(frames,
75 | out_file_name="output.mp4",
76 | frame_rate=30,
77 | add_text=None,
78 | text_color=(255, 255, 255)):
79 | y_shape, x_shape, _ = frames[0].shape
80 | out = cv2.VideoWriter(out_file_name, cv2.VideoWriter_fourcc(*'FMP4'),
81 | frame_rate, (x_shape, y_shape))
82 | transform_dtype = False
83 | transform_256 = False
84 |
85 | if frames[0].dtype != np.uint8:
86 | transform_dtype = True
87 | if np.max(frames[0]) < 1:
88 | transform_256 = True
89 |
90 | for i in range(len(frames)):
91 | curr_frame = frames[i]
92 |
93 | if transform_256:
94 | curr_frame = curr_frame * 256
95 | if transform_dtype:
96 | curr_frame = curr_frame.astype(np.uint8)
97 | if not add_text is None:
98 | cv2.putText(curr_frame, add_text, (0, 20), 3, 1, text_color)
99 |
100 | out.write(curr_frame)
101 | out.release()
102 |
103 |
104 | def read_img_dir(img_dir):
105 | images = []
106 | for img_path in sorted(glob.glob(osp.join(img_dir, "*"))):
107 | images.append(cv2.imread(img_path))
108 | return images
109 |
110 |
111 | def read_img_list(img_list):
112 | images = []
113 | for img_path in img_list:
114 | images.append(cv2.imread(img_path))
115 | return images
116 |
117 |
118 | def resize_frames(frames, size_x=224, size_y=224):
119 | new_frames = []
120 | for i in range(len(frames)):
121 | curr_frame = frames[i]
122 | curr_frame = cv2.resize(curr_frame, (size_x, size_y))
123 | new_frames.append(curr_frame)
124 | return new_frames
125 |
--------------------------------------------------------------------------------
/embodiedpose/utils/logger.py:
--------------------------------------------------------------------------------
1 | import logging
2 | import os
3 |
4 |
5 | def create_logger(filename, file_handle=False):
6 | # create logger
7 | logger = logging.getLogger(filename)
8 | if (logger.hasHandlers()):
9 | logger.handlers.clear()
10 | logger.propagate = False
11 | logger.setLevel(logging.DEBUG)
12 | # create console handler with a higher log level
13 | ch = logging.StreamHandler()
14 | ch.setLevel(logging.INFO)
15 | stream_formatter = logging.Formatter('%(message)s')
16 | ch.setFormatter(stream_formatter)
17 | logger.addHandler(ch)
18 |
19 | if file_handle and not len(logger.handlers):
20 | # create file handler which logs even debug messages
21 | os.makedirs(os.path.dirname(filename), exist_ok=True)
22 | fh = logging.FileHandler(filename, mode='a')
23 | fh.setLevel(logging.DEBUG)
24 | file_formatter = logging.Formatter('[%(asctime)s] %(message)s')
25 | fh.setFormatter(file_formatter)
26 | logger.addHandler(fh)
27 |
28 | return logger
29 |
--------------------------------------------------------------------------------
/embodiedpose/utils/memory.py:
--------------------------------------------------------------------------------
1 | import random
2 |
3 |
4 | class Memory(object):
5 | def __init__(self):
6 | self.memory = []
7 |
8 | def push(self, *args):
9 | """Saves a tuple."""
10 | self.memory.append([*args])
11 |
12 | def sample(self, batch_size=None):
13 | if batch_size is None:
14 | return self.memory
15 | else:
16 | random_batch = random.sample(self.memory, batch_size)
17 | return random_batch
18 |
19 | def append(self, new_memory):
20 | self.memory += new_memory.memory
21 |
22 | def __len__(self):
23 | return len(self.memory)
24 |
25 |
--------------------------------------------------------------------------------
/embodiedpose/utils/metrics.py:
--------------------------------------------------------------------------------
1 | from embodiedpose.utils import *
2 | from embodiedpose.utils.transformation import euler_from_quaternion, quaternion_matrix
3 |
4 |
5 | def get_joint_angles(poses):
6 | return poses[:, 7:]
7 |
8 |
9 | def get_root_angles(poses):
10 | root_angs = []
11 | for pose in poses:
12 | root_euler = np.array(euler_from_quaternion(pose[3:7]))
13 | root_angs.append(root_euler)
14 |
15 | return np.array(root_angs)
16 |
17 |
18 | def get_root_matrix(poses):
19 | matrices = []
20 | for pose in poses:
21 | mat = np.identity(4)
22 | root_pos = pose[:3]
23 | root_quat = pose[3:7]
24 | mat = quaternion_matrix(root_quat)
25 | mat[:3, 3] = root_pos
26 | matrices.append(mat)
27 | return matrices
28 |
29 |
30 | '''
31 | def get_joint_angles(poses):
32 | root_angs = []
33 | for pose in poses:
34 | root_euler = np.array(euler_from_quaternion(pose[3:7]))
35 | root_angs.append(root_euler)
36 | root_angs = np.vstack(root_angs)
37 | angles = np.hstack((root_angs, poses[:, 7:]))
38 | return angles
39 | '''
40 |
41 |
42 | def get_joint_vels(poses, dt):
43 | vels = []
44 | for i in range(poses.shape[0] - 1):
45 | v = get_qvel_fd(poses[i], poses[i + 1], dt, 'heading')
46 | vels.append(v)
47 | vels = np.vstack(vels)
48 | return vels
49 |
50 |
51 | def get_joint_accels(vels, dt):
52 | accels = np.diff(vels, axis=0) / dt
53 | accels = np.vstack(accels)
54 | return accels
55 |
56 |
57 | def get_root_pos(poses):
58 | return poses[:, :3]
59 |
60 |
61 | def get_mean_dist(x, y):
62 | return np.linalg.norm(x - y, axis=1).mean()
63 |
64 |
65 | def get_mean_abs(x):
66 | return np.abs(x).mean()
67 |
68 |
69 | def get_frobenious_norm(x, y):
70 | error = 0.0
71 | for i in range(len(x)):
72 | x_mat = x[i]
73 | y_mat_inv = np.linalg.inv(y[i])
74 | error_mat = np.matmul(x_mat, y_mat_inv)
75 | ident_mat = np.identity(4)
76 | error += np.linalg.norm(ident_mat - error_mat, 'fro')
77 | return error / len(x)
78 |
--------------------------------------------------------------------------------
/embodiedpose/utils/pytorch3d_transforms.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ZhengyiLuo/EmbodiedPose/8f110892af89e3777294450a915580e4b4eac4a5/embodiedpose/utils/pytorch3d_transforms.py
--------------------------------------------------------------------------------
/embodiedpose/utils/scene_utils.py:
--------------------------------------------------------------------------------
1 | import glob
2 | import os
3 | import sys
4 | import pdb
5 | import os.path as osp
6 | sys.path.append(os.getcwd())
7 |
8 | import torch
9 | import numpy as np
10 | from embodiedpose.models.implicit_sdfs import SphereSDF_F, BoxSDF_F, TorusSDF_F
11 |
12 | def get_sdf(scene_sdfs, points, topk = 1):
13 | points = points.view(-1, 3)
14 | if len(scene_sdfs) > 0:
15 | dists = []
16 | for sdf in scene_sdfs:
17 | dist = sdf(points)
18 | dists.append(dist)
19 |
20 | dists = torch.cat(dists, dim=1)
21 |
22 | if len(scene_sdfs) < topk:
23 | vals, locs = torch.topk(dists, k=len(scene_sdfs), largest=False)
24 | vals = torch.cat([
25 | vals,
26 | torch.ones([vals.shape[0], topk - len(scene_sdfs)]) *
27 | 100
28 | ], dim = 1)
29 | else:
30 | vals, locs = torch.topk(dists, k = topk, largest= False)
31 |
32 | else:
33 | vals = torch.ones([points.shape[0], topk]) * 100
34 |
35 | return vals
36 |
37 | def load_simple_scene(scene_name):
38 | cwd = os.getcwd()
39 | filename = f'{cwd}/data/scenes/{scene_name}_planes.txt'
40 | scene_sdfs = []
41 | obj_pos = []
42 |
43 | if os.path.exists(filename):
44 | planes = np.loadtxt(filename)
45 | planes = planes.reshape(-1, 4, 3)
46 | for plane in planes:
47 | pos, size, xyaxes = get_scene_attrs_from_plane(plane)
48 | xy = np.array([float(i) for i in xyaxes.split(' ')]).reshape(2, 3).T
49 | xyz = np.hstack([xy, np.cross(xy[:, 0], xy[:, 1])[:, None]])
50 | sides = [float(i) * 2 for i in size.split(" ")]
51 | pos = [float(i) for i in pos.split(" ")]
52 | obj_pos.append(pos)
53 |
54 | scene_sdfs.append(
55 | BoxSDF_F(trans=pos,
56 | orientation=xyz,
57 | side_lengths=sides))
58 |
59 |
60 | filename = f'{cwd}/data/scenes/{scene_name}_rectangles.txt'
61 | if os.path.exists(filename):
62 | rectangles = np.loadtxt(filename)
63 | rectangles = rectangles.reshape(-1, 8, 3)
64 | for rectangle in rectangles:
65 | pos, size, xyaxes = get_scene_attrs_from_rectangle(
66 | rectangle)
67 | xy = np.array([float(i) for i in xyaxes.split(' ')]).reshape(2, 3).T
68 | xyz = np.hstack([xy, np.cross(xy[:, 0], xy[:, 1])[:, None]])
69 | sides = [float(i) * 2 for i in size.split(" ")]
70 | pos = [float(i) for i in pos.split(" ")]
71 | obj_pos.append(pos)
72 | scene_sdfs.append(
73 | BoxSDF_F(trans=pos, orientation = xyz, side_lengths = sides))
74 |
75 | return scene_sdfs, obj_pos
76 |
77 | def get_scene_attrs_from_plane(plane):
78 | c, x, y, w, h = get_cxy(plane)
79 | pos = f'{c[0]:04f} {c[1]:04f} {c[2]:04f}'
80 | size = f'{w/2:04f} {h/2:04f} 0.01'
81 | xaxis = f'{x[0]:04f} {x[1]:04f} {x[2]:04f}'
82 | yaxis = f'{y[0]:04f} {y[1]:04f} {y[2]:04f}'
83 | xyaxes = xaxis + ' ' + yaxis
84 | return pos, size, xyaxes
85 |
86 | def get_scene_attrs_from_rectangle( rectangle):
87 | ind = np.argsort(rectangle[:, 2])
88 | rectangle = rectangle[ind]
89 | c, x, y, w, h = get_cxy(rectangle[:4])
90 | c[2] = (c[2] + rectangle[5, 2]) / 2
91 | pos = f'{c[0]:04f} {c[1]:04f} {c[2]:04f}'
92 | size = f'{w/2:04f} {h/2:04f} {c[2]:04f}'
93 | xaxis = f'{x[0]:04f} {x[1]:04f} {x[2]:04f}'
94 | yaxis = f'{y[0]:04f} {y[1]:04f} {y[2]:04f}'
95 | xyaxes = xaxis + ' ' + yaxis
96 | return pos, size, xyaxes
97 |
98 | def get_cxy( points, c=None):
99 | if c is None:
100 | c = np.mean(points, axis=0)
101 | vec1 = points[0, :] - c
102 | vec2 = points[1, :] - c
103 | vec3 = points[2, :] - c
104 | x = vec1 + vec2
105 | y = vec2 + vec3
106 | w = np.linalg.norm(x)
107 | h = np.linalg.norm(y)
108 | x = x / (w + 1e-6)
109 | y = y / (h + 1e-6)
110 | if w < 0.01:
111 | _, x, y, w, h = get_cxy(points[[0, 2, 1]], c)
112 | if h < 0.01:
113 | _, x, y, w, h = get_cxy(points[[1, 0, 2]], c)
114 | return c, x, y, w, h
115 |
--------------------------------------------------------------------------------
/embodiedpose/utils/statereg_config.py:
--------------------------------------------------------------------------------
1 | import yaml
2 | import glob
3 | import os
4 | import sys
5 | import pdb
6 | import os.path as osp
7 |
8 | sys.path.append(os.getcwd())
9 |
10 | from embodiedpose.utils import recreate_dirs
11 |
12 |
13 | class Config:
14 | def __init__(self, action, cfg_id, create_dirs=False, meta_id=None):
15 | self.id = cfg_id
16 | self.action = action
17 | cfg_name = f'config/statereg/{cfg_id}.yml'
18 | if not os.path.exists(cfg_name):
19 | print("Config file doesn't exist: %s" % cfg_name)
20 | exit(0)
21 | cfg = yaml.load(open(cfg_name, 'r'), Loader=yaml.FullLoader)
22 |
23 | # create dirs
24 | self.base_dir = 'results'
25 | self.data_dir = cfg.get('dataset_path', 'datasets')
26 |
27 | self.cfg_dir = osp.join(self.base_dir, action, "statereg", cfg_id)
28 | self.model_dir = osp.join(self.cfg_dir, "models")
29 | self.result_dir = osp.join(self.cfg_dir, "results")
30 | self.log_dir = osp.join(self.cfg_dir, "log")
31 | self.tb_dir = osp.join(self.cfg_dir, "tb")
32 | self.data_file = cfg.get("data_file", "traj_all")
33 | self.mujoco_model_file = osp.join(os.getcwd(), "assets",
34 | "mujoco_models",
35 | cfg.get('model_id', "1125"), action,
36 | "humanoid.xml")
37 | os.makedirs(self.model_dir, exist_ok=True)
38 | os.makedirs(self.result_dir, exist_ok=True)
39 | if create_dirs:
40 | recreate_dirs(self.log_dir, self.tb_dir)
41 |
42 | # training config
43 | if meta_id is None:
44 | self.meta_id = cfg['meta_id']
45 | else:
46 | self.meta_id = meta_id
47 |
48 | self.meta = yaml.load(open(
49 | osp.join(self.data_dir, "meta", f"{self.meta_id}.yml"), 'r'),
50 | Loader=yaml.FullLoader)
51 | self.object = self.meta['object'][action]
52 |
53 | self.take_actions = self.meta['action_type']
54 | self.all_takes = {x: self.meta[x] for x in ['train', 'test']}
55 | self.takes = {'train': [], 'test': []}
56 | for x in ['train', 'test']:
57 | _takes = self.all_takes[x]
58 |
59 | for take in _takes:
60 | if self.take_actions[take] == action:
61 | self.takes[x].append(take)
62 |
63 | self.seed = cfg['seed']
64 | self.fr_num = cfg['fr_num']
65 | self.v_net = cfg.get('v_net', 'lstm')
66 | self.v_net_param = cfg.get('v_net_param', None)
67 | self.v_hdim = cfg['v_hdim']
68 | self.mlp_dim = cfg['mlp_dim']
69 | self.cnn_fdim = cfg['cnn_fdim']
70 | self.optimizer = cfg.get('optimizer', 'Adam')
71 | self.lr = cfg['lr']
72 | self.num_epoch = cfg['num_epoch']
73 | self.iter_method = cfg['iter_method']
74 | self.shuffle = cfg.get('shuffle', False)
75 | self.num_sample = cfg.get('num_sample', 20000)
76 | self.save_model_interval = cfg['save_model_interval']
77 | self.fr_margin = cfg['fr_margin']
78 | self.pose_only = cfg.get('pose_only', False)
79 | self.causal = cfg.get('causal', False)
80 | self.cnn_type = cfg.get('cnn_type', 'resnet')
81 | self.is_dropout = cfg.get('dropout', False)
82 | self.weightdecay = cfg.get('weight_decay', 0.0)
83 | self.augment = cfg.get('augment', False)
84 |
85 | self.humanoid_model = cfg['humanoid_model']
86 | self.vis_model = cfg['vis_model']
87 | self.rotrep = cfg.get("rotrep", "euler")
88 | self.batch_size = cfg.get("batch_size", 512)
89 | self.add_noise = cfg.get("add_noise", False)
90 |
--------------------------------------------------------------------------------
/embodiedpose/utils/tb_logger.py:
--------------------------------------------------------------------------------
1 | """
2 | File: logger.py
3 | Modified by: Senthil Purushwalkam
4 | Code referenced from https://gist.github.com/gyglim/1f8dfb1b5c82627ae3efcfbbadb9f514
5 | Email: spurushwandrewcmuedu
6 | Github: https://github.com/senthilps8
7 | Description:
8 | """
9 |
10 | import tensorflow.compat.v1 as tf
11 |
12 | tf.disable_v2_behavior()
13 | from torch.autograd import Variable
14 | import numpy as np
15 | import scipy.misc
16 | import os
17 | import torch
18 | from os import path
19 |
20 | try:
21 | from StringIO import StringIO # Python 2.7
22 | except ImportError:
23 | from io import BytesIO # Python 3.x
24 |
25 |
26 | class Logger(object):
27 | def __init__(self, log_dir, name=None):
28 | """Create a summary writer logging to log_dir."""
29 | self.name = name
30 | if name is not None:
31 | try:
32 | os.makedirs(os.path.join(log_dir, name))
33 | except:
34 | pass
35 | self.writer = tf.summary.FileWriter(os.path.join(log_dir, name),
36 | filename_suffix=name)
37 | else:
38 | self.writer = tf.summary.FileWriter(log_dir)
39 |
40 | def scalar_summary(self, tag, value, step):
41 | """Log a scalar variable."""
42 | summary = tf.Summary(
43 | value=[tf.Summary.Value(tag=tag, simple_value=value)])
44 | self.writer.add_summary(summary, step)
45 |
46 | def image_summary(self, tag, images, step):
47 | """Log a list of images."""
48 |
49 | img_summaries = []
50 | for i, img in enumerate(images):
51 | # Write the image to a string
52 | try:
53 | s = StringIO()
54 | except:
55 | s = BytesIO()
56 | scipy.misc.toimage(img).save(s, format="png")
57 |
58 | # Create an Image object
59 | img_sum = tf.Summary.Image(encoded_image_string=s.getvalue(),
60 | height=img.shape[0],
61 | width=img.shape[1])
62 | # Create a Summary value
63 | img_summaries.append(
64 | tf.Summary.Value(tag='%s/%d' % (tag, i), image=img_sum))
65 |
66 | # Create and write Summary
67 | summary = tf.Summary(value=img_summaries)
68 | self.writer.add_summary(summary, step)
69 |
70 | def histo_summary(self, tag, values, step, bins=1000):
71 | """Log a histogram of the tensor of values."""
72 |
73 | # Create a histogram using numpy
74 | counts, bin_edges = np.histogram(values, bins=bins)
75 |
76 | # Fill the fields of the histogram proto
77 | hist = tf.HistogramProto()
78 | hist.min = float(np.min(values))
79 | hist.max = float(np.max(values))
80 | hist.num = int(np.prod(values.shape))
81 | hist.sum = float(np.sum(values))
82 | hist.sum_squares = float(np.sum(values**2))
83 |
84 | # Drop the start of the first bin
85 | bin_edges = bin_edges[1:]
86 |
87 | # Add bin edges and counts
88 | for edge in bin_edges:
89 | hist.bucket_limit.append(edge)
90 | for c in counts:
91 | hist.bucket.append(c)
92 |
93 | # Create and write Summary
94 | summary = tf.Summary(value=[tf.Summary.Value(tag=tag, histo=hist)])
95 | self.writer.add_summary(summary, step)
96 | self.writer.flush()
97 |
98 | def to_np(self, x):
99 | return x.data.cpu().numpy()
100 |
101 | def to_var(self, x):
102 | if torch.cuda.is_available():
103 | x = x.cuda()
104 | return Variable(x)
105 |
106 | def model_param_histo_summary(self, model, step):
107 | """log histogram summary of model's parameters
108 | and parameter gradients
109 | """
110 | for tag, value in model.named_parameters():
111 | if value.grad is None:
112 | continue
113 | tag = tag.replace('.', '/')
114 | tag = self.name + '/' + tag
115 | self.histo_summary(tag, self.to_np(value), step)
116 | self.histo_summary(tag + '/grad', self.to_np(value.grad), step)
117 |
--------------------------------------------------------------------------------
/embodiedpose/utils/video_pose_config.py:
--------------------------------------------------------------------------------
1 | from uhc.utils.config_utils.base_config import Base_Config
2 | from uhc.utils.config_utils.copycat_config import Config as CC_Config
3 |
4 |
5 | class Config(Base_Config):
6 |
7 | def __init__(self, **kwargs):
8 | # training config
9 | super().__init__(**kwargs)
10 |
11 | self.agent_name = self.cfg_dict.get("agent_name", "scene_v1")
12 | self.env_name = self.cfg_dict.get("env_name", "kin_v1")
13 |
14 | self.policy_optimizer = self.cfg_dict['policy_optimizer']
15 | self.scene_specs = self.cfg_dict.get("scene_specs", {})
16 | self.policy_specs = self.cfg_dict.get("policy_specs", {})
17 |
18 | ## Model Specs
19 | self.autoregressive = self.model_specs.get("autoregressive", True)
20 | self.remove_base = self.model_specs.get("remove_base", True)
21 |
22 | # Policy Specs
23 | self.policy_name = self.policy_specs.get("policy_name", "kin_net_humor")
24 | self.reward_weights = self.policy_specs.get("reward_weights", {})
25 | self.env_term_body = self.policy_specs.get("env_term_body", "body")
26 | self.env_episode_len = self.policy_specs.get("env_episode_len", "body")
27 |
28 | self.model_name = self.model_specs.get("model_name", "kin_net")
29 | ## Data Specs
30 | self.fr_num = self.data_specs.get("fr_num", 80)
31 | self.cc_cfg = self.cfg_dict.get("cc_cfg", "uhc_explicit")
32 | self.cc_cfg = CC_Config(cfg_id=self.cc_cfg, base_dir="UniversalHumanoidControl/")
33 |
--------------------------------------------------------------------------------
/embodiedpose/utils/zfilter.py:
--------------------------------------------------------------------------------
1 | import numpy as np
2 |
3 | # from https://github.com/joschu/modular_rl
4 | # http://www.johndcook.com/blog/standard_deviation/
5 |
6 |
7 | class RunningStat(object):
8 | def __init__(self, shape):
9 | self._n = 0
10 | self._M = np.zeros(shape)
11 | self._S = np.zeros(shape)
12 |
13 | def push(self, x):
14 | x = np.asarray(x)
15 | assert x.shape == self._M.shape
16 | self._n += 1
17 | if self._n == 1:
18 | self._M[...] = x
19 | else:
20 | oldM = self._M.copy()
21 | self._M[...] = oldM + (x - oldM) / self._n
22 | self._S[...] = self._S + (x - oldM) * (x - self._M)
23 |
24 | @property
25 | def n(self):
26 | return self._n
27 |
28 | @property
29 | def mean(self):
30 | return self._M
31 |
32 | @property
33 | def var(self):
34 | return self._S / (self._n - 1) if self._n > 1 else np.square(self._M)
35 |
36 | @property
37 | def std(self):
38 | return np.sqrt(self.var)
39 |
40 | @property
41 | def shape(self):
42 | return self._M.shape
43 |
44 |
45 | class ZFilter:
46 | """
47 | y = (x-mean)/std
48 | using running estimates of mean,std
49 | """
50 | def __init__(self, shape, demean=True, destd=True, clip=10.0):
51 | self.demean = demean
52 | self.destd = destd
53 | self.clip = clip
54 |
55 | self.rs = RunningStat(shape)
56 |
57 | def __call__(self, x, update=True):
58 | if update:
59 | self.rs.push(x)
60 | if self.demean:
61 | x = x - self.rs.mean
62 | if self.destd:
63 | x = x / (self.rs.std + 1e-8)
64 | if self.clip:
65 | x = np.clip(x, -self.clip, self.clip)
66 | return x
67 |
68 | def set_mean_std(self, mean, std, n):
69 | self.rs._n = n
70 | self.rs._M[...] = mean
71 | self.rs._S[...] = std
72 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | gdown
2 | numpy==1.23.1
3 | scipy
4 | ipdb
5 | vtk
6 | numpy-stl
7 | joblib
8 | opencv-python
9 | tqdm
10 | pyyaml
11 | mujoco-py<2.2,>=2.1
12 | wandb
13 | scikit-image
14 | gym
15 | git+https://github.com/ZhengyiLuo/smplx.git@master
16 | lxml
17 | human_body_prior
18 | autograd
19 | chumpy
20 | patchelf
21 | chardet
22 | pyopengl
23 | torchgeometry
24 | Scikit-learn
--------------------------------------------------------------------------------
/scripts/train_models.py:
--------------------------------------------------------------------------------
1 | '''
2 | File: /train_scene.py
3 | Created Date: Tuesday February 15th 2022
4 | Author: Zhengyi Luo
5 | Comment:
6 | -----
7 | Last Modified: Tuesday February 15th 2022 7:39:02 pm
8 | Modified By: Zhengyi Luo at
9 | -----
10 | Copyright (c) 2022 Carnegie Mellon University, KLab
11 | -----
12 | '''
13 | import argparse
14 |
15 | import sys
16 | import pickle
17 | import time
18 | import joblib
19 | import glob
20 | import pdb
21 | import os.path as osp
22 | import os
23 |
24 | os.environ["OMP_NUM_THREADS"] = "1"
25 | sys.path.append(os.getcwd())
26 |
27 | import torch
28 | import numpy as np
29 |
30 | from uhc.utils.flags import flags
31 | import wandb
32 |
33 | from embodiedpose.agents import agent_dict
34 | from embodiedpose.utils.video_pose_config import Config
35 |
36 |
37 | def main_loop():
38 | if args.render:
39 | agent.pre_epoch_update(start_epoch)
40 | agent.sample(1e8)
41 | else:
42 | for epoch in range(start_epoch, cfg.num_epoch):
43 | agent.optimize_policy(epoch)
44 | """clean up gpu memory"""
45 | torch.cuda.empty_cache()
46 |
47 | agent.logger.info("training done!")
48 |
49 |
50 | if __name__ == "__main__":
51 | parser = argparse.ArgumentParser()
52 | parser.add_argument("--cfg", default=None)
53 | parser.add_argument("--render", action="store_true", default=False)
54 | parser.add_argument("--local", action="store_true", default=False)
55 | parser.add_argument("--num_threads", type=int, default=30)
56 | parser.add_argument("--gpu_index", type=int, default=0)
57 | parser.add_argument("--epoch", type=int, default=0)
58 | parser.add_argument("--resume", type=str, default=None)
59 | parser.add_argument("--no_log", action="store_true", default=False)
60 | parser.add_argument("--show_noise", action="store_true", default=False)
61 | parser.add_argument("--debug", action="store_true", default=False)
62 | args = parser.parse_args()
63 |
64 | if args.render:
65 | args.num_threads = 1
66 | cfg = Config(cfg_id=args.cfg, create_dirs=not (args.render or args.epoch > 0))
67 |
68 | if args.debug:
69 | args.num_threads = 1
70 | args.no_log = True
71 | # cfg.get("data_specs", {})["train_files_path"] = [[
72 | # "/hdd/zen/data/ActBound/AMASS/amass_copycat_take5_test.pkl",
73 | # "amass"
74 | # ]]
75 | cfg.get("data_specs", {})["train_files_path"] = [["/hdd/zen/data/video_pose/h36m/data_fit/h36m_test_30_gt_fk.p", "scene_pose"]]
76 |
77 | cfg.update(args)
78 | flags.debug = args.debug
79 |
80 | if not args.no_log:
81 | wandb.init(
82 | project=cfg.proj_name,
83 | resume=not args.resume is None,
84 | id=args.resume,
85 | notes=cfg.notes,
86 | )
87 | wandb.config.update(vars(cfg), allow_val_change=True)
88 | wandb.config.update(args, allow_val_change=True)
89 | wandb.run.name = args.cfg
90 | wandb.run.save()
91 |
92 | dtype = torch.float64
93 | torch.set_default_dtype(dtype)
94 | device = (torch.device("cuda", index=args.gpu_index) if torch.cuda.is_available() else torch.device("cpu"))
95 | if torch.cuda.is_available():
96 | torch.cuda.set_device(args.gpu_index)
97 | np.random.seed(cfg.seed)
98 | torch.manual_seed(cfg.seed)
99 |
100 | start_epoch = int(args.epoch)
101 | """create agent"""
102 | agent_class = agent_dict[cfg.agent_name]
103 | agent = agent_class(
104 | cfg=cfg,
105 | dtype=dtype,
106 | device=device,
107 | mode="train",
108 | checkpoint_epoch=args.epoch,
109 | )
110 | main_loop()
111 |
--------------------------------------------------------------------------------
/scripts/vis.py:
--------------------------------------------------------------------------------
1 | import joblib
2 |
3 | j3d_pred, j3d_gt_root, joints2d = joblib.load("a.pkl")
4 | j3d_pred, j3d_gt_root, joints2d = j3d_pred.detach().cpu().numpy(
5 | ), j3d_gt_root.detach().cpu().numpy(), j3d_gt_root.detach().cpu().numpy()
6 |
7 | # j3d = j3d_gt_root[:, 0]
8 | j3d = j3d_pred[:, 0]
9 | from mpl_toolkits.mplot3d import Axes3D # noqa: F401 unused import
10 | import matplotlib.pyplot as plt
11 |
12 | fig = plt.figure()
13 | ax = fig.add_subplot(111, projection='3d')
14 | ax.view_init(90, -90)
15 | ax.scatter(j3d[0, :, 0], j3d[0, :, 1], j3d[0, :, 2])
16 |
17 | ax.set_xlabel('X Label')
18 | ax.set_ylabel('Y Label')
19 | ax.set_zlabel('Z Label')
20 | drange = 1
21 | ax.set_xlim(-drange, drange)
22 | ax.set_ylim(drange, -drange)
23 | ax.set_zlim(-drange, drange)
24 | plt.show()
25 |
--------------------------------------------------------------------------------