You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Measures trajectory smoothness via RMS jerk and acceleration variance, computed from both tracker outputs and ground-truth tracks. Supports GT and ratio variants to isolate tracker-added jitter from dataset-inherent jitter.
71
+
66
72
Multiple evaluators can be configured in a single YAML pipeline; each runs independently against the same tracker outputs and writes results to its own subfolder under the run output directory.
67
73
68
74
Check `evaluators/README.md` for more details
@@ -75,6 +81,8 @@ Check `evaluators/README.md` for more details
|`TrackEvalEvaluator`| HOTA, MOTA, IDF1, and more | Industry-standard tracking accuracy metrics via the TrackEval library |
150
+
|`DiagnosticEvaluator`|`LOC_T_X`, `LOC_T_Y`, `DIST_T` → summary scalars: `DIST_T_mean`, `LOC_T_X_mae`, `LOC_T_Y_mae`, `num_matches`| Per-frame location and distance error between matched tracker output tracks and ground-truth tracks; uses bipartite (Hungarian) assignment over overlapping frames |
151
+
|`JitterEvaluator`|`rms_jerk`, `rms_jerk_gt`, `rms_jerk_ratio`, `acceleration_variance`, `acceleration_variance_gt`, `acceleration_variance_ratio`| Trajectory smoothness metrics based on numerical differentiation of 3D positions; GT and ratio variants allow comparing tracker-added jitter against test-data jitter |
152
+
131
153
## Canonical Data Formats
132
154
133
155
The pipeline uses standardized data formats defined by JSON schemas to enable interoperability between components. All implementations must conform to these canonical formats.
@@ -249,7 +271,7 @@ pytest . -v -m integration
249
271
pytest tests/ -v # Integration tests
250
272
pytest datasets/tests/ -v # Dataset unit tests
251
273
pytest harnesses/tests/ -v # Harness unit tests
252
-
pytest evaluators/tests/ -v # Evaluators unit tests
274
+
pytest evaluators/tests/ -v # Evaluators unit tests
**Tests**: See [tests/test_diagnostic_evaluator.py](tests/test_diagnostic_evaluator.py) for unit tests covering track matching, scalar metrics, CSV output, and reset workflows.
148
148
149
+
### JitterEvaluator
150
+
151
+
**Purpose**: Evaluate tracker smoothness by measuring positional jitter in tracked object trajectories, and compare it against jitter already present in the ground-truth test data.
152
+
153
+
**Status**: **FULLY IMPLEMENTED** — Computes RMS jerk and acceleration variance from both tracker outputs and ground-truth tracks using numerical differentiation.
Comparing `rms_jerk` with `rms_jerk_gt` shows how much jitter the tracker
167
+
adds on top of any jitter already present in the test data.
168
+
169
+
**Algorithm**:
170
+
171
+
All metrics are derived by applying three sequential layers of forward finite differences to 3D positions, accounting for variable time steps between frames:
-**rms_jerk / rms_jerk_gt**: $\sqrt{\frac{1}{N}\sum |j_i|^2}$ over all jerk samples from all tracks.
176
+
-**acceleration_variance / acceleration_variance_gt**: $\text{Var}(|a_i|)$ over all acceleration magnitude samples from all tracks.
177
+
-**rms_jerk_ratio / acceleration_variance_ratio**: tracker metric divided by the corresponding GT metric. Returns 0.0 when the GT denominator is zero. Values >1.0 indicate the tracker adds more jitter than is inherent in the ground truth.
178
+
179
+
Minimum track length: 3 points for acceleration, 4 points for jerk. Shorter tracks are skipped; if no eligible tracks exist, the metric returns 0.0.
180
+
181
+
For GT metrics, ground-truth frame numbers are converted to relative timestamps using the FPS derived from the tracker output.
182
+
183
+
**Key Features**:
184
+
185
+
- Builds per-track position histories from canonical tracker output format.
186
+
- Parses MOTChallenge 3D CSV ground-truth file for GT metric computation.
187
+
- Supports variable frame rates — time deltas are computed from actual timestamps.
188
+
- Deduplicates frames with identical timestamps (mirrors `TrackEvalEvaluator` behaviour).
189
+
- Sorts each track's positions by timestamp before metric computation.
190
+
- Saves a plain-text `jitter_results.txt` summary to the configured output folder.
191
+
192
+
**Usage Example**:
193
+
194
+
```python
195
+
from pathlib import Path
196
+
from evaluators.jitter_evaluator import JitterEvaluator
0 commit comments