PACT: End-to-End Learning of Human Pose, Contacts, and Forces from Video
Organizations: MBZUAI · ETH Zürich · EPFL
Abstract
Human motion, environmental contacts, and interaction forces are governed by common physical laws, yet existing approaches typically separate visual pose reconstruction from contact and force estimation. This separation limits joint reasoning and can propagate errors between stages. We introduce PACT, an end-to-end model that jointly learns to estimate human pose, contacts and contact forces from monocular video. Our approach augments a human reconstruction foundation model with learnable contact-force tokens and a temporal transformer that integrates visual features with world-space motion. Joint prediction heads refine human poses and estimate contacts and forces, while physics-based supervision encourages consistency between the reconstructed motion and interaction forces. To address the scarcity of force annotations, we develop a data annotation pipeline that combines contact labeling with physics-based motion and force optimization, producing training supervision from synthetic and real-world videos. We also introduce a real-world climbing benchmark ForceWall with climbing videos and corresponding ground-truth contact forces obtained from the force sensors. Experiments demonstrate state-of-the-art contact and force estimation, outperforming staged reconstruction approaches and generalizing to interactions beyond the training distribution. These results support end-to-end joint learning as an effective approach to recovering human motion and physical interactions from video.
Figures & tables
| ClimbingVideos | ForceWall | RICH | |||||||
| Method | Prec. | Rec. | F1 | Prec. | Rec. | F1 | Prec. | Rec. | F1 |
| BSTRO ( Huang et al., 2022 ) | 0.472 | 0.518 | 0.494 | 0.840 | 0.454 | 0.590 | 0.800 | 0.937 | 0.863 |
| DECO ( Tripathi et al., 2023a ) | 0.435 | 0.594 | 0.502 | 0.821 | 0.548 | 0.658 | 0.736 | 0.751 | 0.744 |
| InteractVLM ( Dwivedi et al., 2025 ) , “scene” | 0.419 | 0.503 | 0.457 | 0.830 | 0.604 | 0.699 | 0.833 | 0.855 | 0.844 |
| InteractVLM ( Dwivedi et al., 2025 ) , “wall” | 0.738 | 0.849 | 0.789 | 0.820 | 0.676 | 0.741 | 0.785 | 0.669 | 0.722 |
| GVHMR ( Shen et al., 2024 ) | 0.559 | 0.441 | 0.493 | 0.892 | 0.680 | 0.772 | 0.814 | 0.746 | 0.778 |
| Method | MPJPE [mm] | Force MAE [N] | Force agreement | Residual | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| L. foot | R. foot | L. hand | R. hand | Avg. | Angle [ ∘ ] | Corr | Share [pp] | Force [bw] | Moment [bw m] | |||
| ForceWall | SAM 3D Body | 42.8 | – | – | – | – | – | – | – | – | – | – |
| Li et al. (2019) ++ | 137.4 | 166.2 | 141.5 | 128.8 | 129.1 | 141.4 | 21.2 | 0.243 | 18.5 | 0.384 | 0.113 | |
| PhysPT | 86.7 | 193.8 | 147.4 | 170.3 | 159.8 | 167.8 | 21.4 | 0.169 | 28.0 | 0.785 | 0.080 | |
| Inverse dynamics | 42.7 | 200.7 | 162.2 | 166.0 | 192.4 | 180.3 | 28.8 | 0.007 | 21.9 | 0.024 | 0.040 | |
| PACT | 49.1 | 98.4 | 90.4 | 72.9 | 80.4 | 85.5 | 14.4 | 0.725 | 8.7 | 0.167 | 0.038 | |
| Method | Input | Type | OC-Walking | OC-All | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Estimated mass | True mass | Estimated mass | True mass | |||||||||||
| Vert. | AP | ML | Vert. | AP | ML | Vert. | AP | ML | Vert. | AP | ML | |||
| OpenCap ( Uhlrich et al., 2023 ) | two views | simulation | – | – | – | 12.2 | 3.1 | 1.2 | – | – | – | 11.4 | 3.5 | 3.8 |
| OpenCap-mono ( Gilon et al., 2026 ) | one view | learn + optim. | – | – | – | 9.7 | 4.4 | 1.7 | – | – | – | – | – | – |
| PhysPT ( Zhang et al., 2024 ) | one view | learned | 66.3 | 8.0 | 2.5 | 64.8 | 8.0 | 2.5 | 46.0 | 4.1 | 3.9 | 45.9 | 4.2 | 4.0 |
| Li et al. (2019) ++ | one view | optimization | 33.9 | 9.0 | 4.1 | 35.0 | 8.6 | 4.0 | 37.0 | 6.1 | 4.3 | 36.5 | 5.8 | 4.3 |
| Setup | Pose | Contacts | Forces | Residual | ||||
|---|---|---|---|---|---|---|---|---|
| MPJPE [mm] | F1 | MAE [N] | Angle [ ∘ ] | Corr | Share [pp] | Force [bw] | Moment [bw m] | |
| Architecture ( ClimbingVideos training) | ||||||||
| Per-frame tokens and heads | 72.9 | 0.895 | 120.1 | 22.1 | 0.472 | 12.2 | 0.471 | 0.096 |
| + temporal transformer | 50.5 | 0.914 | 102.2 | 17.3 | 0.649 | 10.2 | 0.422 | 0.075 |
| + world-informed poses | 61.2 | 0.914 | 117.2 | 21.2 | 0.504 | 11.6 | 0.291 | 0.075 |
| + iterative refinement | 57.7 | 0.917 | 112.0 | 19.9 | 0.578 | 11.0 | 0.286 | 0.073 |
Appendix figures & tables18 assets
Supplementary material from the paper’s appendix.
Appendix
| Term | Weight | Root | Pass 1 | Pass 2 | Dynamics |
| Reprojection to the initial joints | 30 | 30 | 30 | 30 | |
| Reprojection to the Sapiens2 keypoints | 8 | 8 | 8 | 8 | |
| Chamfer distance to the human depth cloud | 10 | 10 | 0 | 0 | |
| Pose prior | 300 | 300 | 300 | 300 | |
| Root orientation prior | 50 | 50 | 50 | 50 | |
| Smoothness of the root pose | 24 / 300 / 300 | 400 / 300 / 300 | 24 / 300 / 300 | 24 / 300 / 300 |
| hip, knee, spine | ankle, foot | neck, head | collar, shoulder | elbow | wrist | fingers | |
|---|---|---|---|---|---|---|---|
| Max. torque [N m] | 200 | 118 | 33 | 80 | 61 | 12 | 8 |
| 1.0 | 1.7 | 6.0 | 2.5 | 3.3 | 17 | 25 |
| Loss | Definition | Weight | Conf. |
| Per-frame body (SMPL-X and camera heads) | |||
| 2D joints | Huber on the full-frame projection, crop units, | 10 | |
| 3D joints | Huber, pelvis-relative, m | 5 | |
| Root, body and finger rotations | squared error on 6D | 1, 1, 0.5 | |
| Shape | squared error | 0.1 | |
| Camera | Huber on the weak-perspective parameters, | 1 | |
| Sources | Scenes | Frames | Labels | |
| ClimbingVideos train | 149 | 1,419 | 460k | pseudo |
| ClimbingVideos test | 42 | 109 | 31k | pseudo, manual contacts |
| BEDLAM2 ( Tesch et al., 2025 ) | 59 jobs | 18,076 | 5.5M | true pose, pseudo contacts and forces |
| ForceWall | 14 | 68 | 29.6k | sensors, multi-view pose |
| RICH ( Huang et al., 2022 ) | 8 subjects | 164 | 70.2k | contact labels |
| Parkour ( Li et al., 2019 ) | – | 28 | 2.3k | motion capture, plates and bar |
| Stage | Count |
|---|---|
| Videos returned by keyword search (“bouldering gym”, “moonboard climbing” and the like) | 782 |
| Duration between 10 s and 20 min | 591 |
| Thumbnail and metadata VLM gate | 584 |
| Downloaded at up to 1080p (48 h of video) | 581 |
| Scenes after shot detection, between 100 and 500 frames | 16,152 |
| Full-body pose gate: in half of the sampled frames, a person with 60% of the 17 COCO keypoints visible, including an ankle, a shoulder and a hip, spanning 40% of the frame height | 4,612 |
| Window | Pose | Contacts | Forces | Residual | ||||
|---|---|---|---|---|---|---|---|---|
| MPJPE [mm] | F1 | MAE [N] | Angle [ ∘ ] | Corr | Share [pp] | Force [bw] | Moment [bw m] | |
| No mask (240-frame window) | 58.1 | 0.940 | 86.3 | 15.5 | 0.756 | 8.2 | 0.153 | 0.040 |
| (default) | 56.6 | 0.936 | 87.5 | 15.0 | 0.729 | 8.6 | 0.155 | 0.037 |
| 56.4 | 0.933 | 88.2 | 15.1 | 0.721 | 8.7 | 0.157 | 0.038 | |
| ClimbingVideos | ForceWall | |||||
|---|---|---|---|---|---|---|
| Method | Prec. | Rec. | F1 | Prec. | Rec. | F1 |
| Optimization | 0.938 | 0.850 | 0.892 | 0.902 | 0.931 | 0.916 |
| PACT | 0.948 | 0.895 | 0.921 | 0.896 | 0.980 | 0.936 |
| Method | MPJPE [mm] | Force MAE [N] | Force agreement | Residual | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| L. foot | R. foot | L. hand | R. hand | Avg. | Angle [ ∘ ] | Corr | Share [pp] | Force [bw] | Moment [bw m] | |||
| ForceWall | Optimization | 57.5 | 101.8 | 101.8 | 89.2 | 84.9 | 94.5 | 14.7 | 0.654 | 10.8 | 0.087 | 0.019 |
| PACT | 49.1 | 98.4 | 90.4 | 72.9 | 80.4 | 85.5 | 14.4 | 0.725 | 8.7 | 0.167 | 0.038 | |
| Parkour | Optimization | 65.7 | 127.3 | 124.8 | 91.5 | 65.7 | 102.3 | 20.7 | 0.666 | 15.8 | 0.089 | 0.019 |
| PACT | 66.3 | 117.1 | 148.4 | 77.9 | 66.3 | 102.4 | 16.7 | 0.712 | 14.6 | 0.283 | 0.044 | |
| Method | OC-Walking | OC-All | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Estimated mass | True mass | Estimated mass | True mass | |||||||||
| Vert. | AP | ML | Vert. | AP | ML | Vert. | AP | ML | Vert. | AP | ML | |
| Optimization | 19.2 | 5.4 | 2.5 | 15.2 | 5.6 | 2.6 | 13.6 | 3.9 | 3.8 | 11.5 | 4.2 | 3.8 |
| PACT | 11.8 | 3.0 | 1.5 | 7.8 | 3.3 | 1.6 | 11.6 | 3.4 | 2.3 | 9.7 | 3.7 | 2.4 |