Files
wifi-densepose/rust-port/wifi-densepose-rs/docs/adr/ADR-003-neural-network-inference.md
Claude 6ed69a3d48 feat: Complete Rust port of WiFi-DensePose with modular crates
Major changes:
- Organized Python v1 implementation into v1/ subdirectory
- Created Rust workspace with 9 modular crates:
  - wifi-densepose-core: Core types, traits, errors
  - wifi-densepose-signal: CSI processing, phase sanitization, FFT
  - wifi-densepose-nn: Neural network inference (ONNX/Candle/tch)
  - wifi-densepose-api: Axum-based REST/WebSocket API
  - wifi-densepose-db: SQLx database layer
  - wifi-densepose-config: Configuration management
  - wifi-densepose-hardware: Hardware abstraction
  - wifi-densepose-wasm: WebAssembly bindings
  - wifi-densepose-cli: Command-line interface

Documentation:
- ADR-001: Workspace structure
- ADR-002: Signal processing library selection
- ADR-003: Neural network inference strategy
- DDD domain model with bounded contexts

Testing:
- 69 tests passing across all crates
- Signal processing: 45 tests
- Neural networks: 21 tests
- Core: 3 doc tests

Performance targets:
- 10x faster CSI processing (~0.5ms vs ~5ms)
- 5x lower memory usage (~100MB vs ~500MB)
- WASM support for browser deployment
2026-01-13 03:11:16 +00:00

1.5 KiB

ADR-003: Neural Network Inference Strategy

Status

Accepted

Context

The WiFi-DensePose system requires neural network inference for:

  1. Modality translation (CSI → visual features)
  2. DensePose estimation (body part segmentation + UV mapping)

We need to select an inference strategy that supports pre-trained models and multiple backends.

Decision

We will implement a multi-backend inference engine:

Primary Backend: ONNX Runtime (ort crate)

  • Load pre-trained PyTorch models exported to ONNX
  • GPU acceleration via CUDA/TensorRT
  • Cross-platform support

Alternative Backends (Feature-gated)

  • tch-rs: PyTorch C++ bindings
  • candle: Pure Rust ML framework

Architecture

pub trait Backend: Send + Sync {
    fn load_model(&mut self, path: &Path) -> NnResult<()>;
    fn run(&self, inputs: HashMap<String, Tensor>) -> NnResult<HashMap<String, Tensor>>;
    fn input_specs(&self) -> Vec<TensorSpec>;
    fn output_specs(&self) -> Vec<TensorSpec>;
}

Feature Flags

[features]
default = ["onnx"]
onnx = ["ort"]
tch-backend = ["tch"]
candle-backend = ["candle-core", "candle-nn"]
cuda = ["ort/cuda"]
tensorrt = ["ort/tensorrt"]

Consequences

Positive

  • Use existing trained models (no retraining)
  • Multiple backend options for different deployments
  • GPU acceleration when available
  • Feature flags minimize binary size

Negative

  • ONNX model conversion required
  • ort crate pulls in C++ dependencies
  • tch requires libtorch installation