Spaces:
Paused
Download docs/prd/vitis-isp-preprocessing.md from whassan/SensorflowStudio: direct link, hf CLI and curl.
- Browser
- Download file 5.86 kB
-
https://huggingface.co/spaces/whassan/SensorflowStudio/resolve/main/docs/prd/vitis-isp-preprocessing.md
- Command line
-
hf download hf://spaces/whassan/SensorflowStudio/docs/prd/vitis-isp-preprocessing.md
-
curl -L -o vitis-isp-preprocessing.md https://huggingface.co/spaces/whassan/SensorflowStudio/resolve/main/docs/prd/vitis-isp-preprocessing.md
PRD: Accelerated ISP + Synthetic Edge-Case Generation
Feature Name: Accelerated ISP Preprocessing & Synthetic Edge-Case Generation
Package: sensorflow/vitis (isp.py, augment.py) — API under
/api/vitis/isp/* and /api/vitis/augment/*
Status: Implemented on the emulated backend. No FPGA hardware is attached;
all FPGA throughput figures are analytically modeled and labeled
modeled_not_measured: true.
Value Proposition
Two problems, one accelerator. First, ISP pipelines (bad-pixel correction → demosaic → HDR tone-map → gain → denoise → resize) are the earliest place a hardware port silently degrades a perception stack — this feature runs the composable ISP on the reference and Vitis-constrained paths simultaneously and reports PSNR/SSIM per stage, so the exact stage where fixed-point or streaming constraints bite is visible, alongside a measured-CPU vs modeled-FPGA throughput comparison that quantifies the acceleration case. Second, the same accelerated op library mints rare-edge-case evaluation data at scale: parameterized sensor-noise/low-light/HDR/distortion/blur/glare augmentations generate stress variants of evaluation frames with complete lineage, guarded as evaluation-only so synthetic stress data can never leak into training.
Architecture & Workflow
+-----------------------------------------------------------------+
| Cloud evaluation platform |
| evaluation/megaeval record store raremine scene bank |
| (eval-set supplements, lineage, (candidate flow for |
| leakage guard destinations) costume-ped variants) |
+--------------------^--------------------------------^-----------+
| eval-only variant records | candidates
| (full lineage, protected) | (try/except)
+--------------------+--------------------------------+-----------+
| sensorflow/vitis: ISP + augment |
| |
| RAW Bayer -> bad_pixel -> demosaic -> tone_map -> gain |
| -> denoise -> resize (per-stage PSNR/SSIM) |
| |
| +----------------+ +-------------------------------+ |
| | reference CPU | vs | vitis_emulated (ap_fixed<W,I>,| |
| | float32 | | XFCVDEPTH, LUT div/sqrt, | |
| +----------------+ | modeled pixels/cycle @ MHz) | |
| +---------------+---------------+ |
| | << EMULATION |
| +---------------+---------------+ |
| | (future) vitis_hw: xf::cv ISP | |
| | kernels on real PL, measured | |
| | throughput via XRT profiling | |
| +-------------------------------+ |
+------------------------------------------------------------------+
| runs/vitis/{isp,augment}/*.json
v
dashboard (stage chain, throughput, gallery)
Key Metrics Tracked
From POST /api/vitis/isp/run:
stage_report[].psnr_db,stage_report[].ssim— emulated vs reference, per stagestage_report[].measured_cpu_ms,stage_report[].modeled_fpga_ms,stage_report[].modeled_speedup_x,stage_report[].modeled_placement(PL/AIE)throughput.measured_cpu_fps,throughput.modeled_fpga_fps_pipelined(dataflow overlap: 1 / max stage latency),throughput.modeled_speedup_x_serial— all modeled fields flaggedmodeled_not_measuredsummary.min_stage_psnr_db— the weakest stage at the configured bit-width
From POST /api/vitis/augment/generate and GET /api/vitis/augment/variants:
- per-variant
lineage(recipe with resolved params, seed, source frame, backend config),evaluation_only: true,training_eligible: false,recommended_dataset_destination: REGRESSION_EVALUATION_SET raremine_hook.routed_candidates(or the documented fallback note whensensorflow.raremineis not importable)
Rollout
- Emulated (now): tune stage order, bit-widths, and augmentation recipes against per-stage PSNR; mint evaluation-only stress sets.
- HIL bench: synthesize the ISP as an xf::cv dataflow pipeline, replace modeled latencies with XRT-profiled measurements, and validate that per-stage PSNR on silicon matches the emulator within its documented error bounds.
- Fleet: run augmentation generation as a batch service against real fleet evaluation frames; generated variants flow into the protected evaluation destinations with the same lineage records.
Risks
- Modeled throughput is not a benchmark. pixels/cycle × clock is an
upper bound that ignores memory bandwidth, AXI stalls, and resource
contention. Every figure carries
modeled_not_measured; stage-2 exists precisely to replace them. - Leakage. Synthetic stress variants in training would corrupt the
regression signal the variants exist to protect. Records default to
training_eligible: falseand a protected destination; consumers must respect the flag (enforced convention, mirrored from raremine'sPROTECTED_EVAL_DESTINATIONS). - Schematic realism. Variants derive from schematic BEV renders, not camera frames. The recipes and lineage plumbing are production-shaped; the pixels are placeholders until real frames are wired in.
- In-progress raremine API. The candidate-routing hook degrades to a no-op with a note if the raremine package changes shape mid-flight.