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
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
# 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
|
||||
```rust
|
||||
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
|
||||
```toml
|
||||
[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
|
||||
Reference in New Issue
Block a user