Repository navigation
use case event camera vision
A fully scoped production use case. Extends the reference slice in
use_case_streaming_timeseries.md; consumes the shared enablers fromproduction_toolkit_plan.md; listed in the umbrellaproduction_use_cases.md.
One-line summary. Classify asynchronous event-camera streams (gesture, eye-tracking, automotive) window-by-window on GPU/CPU with no neuromorphic chip.
What it demonstrates. The strongest near-term SNN fit: the input is spikes, so no artificial encoding is needed — an event stream is accumulated into polarity rasters, consumed natively, and served through the stateful runtime.
Design/spec only. Every claim about current code is grounded in a file/line reference so a Code-mode agent can execute this file-by-file. No implementation starts in this document.
What. Given an asynchronous stream of (x, y, polarity, t) events, produce a
class label per time window (e.g. which gesture) or a detection, with bounded
latency and a sparse compute profile, on GPU training / CPU-or-GPU inference with
no neuromorphic hardware.
Users. Robotics and automotive perception teams; HCI/gesture product teams; DVS researchers who already have recorded event data and want a served SNN.
Why SNN here. Event cameras emit sparse per-pixel changes; a conventional frame pipeline must first densify them into frames. An SNN consumes sparse events directly, so compute scales with activity, not sensor resolution.
Success criteria (SLAs).
- Quality: on DVS128 Gesture (11 classes) top-1 accuracy ≥ 0.90 and macro-F1 ≥ 0.88 with a compact SNN; on CIFAR10-DVS, accuracy above a dataset-specific floor defined at kickoff.
- Latency: p99 per-window decision under a configured budget (target: ≤ 10 ms on CPU for a small topology; GPU for the larger variant).
- Sparsity: reported input spike density and per-stage sparsity recorded per run.
- Zero hardware: recorded-stream replay on CPU/GPU; no DVS camera required.
flowchart LR
A[Recorded event stream] --> B[Event to polarity raster]
B --> C[Time-window sampler]
C --> D[Encoding contract]
D --> E[Stateful InferenceSession]
E --> F[Gesture or detection head]
E --> G[DeploymentBundle]
G --> E
F --> H[spikeforge-serve predict and stream]
H --> I[spikeforge-clients SDK]
H --> J[Prometheus metrics]
K[spikeforge-io replay harness] --> H
L[Offline training] --> G
-
Sources: DVS128 Gesture and CIFAR10-DVS public event datasets
(
event_datasets.md), plus a deterministic synthetic event generator for CI (parallelingsynthetic.py). -
Contract: events
(x, y, p, t)are accumulated into[T, 2, H, W]polarity rasters overTslice windows with a frozen slice width; train-fitted normalization and the raster geometry live inpreprocessing.jsonin the bundle. -
Repo fit: event loading and the polarity raster live in
spikeforge/events/(event_sample.py,event_bridge.py); replay belongs tospikeforge-io(replay.py).
-
Primary coding: identity / event-native — the raster is already binary,
so the "encoder" is the raster builder; where a coded path is needed,
rateover the slice is the documented fallback. A frozenEncodeSpecrecords whichever path is used so the bundle stays self-describing. -
Input shape:
[T, 2, H, W], matching the event raster contract and the simulator's[T, …]loop.
-
Topology:
dvs128_gesturepreset for the small path;builder.pyfor a compact convolutional spiking net; declared once as aTopologySpec. - Head: softmax classifier over gesture classes; a detection variant swaps the head for a per-window score.
-
Reuse:
TrainingEngine, surrogate gradients, BPTT over event slices (checkpoint_mixin.py).
- Top-1 accuracy / macro-F1 / per-class recall on the held-out event split.
-
Event-native metrics: input spike density, per-stage spike sparsity, and
parity of readout vs spikes through the simulator (default tolerances from
rewrite_drift.py). - Validation: NIR drift (
within_tolerance) and determinism (determinism.py); manifest per run (manifest.py).
-
model.spkfwithmanifest.json,weights.pt,encode_config.json,preprocessing.json(raster geometry + slice width),graph.nir.json, checksums/signature. - Anchors:
bundle.py,bundle_manifest.py.
-
InferenceSession.load(bundle),.reset(),.step(frame) -> Prediction,.run_stream(frames); carried membrane state viaStateTreeso a gesture can span windows. - Shares the per-step body with the closed loop
(
step.py).
-
spikeforge-serve:POST /v1/predict,POST /v1/reset,GET|WS /v1/stream,GET /health,GET /metrics,GET /v1/bundle(app.py,service.py). - Session ids per recording/camera; bounded batching; concurrency cap; auth; stream backpressure for continuous event feeds.
-
spikeforge-clientsSDKs drivepredict/stream(client.py). - A recorded-stream replay harness in
spikeforge-iofeeds a stored event file into/v1/streamdeterministically (replay.py,adapters.py). A live DVS-camera adapter is optional (W7) and out of the MVP.
- Prometheus over the registry (
registry.py): latency histogram, throughput, queue depth, per-stage spike sparsity, class score distribution. - Serving benchmark p50/p99, throughput at concurrency N, cold start, peak
memory, wired into the regression gate
(
compare.py).
- Optional structured prune of spiking conv channels via
pruning.pyplus weight-only quantization (quantize.py); drift fromPruningReportrecorded in the bundle.
- Test-deploy the compact conv spiking net on
reference,norse, andlava_loihi2(CPU emulator) with a parity report (test_deploy.py);estimate: trueeverywhere andavailable: falsewith a reason when an SDK is absent.
| Phase | Deliverable | Depends on | Acceptance |
|---|---|---|---|
| P0 | Event dataset adapter + synthetic generator + frozen raster spec | — | raster reproducible; geometry frozen |
| P1 |
dvs128_gesture/conv topology trained; metrics + manifest |
P0 | accuracy ≥ 0.90 / macro-F1 ≥ 0.88; NIR validates |
| P2 |
InferenceSession over event slices + tests |
W1 | streaming readout == closed-loop run within tolerance |
| P3 |
DeploymentBundle export/import + tamper check |
W1 | fresh-process rebuild is exact; tamper is refused |
| P4 |
spikeforge-serve /predict + /stream + /reset
|
W2, W3 | parity with in-process; state persists across slices |
| P5 |
/metrics, serving benchmark, sparsity + latency CI gate |
W6 | p99 within budget; sparsity recorded in CI |
| P6 | Replay harness in CI, container, promotion/rollback, drift | W7 | replay reproduces a stored recording exactly |
MVP = P0–P4. That is the smallest end-to-end slice that demonstrates the chip-less DVS story.
Depends on: PT-W1/W2 (released spikeforge/serving/ + frozen
EncodeSpec); PT-W3 spikeforge-serve;
PT-W6 observability + serving benchmarks; PT-W7 I/O adapters (replay; live-camera
adapter optional). Tracked by umbrella issue #12; reference implementation UC-1
(released in spikeforge 0.3.0).
Out of scope: live DVS camera drivers and SDKs (optional W7); measured power
(estimate: true); full temporal ONNX (NIR is the temporal graph); automotive
safety certification.
| Risk | Mitigation |
|---|---|
| Raster geometry mismatch train vs serve | freeze geometry in preprocessing.json; raster builder is the single call site |
| Large event datasets overwhelm CI | keep the synthetic generator as the CI fixture; use a subset for the public adapter |
| Sparse conv lowering past linear chains | start with reference+norse; broaden Lava lowering as W-track work |
| Latency vs accuracy trade-off | two presets (small/large) with per-preset budgets |
-
Title:
[UC-3] Event-camera (DVS) vision -
Labels:
enhancement,architecture -
Body: see
plans/use_case_event_camera_vision.md— goal, reference architecture (event raster →InferenceSession→ gesture head →spikeforge-serve→ clients/io →/metrics), event-native encoding,dvs128_gesture/conv topology, acceptance (DVS128 Gesture accuracy ≥ 0.90, macro-F1 ≥ 0.88, p99 ≤ 10 ms on CPU), MVP phases P0–P4, dependencies PT-W3/W6/W7.
- Home
- Architecture
- Backend Execution
- Benchmarks
- Dashboard
- Development
- Event Datasets
- Event Runtime And Energy
- Features
- Implications And Boundaries
- Interop Foldins
- Interpreter Spine
- Introspection
- Model Deployment
- Model Hub
- Notes
- Operational Maturity
- Production Workflows
- Project Layout
- Quickstart
- Requirements
- Sequence Primitives
- Streaming Timeseries
- Targets And Interop
- Usage
- Arch 0001 Adr Repo Topology
- Arch 0001 Core Boundary
- Arch 0001 Decision Metrics
- Arch 0001 Migration Plan
- Arch 0001 Packaging Versioning
- Arch 0001 Protocol Contract
- Arch 0001 Risk Register
- Arch 0001 Target Topology
- Backend Execution Plan
- Ecosystem Listings
- Ecosystem Roadmap
- Event Runtime Plan
- Hub Expansion Plan
- Plans
- Interop Foldins Plan
- Interpreter Spine Plan
- Memory System Research
- Model Hub Plan
- Operations Plan
- Production Toolkit Plan
- Production Use Cases
- Professional Roadmap
- Repo Topology Plan
- Sequence Primitives Plan
- Use Case Audio Keyword Spotting
- Use Case Biosignal Medical Monitoring
- Use Case Computational Neuroscience
- Use Case Edge Power Budgets
- Use Case Event Camera Vision
- Use Case Intrusion Anomaly Detection
- Use Case Low Latency Sensor Stream
- Use Case Rl Control Robotics
- Use Case Spiking Transformers
- Use Case Streaming Timeseries