Phase 1 checkpoint, epoch None
Browse files- phase1_v2/README.md +107 -0
phase1_v2/README.md
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
library_name: mmm
|
| 3 |
+
tags:
|
| 4 |
+
- motion-matching
|
| 5 |
+
- character-animation
|
| 6 |
+
- state-space-model
|
| 7 |
+
- mamba
|
| 8 |
+
---
|
| 9 |
+
|
| 10 |
+
# MMM-versions
|
| 11 |
+
|
| 12 |
+
Retrieval augmented state space model for real time character animation: a
|
| 13 |
+
Mamba backbone that takes a joystick request, its own previous pose, and `k`
|
| 14 |
+
poses retrieved from a motion matching database, and predicts the next pose.
|
| 15 |
+
|
| 16 |
+
This is a **Phase 1** checkpoint (pre-training on mocap).
|
| 17 |
+
|
| 18 |
+
## This model is not usable on its own
|
| 19 |
+
|
| 20 |
+
The retrieved candidate poses are part of the input, not an optional extra.
|
| 21 |
+
Without the matching database the model is being fed zeros in 371%
|
| 22 |
+
of its input width and will not produce correct motion.
|
| 23 |
+
|
| 24 |
+
The database this checkpoint was trained against:
|
| 25 |
+
|
| 26 |
+
| | |
|
| 27 |
+
| --- | --- |
|
| 28 |
+
| fingerprint | `eb460d0093b66709` |
|
| 29 |
+
| rows (frames) | 962,891 |
|
| 30 |
+
| pose width | 151 |
|
| 31 |
+
| frame time | 0.016666666666666666 s |
|
| 32 |
+
| clips | 77 (aiming1_subject1, aiming1_subject4, aiming2_subject2, aiming2_subject3...) |
|
| 33 |
+
|
| 34 |
+
The database is built from LaFAN1 and is **not** distributed here. Rebuild it
|
| 35 |
+
with `scripts/build_databases.py`; the fingerprint above must match, or the
|
| 36 |
+
retrieved poses are in a different space from the ones the model learned on.
|
| 37 |
+
|
| 38 |
+
## Architecture
|
| 39 |
+
|
| 40 |
+
| | |
|
| 41 |
+
| --- | --- |
|
| 42 |
+
| backbone | MambaBackbone |
|
| 43 |
+
| n_layers | 4 |
|
| 44 |
+
| d_model | 256 |
|
| 45 |
+
| d_state | 16 |
|
| 46 |
+
| d_conv | 4 |
|
| 47 |
+
| d_inner | 512 |
|
| 48 |
+
| head | full |
|
| 49 |
+
| pose_dim | 151 |
|
| 50 |
+
| joystick_dim | 12 |
|
| 51 |
+
| n_candidates | 4 |
|
| 52 |
+
| input_dim | 163 |
|
| 53 |
+
| output_dim | 153 |
|
| 54 |
+
| predict_contacts | True |
|
| 55 |
+
| parameters | 1,833,625 |
|
| 56 |
+
| use_retrieval | False |
|
| 57 |
+
|
| 58 |
+
## Training
|
| 59 |
+
|
| 60 |
+
| epoch | train | validation |
|
| 61 |
+
| --- | --- | --- |
|
| 62 |
+
| 1 (first) | 1.1842 | 0.5915 |
|
| 63 |
+
| 55 (best) | 0.2827 | 0.2243 |
|
| 64 |
+
| 56 (last) | 0.2816 | 0.2262 |
|
| 65 |
+
|
| 66 |
+
Trained for 56 epochs.
|
| 67 |
+
|
| 68 |
+
## Retrieval gain
|
| 69 |
+
|
| 70 |
+
The number this project is actually judged on. It is the validation loss with
|
| 71 |
+
the retrieved candidates zeroed, minus the loss with them present, so positive
|
| 72 |
+
means retrieval is helping.
|
| 73 |
+
|
| 74 |
+
It is reported in two regimes and **only the free running one is meaningful**.
|
| 75 |
+
Under teacher forcing the model is handed the true previous pose every frame,
|
| 76 |
+
and at 60Hz that is a far better predictor than any retrieved candidate --
|
| 77 |
+
measured on this database, copying the previous pose scores 2.29 while copying
|
| 78 |
+
the nearest candidate scores 16.24. A teacher forced model is therefore right
|
| 79 |
+
to ignore retrieval, and its gain sits at zero whatever the model has learned.
|
| 80 |
+
|
| 81 |
+
| regime | with retrieval | without | gain |
|
| 82 |
+
| --- | --- | --- | --- |
|
| 83 |
+
| teacher forced | 0.2243 | 0.2243 | +0.0000 |
|
| 84 |
+
| **free running** | 0.7945 | 0.7945 | **+0.0000** |
|
| 85 |
+
|
| 86 |
+
## Provenance
|
| 87 |
+
|
| 88 |
+
- Rotation maths cross validated against GenoViewPython's `quat.py`
|
| 89 |
+
(MIT, Copyright (c) 2024 Daniel Holden) to 1e-9.
|
| 90 |
+
- Spring damper after Holden, *Spring-It-On*; inertialization after Bollo,
|
| 91 |
+
GDC 2018; 6D rotations after Zhou et al., CVPR 2019.
|
| 92 |
+
- Learned Motion Matching (Holden et al., SIGGRAPH 2020) is background and
|
| 93 |
+
baseline for this work, not its architecture.
|
| 94 |
+
|
| 95 |
+
See `NOTICE.md` in the source repository for the full attribution.
|
| 96 |
+
|
| 97 |
+
## Format
|
| 98 |
+
|
| 99 |
+
`safetensors`, with the run's architecture, config and calibrated loss weights
|
| 100 |
+
JSON encoded in the metadata header. No pickle is involved in loading.
|
| 101 |
+
|
| 102 |
+
```python
|
| 103 |
+
from safetensors import safe_open
|
| 104 |
+
|
| 105 |
+
with safe_open("published.safetensors", framework="pt") as f:
|
| 106 |
+
print(f.metadata()["architecture"])
|
| 107 |
+
```
|