Spaces:
Paused
Paused
|
Download docs/prd/vitis-temporal-stability.md from whassan/SensorflowStudio: direct link, hf CLI and curl.
- Browser
- Download file 6.19 kB
-
https://huggingface.co/spaces/whassan/SensorflowStudio/resolve/main/docs/prd/vitis-temporal-stability.md
- Command line
-
hf download hf://spaces/whassan/SensorflowStudio/docs/prd/vitis-temporal-stability.md
-
curl -L -o vitis-temporal-stability.md https://huggingface.co/spaces/whassan/SensorflowStudio/resolve/main/docs/prd/vitis-temporal-stability.md
6.19 kB
| # PRD: Temporal & Stereo Stability Profiling | |
| **Feature Name:** Temporal & Stereo Stability Profiling | |
| **Package:** `sensorflow/vitis` (`temporal.py`) — API under | |
| `/api/vitis/temporal/*` | |
| **Status:** Implemented on the emulated backend. No FPGA hardware is attached; | |
| the fixed-point optical-flow/stereo path runs on the constraint-faithful CPU | |
| emulator. | |
| ## Value Proposition | |
| Frame-level mAP hides the failures that hurt downstream planners: detections | |
| that flicker, boxes that jitter against real motion, tracks that fragment and | |
| swap IDs. This feature builds a MODEL-INDEPENDENT motion baseline — pyramidal | |
| dense Lucas-Kanade optical flow over the scene, an op FPGAs accelerate well — | |
| and scores every perception engine against it. Because ground truth for | |
| motion comes from the flow field rather than from any engine, the metrics | |
| expose instability without circularity, penalize engines that drop tracking | |
| where the flow proves the object stayed observable, and forgive ID switches | |
| that coincide with genuine flow discontinuities. A synthetic stereo pair | |
| derived from the exact scene geometry closes the loop on 3D: block-matching | |
| disparity is converted to metric depth and checked against scene geometry. | |
| Finally, the whole profile runs twice — float32 flow vs fixed-point flow — so | |
| the report certifies whether the accelerated metric itself can be trusted. | |
| ## Architecture & Workflow | |
| ``` | |
| +--------------------------------------------------------------------+ | |
| | Cloud evaluation platform | | |
| | bevfusion scene DB + engines engine leaderboards | | |
| | (GT tracks, planted occlusions, (stability score joins | | |
| | perception-v1 / perception-v3) accuracy metrics) | | |
| +-----------+-----------------------------------------^--------------+ | |
| | sequences + engine detections | stability report | |
| v | | |
| +-----------+-----------------------------------------+--------------+ | |
| | sensorflow/vitis/temporal.py profiler | | |
| | | | |
| | BEV rasters --> dense pyramidal LK flow --> flow-predicted | | |
| | (per backend) object positions | | |
| | | | |
| | scene geometry --> synthetic stereo pair --> SAD disparity | | |
| | --> metric depth | | |
| | | | |
| | +----------------+ +------------------------------+ | | |
| | | reference flow | meta- | vitis_emulated flow | | | |
| | | (float32) | check | (ap_fixed, LUT recip) | | | |
| | +----------------+ <-----> +--------------+---------------+ | | |
| | | << EMULATION | | |
| | +--------------+---------------+ | | |
| | | (future) vitis_hw: xf::cv | | | |
| | | pyrLK + stereoBM on PL/AIE | | | |
| | +------------------------------+ | | |
| +---------------------------------------------------------------------+ | |
| | runs/vitis/temporal/*.json | |
| v | |
| dashboard (engine comparison, cohorts, timeline strip) | |
| ``` | |
| ## Key Metrics Tracked | |
| From `POST /api/vitis/temporal/run` (per engine, per backend, with | |
| `cohorts` breakdown over day/clear, night/clear, day/rain, occluded): | |
| - `flicker_rate` — present→absent→present events on flow-continuous tracks, | |
| per opportunity | |
| - `mean_jitter` — |engine displacement − flow-predicted displacement| / | |
| (|flow displacement| + 0.5 m) | |
| - `fragmentation_per_track` — distinct engine track IDs per GT instance over | |
| flow-continuous spans, minus one | |
| - `id_switches`, `id_switches_at_flow_break`, | |
| `unexcused_id_switch_fraction` — ID switches not explained by a flow | |
| discontinuity | |
| - `stability_score` — 100 × (0.35·(1−4·flicker) + 0.25·e^(−1.5·jitter) + | |
| 0.25·(1−0.6·fragmentation) + 0.15·(1−unexcused)) | |
| - `stereo.median_abs_disparity_error_px`, `stereo.median_rel_depth_error`, | |
| `stereo.median_abs_depth_error_near_m` (near field < 30 m) | |
| - `backend_agreement.ranking_agrees`, | |
| `backend_agreement.stability_score_delta_by_engine`, | |
| `backend_agreement.max_abs_score_delta` — the trust meta-check | |
| - `timeline_sample` — per-frame detected/flow-continuous/occluded strip for | |
| the most gap-prone track (drives the dashboard timeline) | |
| ## Rollout | |
| 1. **Emulated (now):** rank engines (e.g. perception-v1-camera vs | |
| perception-v3-bevfusion) by stability; wire the score next to accuracy | |
| metrics in engine comparisons. | |
| 2. **HIL bench:** move flow + stereo to xf::cv pyrLK / stereoBM kernels on | |
| real PL/AIE via the `vitis_hw` backend; confirm `backend_agreement` | |
| holds on silicon (the emulator predicts it should — verify). | |
| 3. **Fleet:** run the profiler over recorded fleet sequences as a nightly | |
| job; alert when an engine's stability score drops or when the accelerated | |
| and reference metrics diverge (hardware fault canary). | |
| ## Risks | |
| - **Flow quality bounds metric quality.** Where flow fails (textureless | |
| regions, huge displacements), continuity is under-detected and instability | |
| is under-penalized. The residual gate (`FLOW_RESIDUAL_OK_M`) trades recall | |
| of opportunities for precision of blame. | |
| - **Schematic scenes flatter flow.** High-contrast BEV rasters are easy for | |
| LK; real imagery will lower flow coverage. Rollout stage 3 must re-tune | |
| the residual gate on real sequences. | |
| - **Stereo far-field error.** Depth error grows quadratically with range at | |
| fixed disparity error; the near-field figure is the meaningful one, and | |
| the report says so explicitly. | |
| - **Score weights are opinionated.** The 0.35/0.25/0.25/0.15 weighting is a | |
| product decision, documented in the formula above and trivially tunable; | |
| rankings should be checked for weight sensitivity before gating releases. | |