Real-time-isl-command-recognition / docs /evaluation_artifact_map.md
NAAZ1605's picture
Prepare ISL command recognition project
e2d95ed
|
Raw History Blame Contribute Delete
3.7 kB
# Evaluation artefacts
This folder documents **how** the project is evaluated; the measured outputs live in
`results/` (so that they stay next to the plots and CSVs the app serves).
## Protocol in one page
1. **Split first, everything else second.** The split is fixed and cached before any
model sees data (`datasets/metadata/index_<protocol>.csv`).
* `session_disjoint` (primary): pools the full INCLUDE-50 pool, allocates whole
recording clusters to one split → 652 train / 152 val / **154 test**, 0 of 299
clusters spanning a split, all 50 classes in every split.
* `official`: AI4Bharat's own train/test files + a seeded, class-stratified,
session-aware validation carve-out → 686 / 80 / 192; **199 of 299 clusters span
the split**, so it is reported as leaking.
2. **One preprocessing for everyone.** `training/preprocess.py` writes
`sequences_<protocol>.npz`; the three training scripts read the same file.
3. **Identical training conditions.** Same seed, augmentation, callbacks, epochs,
batch size, loss, label smoothing. Each run writes
`class_mapping.json`, `preprocessing_config.json`, `training_history.json`.
4. **Frozen evaluation.** `training/evaluate_models.py` scores `X_test` with no
test-time augmentation and computes accuracy, macro/weighted P/R/F1, per-class
metrics, confusion matrices, parameter counts and single-clip latency.
5. **Perturbation study.** `training/robustness.py` applies 14 conditions to the same
frozen tensors and pushes them through the real models.
6. **Gate study.** `training/tune_threshold.py` sweeps the confidence threshold and
reports coverage vs selective accuracy (the shipped 0.70 is a starting point, not a
proven optimum).
## Where each number comes from
| question | artefact | command |
|---|---|---|
| how good is each model on the leak-free split? | `results/summary_metrics.csv`, `results/per_class_comparison.csv`, `results/confusion_*.png`, `results/model_comparison.png` | `python training/evaluate_models.py` |
| how much does the official split inflate? | `results/summary_metrics_official.csv`, `results/evaluation_summary_official.json` | `python training/evaluate_models.py --protocol official` |
| which classes fail, and how? | `results/per_class_comparison.csv`, `evaluation_summary_<protocol>.json` (top confusions, weakest/strongest classes) | same as above |
| how fast is inference? | `results/latency_comparison.png`, `latency_ms_*`, `throughput_fps` in `summary_metrics.csv` | same as above |
| what breaks the models? | `results/robustness_results.csv`, `results/robustness_degradation.png` | `python training/robustness.py` (both protocols) |
| what does the confidence gate cost? | `results/threshold_sweep.csv`, `results/threshold_sweep.png` | `python training/tune_threshold.py` |
| how live behaviour is verified | `tests/test_inference.py` (gate, smoothing, stability, duplicate suppression, TTS-failure safety) | `python -m pytest tests/test_inference.py -v` |
## Reporting rules used in this project
* Every number is produced by a run in this repository; nothing is copied from the
literature or estimated. Where the original paper reports ≈94.5% for INCLUDE-50, this
README states only the difference between the two protocols *measured here*.
* Baseline and proposed model are named explicitly; the comparison table is the
headline result.
* Failures are reported as prominently as successes (13 of 50 classes have zero recall
on the leak-free split; that list is in `docs/evaluation.md` §4).
* No claim is made about live-camera accuracy, unseen signers or continuous signing —
those were not measured (`docs/evaluation.md` §8).