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
|[ByteTrack](https://arxiv.org/abs/2110.06864)| Two-stage association using high and low confidence detections. | 60.1 | 59.1 |**73.0**|**84.0**| 50.2 |
83
-
|[OC-SORT](https://arxiv.org/abs/2203.14360)| Observation-centric recovery for lost tracks. |**61.9**| 57.9 | 71.7 | 78.4 |**51.8**|
83
+
|[OC-SORT](https://arxiv.org/abs/2203.14360)| Observation-centric recovery for lost tracks. |**61.9**|**58.9**| 71.7 | 78.4 |**51.8**|
84
84
85
85
For detailed benchmarks and tuned configurations, see the [tracker comparison](https://trackers.roboflow.com/develop/trackers/comparison/).
> SDP is stronger than FRCNN — expect single-sequence defaults around 60–65 HOTA on MOT17-04, but the 7-sequence Optuna average is lower because the benchmark includes harder sequences that pull the mean down.
139
139
@@ -303,6 +303,107 @@ xcycsr 7D Kalman state (−1.2%), anisotropic Q matrix (−0.5%), EMA position b
xcycsr Kalman state representation (−0.51%), velocity-adaptive Q scaling (−0.06%), Mahalanobis distance gate (regression), GIoU as association metric (regression), OC-SORT velocity correction duplicate (reverted).
344
+
345
+
#### Key lesson
346
+
347
+
**A single calibration wave** (aligning defaults with the Optuna best, `ce69432`) accounted for +1.18% — the single largest step in the campaign. Each individual code feature added only 0.17–1.22% on its own, but together they created 8 new tunable dimensions that Optuna could jointly exploit.
-**Gap interpolation** (i1) — post-processing pass that linearly interpolates tracklet positions across gaps up to `max_interpolation_gap` frames. Infrastructure already existed in `optimize_tracking.py`; only `default_config.json` needed updating.
374
+
-**Kalman Q/R/P scalars** (i2) — expose global multipliers for the noise matrices to Optuna, replacing hardcoded paper defaults. No change at default params (multipliers=1); creates Optuna headroom.
375
+
-**Codex param promotion** (i2-codex) — after the i2 guard's 500-trial run found HOTA=58.525, Codex co-pilot promoted the full-precision Optuna best into `default_config.json`. Largest single step in the campaign.
376
+
-**DIoU** (i3) — replaced `sv.box_iou_batch` with `_compute_diou_matrix` in both OCM stage (`ocsort/utils.py`) and OCR stage (`tracker.py`). DIoU penalises centre distance, recovering near-miss associations. Registered as a slight regression at 1-trial defaults (−0.28 HOTA) but within guard tolerance; kept because Optuna later recovered and surpassed with tuned DIoU threshold.
377
+
-**conf_cost_weight** (i4) — confidence boost in Hungarian cost matrix: `cost *= (1 + w × conf)`. Higher-confidence detections win ties; gate check uses raw IoU.
378
+
-**iou_age_weight** (i5) — age discount for stale lost tracks in stage-1 solver: `cost *= 1/(1 + w × max(0, t−1))`. Pushes long-lost tracks to OCR recovery, keeps stage-1 for recently-seen tracks. Creates Optuna headroom.
379
+
-**p_reset_threshold** (i6) — after a gap ≥ threshold frames, reset covariance P to identity on re-detection, discarding stale accumulated uncertainty. Creates Optuna headroom.
380
+
-**velocity_decay + q_miss_alpha** (i7) — during missed frames: attenuate velocity components by `velocity_decay` and inflate Q by `(1 + alpha × t)`. Reduces prediction drift during occlusion. Optuna found velocity_decay=0.926, q_miss_alpha=0.512.
381
+
382
+
</details>
383
+
384
+
#### Code features added
385
+
386
+
All features are in `trackers/core/ocsort/tracker.py` + `tracklet.py` and wired through `optimize_tracking.py`:
Two Codex co-pilot passes hit transient guard failures (sort HOTA output missing during parallel 500-trial runs) and were reverted; neither represented a real code regression — re-runs passed. No algorithmic hypotheses were reverted.
400
+
401
+
#### Key lesson
402
+
403
+
**`direction_consistency_weight` is near-useless on SDP**: Optuna converged to 0.0006 (essentially zero) for the OCM direction signal. Confidence-based assignment (`conf_cost_weight` = 0.97) proved far more effective as a tiebreaker. The Codex param-promotion step (i2-codex, +5.71%) shows how much headroom existed in the pre-campaign hyperparameters — a single calibration wave after exposing Kalman scalars to Optuna captured the majority of the total gain.
404
+
405
+
---
406
+
306
407
## Target analysis
307
408
308
409
The ByteTrack Phase 2 campaign target of HOTA = 68.0 requires real architectural improvements, not parameter search — Optuna alone on FRCNN detections plateaus around 52–53.
#### Tuned best config (ocsort/sdp, 500 trials, HOTA=58.905)
237
+
238
+
```json
239
+
{
240
+
"lost_track_buffer": 74,
241
+
"minimum_consecutive_frames": 1,
242
+
"minimum_iou_threshold": 0.1488,
243
+
"direction_consistency_weight": 0.000618,
244
+
"high_conf_det_threshold": 0.6876,
245
+
"delta_t": 1,
246
+
"max_interpolation_gap": 42,
247
+
"q_scale": 0.7203,
248
+
"r_scale": 1.1889,
249
+
"p_scale": 0.0952,
250
+
"conf_cost_weight": 0.9699,
251
+
"iou_age_weight": 0.4279,
252
+
"p_reset_threshold": 8,
253
+
"velocity_decay": 0.926,
254
+
"q_miss_alpha": 0.5123
255
+
}
256
+
```
257
+
216
258
### Agent warning — Kalman patch and state representation
217
259
218
260
`_apply_kalman_patch` in `optimize_tracking.py` overwrites Q, R, and P with uniform identity-scaled matrices. If the state representation is changed (H-A), the patch must be redesigned to work with the new state dimension and matrix structure.
0 commit comments