# Frechet Motion Distance

> Evaluates the quality and diversity of synthesized human motion by measuring the distributional distance between ground truth and synthetic motion sequences in a learned latent space. Use when the user has predictions and gold and needs to compute Fréchet Motion Distance (FMD).

- Skill: `qhjqhj00/frechet-motion-distance` (Agent Skill)
- Install (CLI): `npx skillmds add qhjqhj00/frechet-motion-distance`
- Raw SKILL.md: https://api.skillmd.com/api/skills/qhjqhj00/frechet-motion-distance/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: qhjqhj00 (https://skillmd.com/u/qhjqhj00)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/qhjqhj00/frechet-motion-distance

---


# frechet-motion-distance

> Evaluating the Quality of a Synthesized Motion with the Fr'echet Motion Distance — Maiorca et al. (2022) (arXiv:2204.12318, 2022)

## What this evaluates

Evaluates the quality and diversity of synthesized human motion by measuring the distributional distance between ground truth and synthetic motion sequences in a learned latent space.

## Datasets

- **Human3.6M** — total ?; splits: train (-1), test (-1); repo https://github.com/antmaio/FrechetMotionDistance

## Metrics

- `Fréchet Motion Distance (FMD)` **(primary)** — range: [0, ∞)
  - Computes the Fréchet distance between the latent distributions of clean ground-truth motion and synthetic/noisy motion, both encoded via a ResNet34-based autoencoder. Assumes each distribution is approximated by a multivariate Gaussian.

## Input / output format

**Input**: Motion sequences represented as 3D images (x, y, z coordinates as RGB channels) or their corresponding latent vectors from the autoencoder.

**Output**: A single scalar value representing the Fréchet distance between the two motion distributions.

## Scoring recipe

```python
z_clean = autoencoder.encode(clean_motion)
z_noisy = autoencoder.encode(noisy_motion)
mu_c, Sigma_c = estimate_gaussian(z_clean)
mu_n, Sigma_n = estimate_gaussian(z_noisy)
diff = mu_c - mu_n
covmean = sqrtm(Sigma_c @ Sigma_n)
fmd = diff @ diff + trace(Sigma_c + Sigma_n - 2 * covmean)
return fmd
```

## Common pitfalls

- FMD shows reduced sensitivity to temporal noise/discontinuities compared to spatial noise, which may underestimate degradation in time-varying artifacts.
- The metric assumes latent distributions can be well-approximated by Gaussians; non-Gaussian latent structures may yield misleading distances.
- Motion length variations (e.g., 18 vs 64 frames) can affect latent encoding and FMD scores if not normalized or handled consistently.

## Evidence (verbatim from paper)

> To validate our proposed metric, we need to find that it correctly measures the intensity of motion degradation. The test set is manually altered by adding noise samples with a fixed intensity factor $\zeta$ so that it can play the role of a synthetic motion dataset with artifacts. Then, FMD score is computed between the clean test set and the altered one.

## Citation

```bibtex
@misc{maiorca2022frechetmotiondistance,
  title={Evaluating the Quality of a Synthesized Motion with the Fr'echet Motion Distance},
  author={Maiorca et al. (2022)},
  year={2022},
  note={arXiv:2204.12318}
}
```

- arXiv: 2204.12318

