Add model card
Browse files
README.md
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
pretty_name: DEGAS Pretrained Avatars
|
| 3 |
+
license: cc-by-nc-sa-4.0
|
| 4 |
+
language:
|
| 5 |
+
- en
|
| 6 |
+
tags:
|
| 7 |
+
- 3d
|
| 8 |
+
- avatar
|
| 9 |
+
- gaussian-splatting
|
| 10 |
+
- smplx
|
| 11 |
+
- degas
|
| 12 |
+
library_name: pytorch
|
| 13 |
+
---
|
| 14 |
+
|
| 15 |
+
# DEGAS: pretrained full-body Gaussian avatars
|
| 16 |
+
|
| 17 |
+
Trained avatars for [**DEGAS: Detailed Expressions on Full-Body Gaussian
|
| 18 |
+
Avatars**](https://initialneil.github.io/DEGAS) (3DV 2025), built on the
|
| 19 |
+
[DREAMS-AVATAR](https://huggingface.co/datasets/initialneil/DREAMS-AVATAR) captures.
|
| 20 |
+
|
| 21 |
+
- **Code:** [github.com/initialneil/DEGAS](https://github.com/initialneil/DEGAS)
|
| 22 |
+
- **Dataset:** [initialneil/DREAMS-AVATAR](https://huggingface.co/datasets/initialneil/DREAMS-AVATAR)
|
| 23 |
+
- **Paper:** [arXiv:2408.10588](https://arxiv.org/abs/2408.10588)
|
| 24 |
+
- **Registration:** [Holistic-Multiview-Tracker](https://github.com/initialneil/Holistic-Multiview-Tracker)
|
| 25 |
+
|
| 26 |
+
## Available avatars
|
| 27 |
+
|
| 28 |
+
| Avatar | Trained on | Iterations | Face driven by |
|
| 29 |
+
|---|---|---|---|
|
| 30 |
+
| `P1_smplx` | P1C1 | 800k | the fitted SMPL-X expression + jaw |
|
| 31 |
+
| `P1_dpe` | P1C1 | 800k | a per-frame 512-d DPE code, mesh face neutralised |
|
| 32 |
+
| `P2_smplx` | P2C1 | 800k | SMPL-X expression + jaw *(training, uploads when it finishes)* |
|
| 33 |
+
| `P3_smplx` | P3C1 | 800k | SMPL-X expression + jaw *(training, uploads when it finishes)* |
|
| 34 |
+
| `P4_smplx` | P4C1 | 800k | SMPL-X expression + jaw *(training, uploads when it finishes)* |
|
| 35 |
+
|
| 36 |
+
`P1_smplx` and `P1_dpe` are the same subject, the same data, the same architecture and the
|
| 37 |
+
same schedule. They differ **only** in how the face is animated, so they are a clean
|
| 38 |
+
side-by-side of the two options the code supports.
|
| 39 |
+
|
| 40 |
+
Each capture's `C1` session is the training session and `C2` is held out, so evaluating an
|
| 41 |
+
avatar on `PxC2` is a genuine cross-session drive.
|
| 42 |
+
|
| 43 |
+
## Layout
|
| 44 |
+
|
| 45 |
+
Each avatar is stored exactly as `degas_eval.py --model_path` expects:
|
| 46 |
+
|
| 47 |
+
```
|
| 48 |
+
avatars/<NAME>/
|
| 49 |
+
config.yaml the run's own config, paths made portable
|
| 50 |
+
avatar.json provenance: subject, capture, face path
|
| 51 |
+
point_cloud/iteration_800000/checkpoint.pt the model (~1.3 GB)
|
| 52 |
+
point_cloud/iteration_800000/point_cloud.ply the Gaussians
|
| 53 |
+
point_cloud/iteration_800000/smplx_refined.pt the refined SMPL-X parameters
|
| 54 |
+
```
|
| 55 |
+
|
| 56 |
+
## Usage
|
| 57 |
+
|
| 58 |
+
```bash
|
| 59 |
+
git clone --recursive https://github.com/initialneil/DEGAS && cd DEGAS
|
| 60 |
+
# install per the repo's Setup section, and place SMPLX_NEUTRAL.npz under model/data/
|
| 61 |
+
|
| 62 |
+
pip install -U "huggingface_hub[cli]"
|
| 63 |
+
hf download initialneil/DEGAS --include "avatars/P1_smplx/*" --local-dir weights
|
| 64 |
+
hf download initialneil/DREAMS-AVATAR --repo-type dataset \
|
| 65 |
+
--include "data/P1C2/*" --local-dir DREAMS-AVATAR
|
| 66 |
+
|
| 67 |
+
python degas_eval.py \
|
| 68 |
+
--dat_dir DREAMS-AVATAR/data/P1C2 \
|
| 69 |
+
--ip none \
|
| 70 |
+
--model_path weights/avatars/P1_smplx \
|
| 71 |
+
--configs configs/degas_config.yaml,configs/degas_vae_driver.yaml,configs/dreams/p1_train_base.yaml,configs/dreams/p1_face_B.yaml \
|
| 72 |
+
dataset.cache_dir=cache/P1C2_eval_cam3 \
|
| 73 |
+
dataset.test.cam_select=[3] \
|
| 74 |
+
"dataset.test.frm_list=np.arange(0, 293, 8).tolist()"
|
| 75 |
+
```
|
| 76 |
+
|
| 77 |
+
Three things fail quietly rather than loudly, so they are worth stating plainly:
|
| 78 |
+
|
| 79 |
+
1. **The run's saved `config.yaml` is applied last**, so an avatar is always evaluated
|
| 80 |
+
under its own face setting. Only CLI overrides outrank it, which is why the test split
|
| 81 |
+
is set on the command line above.
|
| 82 |
+
2. **Give every capture its own `dataset.cache_dir`.** Decoded frames are named
|
| 83 |
+
`cam%02d/%08d.jpg` with no capture in the path, so a shared cache would serve P1C1's
|
| 84 |
+
frame 110 for P1C2's frame 110.
|
| 85 |
+
3. **For `P1_dpe`, override `dataset.with_face_dpe`** to the session you are driving with
|
| 86 |
+
(`DREAMS-AVATAR/data/P1C2/dpe/dpe-multi-faces.zip`). The stored config points at the
|
| 87 |
+
*training* session's codes.
|
| 88 |
+
|
| 89 |
+
For `P1_dpe`, swap the face config to `configs/dreams/p1_face_A_dpe.yaml` and add that
|
| 90 |
+
override.
|
| 91 |
+
|
| 92 |
+
## Training setup
|
| 93 |
+
|
| 94 |
+
800k iterations per avatar, roughly 41 h on a single RTX 3090. Trained on all frames of the
|
| 95 |
+
`C1` session across 29 of 32 cameras at `2x` (1024x750). **cam03**, the frontal tele face
|
| 96 |
+
closeup, is held out as an unseen view, and the whole `C2` session is held out as an unseen
|
| 97 |
+
session. The DPE codes were extracted from cam07 and cam30, both frontal tele views inside
|
| 98 |
+
the training split, so no evaluation view leaks into the face conditioning.
|
| 99 |
+
|
| 100 |
+
## Limitations
|
| 101 |
+
|
| 102 |
+
- One subject per avatar. These are personalised avatars, not a generalisable model.
|
| 103 |
+
- Driving signal must be a registered SMPL-X sequence in the DREAMS-AVATAR convention.
|
| 104 |
+
- Densification is disabled during training, and there is no oral-cavity geometry, so teeth
|
| 105 |
+
render as a specular smear when the mouth opens wide.
|
| 106 |
+
- The SMPL-X body model is **not** included here. Register at
|
| 107 |
+
[smpl-x.is.tue.mpg.de](https://smpl-x.is.tue.mpg.de/) and install it yourself.
|
| 108 |
+
|
| 109 |
+
## Licence
|
| 110 |
+
|
| 111 |
+
**[CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/)**, non-commercial
|
| 112 |
+
use only, matching the DEGAS code. The DREAMS-AVATAR captures these were trained on are
|
| 113 |
+
[CC BY-NC 4.0](https://creativecommons.org/licenses/by-nc/4.0/). Any commercial use needs
|
| 114 |
+
formal permission first.
|
| 115 |
+
|
| 116 |
+
## Citation
|
| 117 |
+
|
| 118 |
+
```bibtex
|
| 119 |
+
@misc{shao2024degas,
|
| 120 |
+
title={DEGAS: Detailed Expressions on Full-Body Gaussian Avatars},
|
| 121 |
+
author={Zhijing Shao and Duotun Wang and Qing-Yao Tian and Yao-Dong Yang and Hengyu Meng and Zeyu Cai and Bo Dong and Yu Zhang and Kang Zhang and Zeyu Wang},
|
| 122 |
+
year={2024},
|
| 123 |
+
eprint={2408.10588},
|
| 124 |
+
archivePrefix={arXiv},
|
| 125 |
+
primaryClass={cs.CV},
|
| 126 |
+
url={https://arxiv.org/abs/2408.10588}
|
| 127 |
+
}
|
| 128 |
+
```
|