File size: 2,880 Bytes
aa2cbcf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a3fb426
 
aa2cbcf
 
 
 
 
 
a3fb426
 
aa2cbcf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
81
82
83
84
85
---
library_name: pytorch
license: other
pipeline_tag: robotics
tags:
- robotics
- imu
- inertial-odometry
- humanoid
- human-motion
datasets:
- bones-studio/seed
- Open-IO/humanoid-g1-odometry
---

# A Unified Inertial Encoder for Human and Humanoid Motion: Checkpoint

[Project Page](https://unified-inertial-encoder.github.io/) | [Code](https://github.com/unified-inertial-encoder/Unified-Inertial-Encoder)

![One inertial encoder shared by human and humanoid motion](assets/teaser.png)

One encoder, trained on human motion and kinematically retargeted G1 motion, transfers zero-shot to
a physical Unitree G1. This repository holds the checkpoint behind the paper's "Ours" results.

![Method overview](assets/overview.png)

## Files

```
checkpoints/unified_encoder.ckpt   model weights (EMA, bf16, 55.6M parameters)
.hydra/                           Hydra config of the training run (experiment=exp15_full_train_C)
```

Keep `.hydra/` next to `checkpoints/`, because the code rebuilds the model from it. The checkpoint
holds weights only, without optimizer state, so it supports evaluation and fine-tuning
(`'meta.resume_from=<CKPT>' meta.resume_full_state=false`), not exact resumption of the training run.

## Quick Usage

With the [code](https://github.com/unified-inertial-encoder/Unified-Inertial-Encoder) installed:

```bash
RUN="${FOUNDATIONIMU_EXP_ROOT:-experiments}/unified-inertial-encoder"
hf download Open-IO/Unified-Inertial-Encoder --local-dir "$RUN"
hf download Open-IO/humanoid-g1-odometry --repo-type dataset \
    --local-dir "$FOUNDATIONIMU_CACHE_ROOT/humanoid_superodom_clips_v2"

python -m src.eval_foundation \
    --ckpt "$RUN/checkpoints/unified_encoder.ckpt" \
    --data_from "$RUN" \
    --dataset Humanoid_SuperOdom_NPZ_Processed_Language \
    --json real_g1.json
```

`src.eval_foundation` needs a CUDA GPU. See the code repository for the other datasets.

## Results

Scores reported in the paper. AVE is the average velocity error (m/s). ATE<sub>GT</sub> and
ATE<sub>Pred</sub> are trajectory errors (m) using ground-truth rotation and rotation preintegrated
from the gyroscope.

| Dataset | AVE | ATE<sub>GT</sub> | ATE<sub>Pred</sub> |
|---|---|---|---|
| Nymeria | 0.026 | 2.468 | 18.20 |
| Natural Motion | 0.049 | 7.456 | 50.54 |
| BONES-Seed (Human) | 0.031 | 0.113 | 0.148 |
| BONES-Seed (G1) | 0.024 | 0.101 | 0.127 |
| Real-Trajectory (G1) | 0.099 | 3.153 | 11.50 |

Real-G1 clips are never used for gradient training, but their scores informed the selection of this
checkpoint.

## Citation

```bibtex
@misc{chen2026unifiedinertial,
  title={A Unified Inertial Encoder for Human and Humanoid Motion},
  author={Chen, Yutian and Zhao, Shibo and Duan, Rocky and Liu, Karen and
          Sferrazza, Carmelo and Shi, Guanya and Qiu, Yuheng and Sreenath, Koushil},
  year={2026},
  url={https://unified-inertial-encoder.github.io/}
}
```