Experimental from-scratch text-to-motion model (#411): CMU+Quaternius CC0, ONNX
Browse files- README.md +53 -0
- t2m-vocab.json +1 -0
- t2m.onnx +3 -0
README.md
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
license: cc0-1.0
|
| 3 |
+
tags:
|
| 4 |
+
- text-to-motion
|
| 5 |
+
- skeletal-animation
|
| 6 |
+
- qtmesheditor
|
| 7 |
+
- experimental
|
| 8 |
+
---
|
| 9 |
+
|
| 10 |
+
# QtMeshEditor Text-to-Motion (experimental, #411)
|
| 11 |
+
|
| 12 |
+
A small, **experimental** from-scratch text-to-motion model for
|
| 13 |
+
[QtMeshEditor](https://github.com/fernandotonon/QtMeshEditor). Given a text
|
| 14 |
+
prompt (an action keyword), it generates a 40-frame, 22-joint **canonical**
|
| 15 |
+
skeletal clip that QtMeshEditor retargets onto an arbitrary humanoid rig.
|
| 16 |
+
|
| 17 |
+
## Status: experimental
|
| 18 |
+
|
| 19 |
+
Render-verified quality is **action-dependent**: locomotion (e.g. `walk`) is
|
| 20 |
+
coherent; gestures (`wave`, `run`) can drift in the last few frames. The shipped
|
| 21 |
+
default in QtMeshEditor is the deterministic **template-clip retarget**; this
|
| 22 |
+
model is an opt-in (`--model` / GUI checkbox / MCP `model:true`) that **falls
|
| 23 |
+
back to the template** automatically when unavailable or out of vocabulary.
|
| 24 |
+
|
| 25 |
+
## Training data — permissive only
|
| 26 |
+
|
| 27 |
+
Trained from scratch on **clean, dynamic, single-action windows** mined from:
|
| 28 |
+
- **CMU MoCap** (commercial-OK) — the bulk.
|
| 29 |
+
- **Quaternius Universal Animation Library** (CC0) — supplementary.
|
| 30 |
+
|
| 31 |
+
AMASS / HumanML3D / KIT-ML were **excluded** (non-commercial). Idle/near-static
|
| 32 |
+
and multi-action-labelled windows were filtered out (they dominated the raw set
|
| 33 |
+
and caused pose collapse).
|
| 34 |
+
|
| 35 |
+
## Architecture
|
| 36 |
+
|
| 37 |
+
6D-rotation representation, cross-attention decoder with a delta-integration
|
| 38 |
+
(cumsum) head for temporal continuity, CVAE latent, balanced sampling. ~7.6M
|
| 39 |
+
params. Exports to ONNX (one forward pass).
|
| 40 |
+
|
| 41 |
+
## I/O contract
|
| 42 |
+
|
| 43 |
+
```
|
| 44 |
+
input "tokens" float32 [1, V] one-hot over the fixed action vocab (see t2m-vocab.json)
|
| 45 |
+
input "seed" float32 [1, Z] latent (zeros = mean clip)
|
| 46 |
+
output "motion" float32 [1, T, C] C = 22*10 per-joint [tx,ty,tz, qx,qy,qz,qw, sx,sy,sz]
|
| 47 |
+
```
|
| 48 |
+
|
| 49 |
+
`t2m-vocab.json` ships the `{vocab, Z, T, C, J, joints}` the host needs to build
|
| 50 |
+
the input and interpret the output.
|
| 51 |
+
|
| 52 |
+
Vocabulary: walk, run, jog, jump, dance, march, climb, kick, punch, sit,
|
| 53 |
+
stretch, throw, wave, boxing, turn, forward.
|
t2m-vocab.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"vocab": ["walk", "run", "jog", "jump", "dance", "march", "climb", "kick", "punch", "sit", "stretch", "throw", "wave", "boxing", "turn", "forward"], "Z": 24, "T": 40, "C": 220, "J": 22, "joints": ["hip", "abdomen", "chest", "neck", "neck1", "head", "rcollar", "rshoulder", "relbow", "rhand", "lcollar", "lshoulder", "lelbow", "lhand", "rbuttock", "rhip", "rknee", "rfoot", "lbuttock", "lhip", "lknee", "lfoot"]}
|
t2m.onnx
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:41da066e3ce127a4985a1b2aff2ccc0987153ff51904d1f5422cf35c16b9d704
|
| 3 |
+
size 17569325
|