OmniPoser: Flexible Human Motion Recovery in the Wild with Masked Flow Matching
Organizations: Shanghai Jiao Tong University, China · Shanghai Artificial Intelligence Laboratory, China
Abstract
Recovering 3D human motion from sparse wearable sensors is challenging due to the inherent noise, occlusion, and instability of real-world tracking signals. Existing approaches are restricted to fixed sensor configurations and, when built on diffusion models, are computationally prohibitive for real-time deployment. We propose OmniPoser, a universal framework that recovers full-body SMPL motion from a flexible combination of heterogeneous inputs, such as 3D keypoints, sparse IMU rotations, head-mounted 6-DoF poses, or any subset thereof, within a single model. OmniPoser introduces a cross-modal masking mechanism paired with a Masked Conditioning Encoder, enabling one architecture to incorporate diverse sensor configurations through a masked design. A decoupled dual-stream generative backbone generates complete motion via Conditional Flow Matching, requiring only a single ODE integration step at inference. Across three settings and seven benchmarks, including in-the-wild Nymeria and Ego-Exo4D datasets, OmniPoser performs on par with state-of-the-art methods while running at over 700 FPS. The project page is available at https://jamesbridgewater51.github.io/omniposer-eccv/.
Figures & tables
| AMASS | Nymeria (In-the-wild) | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Method | JPE | Acc | Con | Ska | Pen | JPE | Acc | Con | Ska |
| HuMoR | 88.0 | 3.3 | 0.68 | 0.230 | 2.59 | 88.5 | 8.26 | 0.78 | 0.685 |
| RoHM | 34.8 | 2.3 | 0.95 | 0.078 | 0.69 | 59.3 | 7.2 | 0.91 | 0.610 |
| Ours-S | 32.1 | 2.7 | 0.94 | 0.031 | 1.84 | 21.1 | 1.39 | 0.95 | 0.033 |
| RoHM-U | 158.7 | 2.9 | 0.75 | 0.190 | 1.48 | - | - | - | - |
| RoHM++-U | 39.9 | 2.3 | 0.95 | 0.081 | 0.56 | - | - | - | - |
| Metric | HuMoR | RoHM | Ours-S | Ours-U |
|---|---|---|---|---|
| JPE (mm) | 80.5 | 38.2 | 35.7 | 49.3 |
| Accel. (m/s 2 ) | 3.3 | 1.9 | 2.2 | 2.6 |
| Contact | 0.78 | 0.95 | 0.97 | 0.93 |
| Skating | 0.184 | 0.024 | 0.018 | 0.019 |
| AMASS | RICH (Cross-domain) | Nymeria (Wild) | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Method | JPE | PA | Con | JPE | PA | Con | JPE | PA | Con | ||
| EgoEgo | 167.4 | 145.8 | 0.92 | 54.9 | 207.8 | 187.8 | 0.88 | 66.5 | 135.8 | 117.2 | 0.57 |
| EgoAllo | 119.7 | 101.1 | 1.00 | 6.2 | 176.2 | 160.1 | 0.96 | 8.9 | 103.0 | 89.3 | 0.63 |
| Ours-S | 83.2 | 73.5 | 0.92 | 17.1 | 131.6 | 111.5 | 0.71 | 25.7 | 40.7 | 36.2 | 0.94 |
| RoHM-U | 124.3 | 101.5 | 0.94 | 36.7 | 195.0 | 115.4 | 0.62 | 56.8 | - | - | - |
| RoHM++-U | 94.5 | 92.5 | 0.96 | 19.5 | 126.3 | 112.3 | 0.72 | 44.8 | - | - | - |
| AIST++ | TotalCapture | Nymeria (In-the-wild) | |||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Method | PA | JPE | PVE | TE | HS | Jrk | FS | PA | JPE | PVE | TE | HS | Jrk | FS | PA | JPE | PVE | TE | HS | Jrk | FS |
| SIP | 23.1 | 29.8 | 39.0 | 11.31 | 8.91 | 1.50 | 0.57 | 28.6 | 46.5 | 54.3 | 5.42 | 10.6 | 0.94 | 0.69 | 15.2 | 17.0 | 16.8 | 4.13 | 5.22 | 0.059 | 0.25 |
| RobCap | 24.0 | 33.1 | 43.2 | 19.92 | 9.34 | 2.49 | 0.61 | 33.5 | 48.7 | 63.4 | 23.5 | 13.4 | 2.09 | 1.40 | 16.5 | 19.5 | 19.4 | 4.52 | 7.51 | 1.56 | 0.54 |
| RobCap3D | 21.8 | 28.5 | 37.6 | 15.82 | 8.95 | 2.31 | 0.59 | 27.9 | 42.3 | 52.8 | 9.74 | 12.8 | 1.87 | 1.22 | 15.0 | 17.8 | 17.5 | 4.25 | 7.18 | 1.41 | 0.48 |
| Ours-S | 19.4 | 26.0 | 32.9 | 16.54 | 7.40 | 0.29 | 0.22 | 26.5 | 36.2 | 51.2 | 15.9 | 13.3 | 0.16 | 0.81 | 14.5 | 16.6 | 16.6 | 6.83 | 7.50 | 0.048 | 0.39 |
| RoHM-U | 123.5 | 157.5 | 185.9 | 76.3 | 38.1 | 0.21 | 9.49 | 78.6 | 95.3 | 100.4 | 22.8 | 19.5 | 0.19 | 0.95 | - | ||||||
| Variant | JPE | Acc | Ska |
|---|---|---|---|
| OmniPoser (full) | 32.1 | 2.7 | 0.031 |
| MCE zero-padding | 88.1 | 4.0 | 0.053 |