| --- |
| license: mit |
| tags: |
| - onnx |
| - facial-expression |
| - arkit |
| - vr |
| - mediapipe |
| - gru |
| library_name: onnx |
| pipeline_tag: other |
| --- |
| |
| # FaceFill |
|
|
| Causal GRU that predicts **11 upper-face ARKit morphs** (brows / eyes / blinks) from **30 lower-face** channels when an HMD occludes the upper face. |
|
|
| ~3.36M params · streaming `step` with GRU hidden state. |
|
|
| ## Files |
|
|
| | File | Description | |
| |------|-------------| |
| | `model.onnx` | Stateful single-frame step (opset 17) | |
| | `eval.json` | Autoregressive test metrics (held-out MEAD W009) | |
|
|
| ## Inputs / outputs |
|
|
| **Inputs** |
|
|
| | Name | Shape | Meaning | |
| |------|-------|---------| |
| | `current` | `[B, 80]` | lower + vel + head + conf + blink state | |
| | `history` | `[B, 176]` | prior full morphs + vel + obs mask + … | |
| | `u_prev` | `[B, 11]` | previous upper prediction | |
| | `hidden_in` | `[3, B, 384]` | GRU hidden | |
|
|
| **Outputs** |
|
|
| | Name | Shape | |
| |------|-------| |
| | `u_hat` | `[B, 11]` | |
| | `u_abs` | `[B, 11]` | |
| | `u_delta` | `[B, 11]` | |
| | `blink_onset_logits` | `[B, 3]` | |
| | `blink_duration` | `[B]` | |
| | `blink_amplitude` | `[B]` | |
| | `hidden_out` | `[3, B, 384]` | |
|
|
| Combine rule: `û = clamp(α·(u_prev + Δu) + (1−α)·u_abs)`, α=0.8. |
|
|
| ## Training data |
|
|
| Features derived from **[MEAD](https://wywu.github.io/projects/MEAD/MEAD.html)** frontal videos via MediaPipe Face Landmarker (person-disjoint M033 / W015 / W009 for this release). Does **not** redistribute MEAD videos. |
|
|
| ## Eval (AR, test) |
|
|
| - mean MAE **0.075** |
| - mean Pearson **0.82** |
| - blink F1 **0.73** |
|
|
| ## Usage |
|
|
| ```python |
| import onnxruntime as ort |
| import numpy as np |
| |
| sess = ort.InferenceSession("model.onnx") |
| B = 1 |
| feeds = { |
| "current": np.zeros((B, 80), np.float32), |
| "history": np.zeros((B, 176), np.float32), |
| "u_prev": np.zeros((B, 11), np.float32), |
| "hidden_in": np.zeros((3, B, 384), np.float32), |
| } |
| outs = sess.run(None, feeds) |
| # u_hat, u_abs, u_delta, blink_onset_logits, blink_duration, blink_amplitude, hidden_out |
| ``` |
|
|
| Browser / WebXR companion: load with ONNX Runtime Web (see FaceFill / WebXREmotion projects). |
|
|
| ## License |
|
|
| MIT (this model). Respect MEAD terms for any further training on that dataset. |
|
|