├── .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 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /assets/mujoco_models/template/humanoid_template_design.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /assets/mujoco_models/template/humanoid_template_local.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /assets/mujoco_models/template/humanoid_template_test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 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 | 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 | --------------------------------------------------------------------------------