# Optical Flow Epe Eval

> Evaluates the accuracy of predicted optical flow fields against ground truth displacements between consecutive video frames. It probes a model's ability to handle occlusions, non-rigid motion, and large displacements in both synthetic and real-world driving scenarios. Use when the user wants to benchmark on Sintel, KITTI 2012, or asks about evaluating this task. Reports end point error.

- Skill: `qhjqhj00/optical-flow-epe-eval` (Agent Skill)
- Install (CLI): `npx skillmds add qhjqhj00/optical-flow-epe-eval`
- Raw SKILL.md: https://api.skillmd.com/api/skills/qhjqhj00/optical-flow-epe-eval/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: qhjqhj00 (https://skillmd.com/u/qhjqhj00)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/qhjqhj00/optical-flow-epe-eval

---


# optical-flow-epe-eval

> OAS-Net: Occlusion Aware Sampling Network for Accurate Optical Flow — Kong et al. (2021) (arXiv:2102.00364, 2021)

## What this evaluates

Evaluates the accuracy of predicted optical flow fields against ground truth displacements between consecutive video frames. It probes a model's ability to handle occlusions, non-rigid motion, and large displacements in both synthetic and real-world driving scenarios.

## Datasets

- **Sintel** — total ?; splits: train (-1), test (-1), clean (-1), final (-1)
- **KITTI 2012** — total ?; splits: train (-1), test (-1)

## Metrics

- `end point error` **(primary)** — range: other (pixels)
  - Computes the L2 distance between the predicted flow vector and the ground truth flow vector for each pixel, then averages over all valid pixels. Lower values indicate better accuracy.

## Input / output format

**Input**: Pairs of consecutive frames (images) from a video sequence.

**Output**: A 2D optical flow field (H × W × 2 displacement map) and an occlusion awareness map (H × W).

## Scoring recipe

```python
def compute_epe(pred_flow, gt_flow, valid_mask=None):
    diff = pred_flow - gt_flow
    epe_per_pixel = torch.sqrt(torch.sum(diff**2, dim=-1))
    if valid_mask is not None:
        epe_per_pixel = epe_per_pixel[valid_mask]
    return epe_per_pixel.mean().item()
```

## Common pitfalls

- EPE is a lower-is-better metric; confusing it with accuracy (higher-is-better) leads to incorrect model selection.
- Sintel has 'Clean' and 'Final' test splits with different noise levels and motion characteristics; results must be reported separately.
- KITTI 2012 and KITTI 2015 use different training/test splits and evaluation protocols; mixing them invalidates comparisons.

## Evidence (verbatim from paper)

> Optical flow accuracy is measured by end point error.

## Citation

```bibtex
@misc{kong2021oasnet,
  title={OAS-Net: Occlusion Aware Sampling Network for Accurate Optical Flow},
  author={Kong et al. (2021)},
  year={2021},
  note={arXiv:2102.00364}
}
```

- arXiv: 2102.00364

