omnifall-eval
OmniFall: A Unified Staged-to-Wild Benchmark for Human Fall Detection — Schneider et al. (2025) (arXiv:2505.19889, 2025)
What this evaluates
Evaluates human fall detection and action recognition capabilities across controlled (staged) and uncontrolled (wild) video domains. It probes a model's ability to classify a 10-class activity taxonomy, detect binary fall/fallen states, and segment action timelines, while measuring generalization gaps between in-distribution and out-of-distribution settings.
Datasets
- CMDFall — total ?; splits: cross-subject (-1), cross-view (-1)
- UP-Fall — total ?; splits: cross-subject (-1), cross-view (-1)
- Le2i — total ?; splits: cross-subject (-1), cross-view (-1)
- GMDCSA24 — total ?; splits: cross-subject (-1), cross-view (-1)
- EDF — total ?; splits: cross-subject (-1), cross-view (-1)
- OCCU — total ?; splits: cross-subject (-1), cross-view (-1)
- CaucaFall — total ?; splits: cross-subject (-1), cross-view (-1)
- MCFD — total ?; splits: cross-subject (-1), cross-view (-1)
- OOPS-Fall — total ?; splits: cross-subject (-1), cross-view (-1)
Metrics
Balanced Accuracy (primary) — range: [0, 1]
- The average of sensitivity (recall) and specificity across classes. Computed as (TP/(TP+FN) + TN/(TN+FP)) / 2.
Macro F1 (primary) — range: [0, 1]
- The unweighted mean of F1-scores calculated independently for each of the 10 activity classes.
Sensitivity — range: [0, 1]
- True positive rate for the positive class (e.g., fall or fallen). Calculated as TP / (TP + FN).
Specificity — range: [0, 1]
- True negative rate for the negative class. Calculated as TN / (TN + FP).
F1-score — range: [0, 1]
- Harmonic mean of precision and recall for binary fall/fallen detection. Calculated as 2 * TP / (2 * TP + FP + FN).
Segmental F1@25 — range: [0, 1]
- Segmental F1 score computed at an Intersection-over-Union (IoU) threshold of 25% between predicted and ground-truth action segments.
Edit Distance — range: [0, 1]
- Normalized edit distance measuring the minimum number of insertions, deletions, and substitutions required to transform the predicted label sequence into the ground truth.
Input / output format
Input: Video sequences (raw frames or pre-extracted I3D/VideoMAE features, downsampled to 10 fps for segmentation). Features are processed as temporal sequences (e.g., 18 tokens) with sinusoidal position encodings.
Output: Class labels (10-class taxonomy or binary fall/fallen/combined) and temporal segment boundaries for timeline segmentation.
Scoring recipe
def compute_classification_metrics(y_true, y_pred, classes):
tp = sum((y_true == c) & (y_pred == c) for c in classes)
fp = sum((y_true != c) & (y_pred == c) for c in classes)
fn = sum((y_true == c) & (y_pred != c) for c in classes)
tn = sum((y_true != c) & (y_pred != c) for c in classes)
sensitivity = tp / (tp + fn) if (tp + fn) > 0 else 0
specificity = tn / (tn + fp) if (tn + fp) > 0 else 0
f1 = 2 * tp / (2 * tp + fp + fn) if (2 * tp + fp + fn) > 0 else 0
balanced_acc = (sensitivity + specificity) / 2
return balanced_acc, f1, sensitivity, specificity
def compute_segmental_f1(pred_segments, gt_segments, iou_thresh=0.25):
# Match predicted and ground-truth segments by IoU >= threshold
# Compute precision, recall, and F1 over matched segments
pass
Common pitfalls
- Confusing cross-subject (CS) and cross-view (CV) evaluation splits, which differ significantly in training corpus size and generalization behavior.
- Overlooking the staged-to-wild domain shift: models often maintain high specificity on OOPS-Fall but suffer drastic sensitivity drops due to overfitting to staged appearance cues.
- Ignoring the two-level weighting strategy (dataset balancing and label-smoothed cross-entropy) required to handle severe class and domain imbalance during training.
Evidence (verbatim from paper)
We perform separate training runs for cross-subject and cross-view evaluations, reporting balanced accuracy, overall accuracy, and macro-F1 for the 10-class task, plus sensitivity, specificity and F1-score for binary fall detection subtasks.
Citation
@misc{schneider2025omnifall,
title={OmniFall: A Unified Staged-to-Wild Benchmark for Human Fall Detection},
author={Schneider et al. (2025)},
year={2025},
note={arXiv:2505.19889}
}
1---2name: omnifall-eval3description: Evaluates human fall detection and action recognition capabilities across controlled (staged) and uncontrolled (wild) video domains. It probes a model's ability to classify a 10-class activity taxonomy, detect binary fall/fallen states, and segment action timelines, while measuring generalization gaps between in-distribution and out-of-distribution settings. Use when the user wants to benchmark on CMDFall, UP-Fall, Le2i, GMDCSA24, EDF, OCCU, CaucaFall, MCFD, OOPS-Fall, or asks about evaluating this task. Reports Balanced Accuracy, Macro F1.4---56# omnifall-eval78> OmniFall: A Unified Staged-to-Wild Benchmark for Human Fall Detection — Schneider et al. (2025) (arXiv:2505.19889, 2025)910## What this evaluates1112Evaluates human fall detection and action recognition capabilities across controlled (staged) and uncontrolled (wild) video domains. It probes a model's ability to classify a 10-class activity taxonomy, detect binary fall/fallen states, and segment action timelines, while measuring generalization gaps between in-distribution and out-of-distribution settings.1314## Datasets1516- **CMDFall** — total ?; splits: cross-subject (-1), cross-view (-1)17- **UP-Fall** — total ?; splits: cross-subject (-1), cross-view (-1)18- **Le2i** — total ?; splits: cross-subject (-1), cross-view (-1)19- **GMDCSA24** — total ?; splits: cross-subject (-1), cross-view (-1)20- **EDF** — total ?; splits: cross-subject (-1), cross-view (-1)21- **OCCU** — total ?; splits: cross-subject (-1), cross-view (-1)22- **CaucaFall** — total ?; splits: cross-subject (-1), cross-view (-1)23- **MCFD** — total ?; splits: cross-subject (-1), cross-view (-1)24- **OOPS-Fall** — total ?; splits: cross-subject (-1), cross-view (-1)2526## Metrics2728- `Balanced Accuracy` **(primary)** — range: [0, 1]29 - The average of sensitivity (recall) and specificity across classes. Computed as (TP/(TP+FN) + TN/(TN+FP)) / 2.30- `Macro F1` **(primary)** — range: [0, 1]31 - The unweighted mean of F1-scores calculated independently for each of the 10 activity classes.32- `Sensitivity` — range: [0, 1]33 - True positive rate for the positive class (e.g., fall or fallen). Calculated as TP / (TP + FN).34- `Specificity` — range: [0, 1]35 - True negative rate for the negative class. Calculated as TN / (TN + FP).36- `F1-score` — range: [0, 1]37 - Harmonic mean of precision and recall for binary fall/fallen detection. Calculated as 2 * TP / (2 * TP + FP + FN).38- `Segmental F1@25` — range: [0, 1]39 - Segmental F1 score computed at an Intersection-over-Union (IoU) threshold of 25% between predicted and ground-truth action segments.40- `Edit Distance` — range: [0, 1]41 - Normalized edit distance measuring the minimum number of insertions, deletions, and substitutions required to transform the predicted label sequence into the ground truth.4243## Input / output format4445**Input**: Video sequences (raw frames or pre-extracted I3D/VideoMAE features, downsampled to 10 fps for segmentation). Features are processed as temporal sequences (e.g., 18 tokens) with sinusoidal position encodings.4647**Output**: Class labels (10-class taxonomy or binary fall/fallen/combined) and temporal segment boundaries for timeline segmentation.4849## Scoring recipe5051```python52def compute_classification_metrics(y_true, y_pred, classes):53 tp = sum((y_true == c) & (y_pred == c) for c in classes)54 fp = sum((y_true != c) & (y_pred == c) for c in classes)55 fn = sum((y_true == c) & (y_pred != c) for c in classes)56 tn = sum((y_true != c) & (y_pred != c) for c in classes)57 58 sensitivity = tp / (tp + fn) if (tp + fn) > 0 else 059 specificity = tn / (tn + fp) if (tn + fp) > 0 else 060 f1 = 2 * tp / (2 * tp + fp + fn) if (2 * tp + fp + fn) > 0 else 061 balanced_acc = (sensitivity + specificity) / 262 63 return balanced_acc, f1, sensitivity, specificity6465def compute_segmental_f1(pred_segments, gt_segments, iou_thresh=0.25):66 # Match predicted and ground-truth segments by IoU >= threshold67 # Compute precision, recall, and F1 over matched segments68 pass69```7071## Common pitfalls7273- Confusing cross-subject (CS) and cross-view (CV) evaluation splits, which differ significantly in training corpus size and generalization behavior.74- Overlooking the staged-to-wild domain shift: models often maintain high specificity on OOPS-Fall but suffer drastic sensitivity drops due to overfitting to staged appearance cues.75- Ignoring the two-level weighting strategy (dataset balancing and label-smoothed cross-entropy) required to handle severe class and domain imbalance during training.7677## Evidence (verbatim from paper)7879> We perform separate training runs for cross-subject and cross-view evaluations, reporting balanced accuracy, overall accuracy, and macro-F1 for the 10-class task, plus sensitivity, specificity and F1-score for binary fall detection subtasks.8081## Citation8283```bibtex84@misc{schneider2025omnifall,85 title={OmniFall: A Unified Staged-to-Wild Benchmark for Human Fall Detection},86 author={Schneider et al. (2025)},87 year={2025},88 note={arXiv:2505.19889}89}90```9192- arXiv: 2505.19889