
RuView 单 ESP32 CSI 流多人姿态检测ADR-037 四阶段架构从人数估计到神经网络的落地路径【免费下载链接】RuViewπ RuView turns commodity WiFi signals into real-time spatial intelligence, vital sign monitoring, and presence detection — all without a single pixel of video.项目地址: https://gitcode.com/GitHub_Trending/wi/RuView导读本文围绕 RuView 开源仓库中的架构决策记录 ADR-037 Multi-Person Pose Detection 展开系统讲解如何在单颗 ESP32 节点、单链路 56 子载波 CSI的有限空间分辨率下把混叠的人体反射信号分解为逐人骨架。读者将掌握「特征值人数估计 → NMF/ICA 信号分解 → 多骨架合成 → 神经网络多人模型」的四阶段递进路线、各阶段性能预算与精度指标以及该方案在当前仓库 Rust 代码v2/crates/wifi-densepose-signal与v2/crates/wifi-densepose-sensing-server中的真实落地位置。ADR-037 定位一次无摄像头路径下的多人感知决策ADR-037 是 RuView 技术决策记录ADR体系中关于多人姿态检测的核心条目其状态为 Proposed提议日期为 2026-03-02相关上游议题为 wifi-densepose #97。它的出现源于一个被实测确认的瓶颈既有的信号推导姿态管线derive_pose_from_sensing()每帧最多只能产出一条融合骨架——当房间里有 2 个人时现场 ESP32 硬件测试得到的检测结果仍是 1 人。在该文档提出的决策中RuView 明确选择不依赖任何视频像素而是将「从聚合 CSI 特征中推导单骨架」演进为「先估计人数、再逐人分解、最后逐人生成骨架」的多阶段管线。它与其他 ADR 的关系如下ADR-014 sota-signal-processing阶段 1/2/3 依赖的底层信号处理能力ADR-024 contrastive-csi-embedding-modelAETHER 对比学习嵌入用于逐人重识别re-IDADR-029 ruvsense-multistatic-sensing-mode多节点多静态网格作为更彻底但独立的多人在位分离方案ADR-036 rvf-training-pipeline-ui阶段 4 神经网络模型训练所依托的 RVF 训练管线。值得注意的是ADR-037 中写明的代码路径如signal/src/ruvsense/field_model.rs对应当前仓库中实际存在的v2/crates/wifi-densepose-signal/src/ruvsense/field_model.rs本文后续引用均以仓库当前真实路径为准。背景56 子载波上的复合反射是问题的根源单颗 ESP32 节点每帧提供的 CSI 数据形态为1 TX × 1 RX × 56 subcarriersfield_model.rs 中FieldModelConfig的n_subcarriers即承载这一维度。与摄像头阵列相比这种空间分辨率极为有限但一个关键事实支撑了继续探索的合理性CSI 信号中包含环境中所有散射体静态物体与每个人体的复合反射。因此真正的技术难点不是「信息不存在」而是如何把这份叠加在一起的复合信号按人分解为独立贡献。这正是 ADR-037 四阶段设计的出发点每一阶段都对上一阶段的输出提出更强的假设也逐步从纯启发式走向神经网络从而以「渐进式交付价值」的方式逼近多人姿态感知。阶段 1基于特征值分析的占位人数估计阶段 1 的目标是不做信号分解仅从 CSI 统计特征估计房间人数这也是整套方案中最先见效、独立可用的成果。原文档规定的算法流程在滑动窗口建议 50 帧 / 约 5 秒对应 10 Hz 采样内对 56 个子载波的 CSI 幅度构建56×56 协方差矩阵对协方差矩阵做特征分解统计高于噪声阈值的特征值数量——每个显著特征值对应一个独立散射体人体或静态物体扣除静态环境基线该基线在标定阶段学习或来自场模型 field model 的 SVD 特征结构剩余的显著特征值计数即为人数的估计值。精度目标单个 ESP32 节点在 0–3 人场景下正确率 80%。源码中的真实实现estimate_occupancy()ADR-037 提出在 field model 中新增estimate_occupancy()方法。从当前仓库看该方法已经实现于 field_model.rs约第 1326–1467 行且实现细节比 ADR 草案更为完备帧数下限recent_frames.len() 10时返回InsufficientData错误要求至少 10 帧正常推荐 50 帧窗口约 2.5 秒 20 Hz空房间提前短路先对窗口均值调用extract_perturbation()若其残差能量低于empty_room_residual_energy_threshold默认常量EMPTY_ROOM_RESIDUAL_ENERGY_MAX 1.0直接判定空房间返回 0协方差与特征分解以样本协方差除以 count−1为输入调用cov.eigh(UPLO::Upper)来自ndarray-linalg做对称矩阵特征分解噪声阈值取 Marcenko-Pastur 界限mp_threshold noise_var * (1.0 sqrt(ratio))²其中ratio n_subcarriers / n_frames噪声底锚定为避免短窗口导致噪声方差漂移Issue #942取「标定存底的baseline_noise_var」与「本窗口局部噪声方差」两者的较大值作为噪声底扣除空房基线显著特征值数量减去基线特征值计数baseline_eigenvalue_count或运行期校准的baseline_runtime_eigenvalue_count得到rank_occupancy稳定人体的保护若窗口均值残差能量超过空房边界说明存在稳定站立的人其运动不抬升协方差秩此时occupancy至少取 1输出封顶最终结果occupancy.min(10)即最多报告 10 人。此外该方法带有#[cfg(feature eigenvalue)]门控只有在启用eigenvalueBLAS特性时才执行真实特征分解未启用该特性时提供同名 stub一律返回NotCalibrated。这提示使用者在构建 signal crate 时需开启 BLAS 特性方可获得阶段 1 能力。测试与调用侧证据该函数的调用点出现在 field_bridge.rs传感服务器侧桥接场模型并在 dsp_perf_bench.rs 中被纳入性能基准。性能预算方面ADR 要求人数估计单次 2ms——纯特征分解路径本身开销可控而真实世界干扰源宠物、风扇等大型移动物体会带来误报这一点 ADR-037 在 Negative Consequences 中亦明确承认。阶段 2基于盲源分离的逐人信号分解当人数 k 已知后阶段 2 负责把每一帧的混合 CSI 拆解成 k 个独立分量。ADR-037 的推荐方案是非负矩阵分解NMF由 CSI 幅度构建时间-频率矩阵行为 56 个子载波、列为时间帧以阶段 1 估计的人数 k 作为分量数对矩阵做 NMF每个分量的频率轮廓对应一个人的运动模式之所以选 NMF 而非 ICA是因为CSI 幅度天然非负与 NMF 的非负约束一致。ADR 同时给出备选方案ICA独立成分分析直接作用于复数 CSI幅度 相位会更强但要求相位已标定ADR 中提到的ruvsense/phase_align.rs当前仓库对应 phase_align.rs。在复数域做盲源分离可以把相位信息也纳入分离依据换取更高分离精度。从源码结构看阶段 2 的状态ADR-037 规划的集成点是新增模块signal/src/ruvsense/separation.rs对应当前布局应为v2/crates/wifi-densepose-signal/src/ruvsense/separation.rs。搜索整个仓库未见该文件可以推断阶段 2 的 NMF 模块在当前代码库中尚未落地属于规划中的工作。性能预算上NMF 分解k3 分量被限定在 10ms/帧这也是四阶段中单笔时延最大的一项。阶段 3逐分量生成多骨架 多目标跟踪阶段 3 将阶段 2 分解出的每个分量转换为一条完整的人体骨架对每个 NMF 分量提取运动特征主频、能量、谱质心 spectral centroid利用**子载波相位梯度Fresnel 区域模型**将分量映射为空间位置偏移每人生成一条17 关键点 COCO 骨架并携带各自的位置偏移量借助既有 Kalman 跟踪器ruvsense/pose_tracker.rs为每人分配稳定的 Person ID并配合 AETHER 重识别嵌入见 ADR-024做跨期身份维持。传感服务器侧derive_pose_from_sensing() 的多人化改造ADR-037 要求修改derive_pose_from_sensing()使其返回长度 1 的VecPerson。从当前仓库 pose.rs约第 24–212 行看该函数已具备多人在位骨架输出的雏形derive_pose_from_sensing(update)先检查classification.presence无人在位时返回空向量否则取update.estimated_persons.unwrap_or(1).max(1)作为人数用(0..person_count).map(...)生成VecPersonDetection辅助函数derive_single_person_pose(update, person_idx, total_persons)对每个person_idx施加不同的相位偏移person_idx * 2.094、横向空间偏移围绕中心以约 120 单位间隔排布(person_idx - half) * 120.0以及置信度衰减每多一人衰减 15%从而在同一份聚合特征上产出互不重叠、按序编号的多人结果。这里的实现本质上仍是「按索引切分的启发式骨架」与 ADR 阶段 3 设想的「以真实分解分量驱动的空间定位」尚有差距——ADR 中的空间位置来自 Fresnel 相位梯度模型而当前代码以等间距虚拟偏移近似。这是文档规划与代码当前实现之间需要读者注意的差异点。多目标跟踪底座17 关键点 Kalman AETHER 重识别为多人输出服务的跟踪层已经相当完整。pose_tracker.rs 的模块注释明确写道这是一个「17-Keypoint Kalman Pose Tracker with Re-ID」要点包括每个关键点维护6D Kalman 状态[x, y, z, vx, vy, vz]采用恒速运动模型检测-轨迹分配使用联合代价Mahalanobis 距离权重 60% AETHER 重识别嵌入余弦相似度权重 40%由ruvector-mincut::DynamicPersonMatcher实现轨迹生命周期参数Birth hits 2 帧滤除单帧噪声、Loss misses 5 帧容忍短暂遮挡、重识别嵌入为 128 维、重识别窗口 5 秒支持穿越后恢复身份。配合 ADR-082姿态跟踪器确认输出过滤与apply_temporal_smoothingEMA 平滑与骨骼长度钳制多人在位输出的时间稳定性由既有框架承接。ADR-037 为阶段 3 分配的性能预算是多骨架合成 3ms/帧。阶段 4基于 RVF 管线的神经网络多人模型阶段 4 是精度收敛的最终形态不再依赖启发式分解而是训练专用多人模型训练数据取自 MM-Fi 数据集中的多人场景见 ADR-015。架构设计为共享 CSI 编码器 人数头 逐人姿态头共享编码器从原始 CSI 中提取通用表示人数头count head输出占位人数等价于把阶段 1 学进网络每个人员头per-person pose head从同一表示中回归自身骨架从而在同一份 CSI 输入上避免「多个单人在位模型产生相关性输出」的问题这正是被否决策略之一采用LoRA 微调画像实现多人场景特化推理阶段通过传感服务器的模型管理器model_manager.rs加载执行训练端走 ADR-036 定义的 RVF 训练管线含对应的训练 API 实现 training_api.rs。精度目标两人场景 PCK0.2 60%PCK 为 Percentage of Correct Keypoints0.2 为归一化距离阈值。神经网络推理多人的时延预算为 50ms/帧是全管线单帧预算中最重的环节。工程影响范围与当前仓库映射ADR-037 给出了完整的受影响组件清单。下表在其基础上补充了当前仓库真实路径组件ADR 原文当前仓库对应路径阶段变更内容signal/src/ruvsense/field_model.rsv2/crates/wifi-densepose-signal/src/ruvsense/field_model.rs1estimate_occupancy()已实现含 Marcenko-Pastur 阈值与空房基线扣除signal/src/ruvsense/separation.rs尚未存在规划中2新增模块NMF 分解sensing-server/src/main.rsv2/crates/wifi-densepose-sensing-server/src/pose.rs3derive_pose_from_sensing()多人输出已支持VecPersonDetection雏形signal/src/ruvsense/pose_tracker.rsv2/crates/wifi-densepose-signal/src/ruvsense/pose_tracker.rs317 关键点多目标跟踪 AETHER re-ID已具备nn/仓库未见对应顶层目录4多人推理头train/RVF 训练管线见 ADR-0364多人训练管线前端方面ADR-037 指出UI 已支持多人渲染persons[]数组无需改动——这与此仓库ui/mobile如 types/sensing.ts 及模拟服务 simulation.service.ts中携带多目标位数据的类型设计一致。性能预算全管线目标 65ms 15 FPSADR-037 为每个阶段划定了明确的单帧时延预算全管线串联目标为 65ms即可达 15 FPS操作预算阶段人数估计 2ms1NMF 分解k3 10ms2多骨架合成 3ms3神经网络推理多人 50ms4全管线合计 65ms15 FPS全部这组预算背后的含义是即使四个阶段全部上线单人帧时延的大头也集中在阶段 4 的模型推理阶段 1–3 合计约 15ms 的开销对实时传感场景是可接受的增量成本。备选方案为什么不做这四件事ADR-037 记录了四项被否决的候选路线及其理由理解这些取舍有助于避免在类似问题上重复踩坑摄像头融合Camera fusion用摄像头做人检测、WiFi 做姿态——被否决因为 RuView 的项目目标就是完全无摄像头的感知多个单人在位模型并行N 个独立姿态估计器被否决因为所有模型吃同一份 CSI 数据输出必然高度相关无法获得独立信息天线阵列波束成形空间滤波方向隔离效果好但单颗 ESP32 只有 1 根天线物理上不可行只有引入多静态网格见 ADR-029后才有意义跳过信号推导、直接端到端训练多人模型被否决因为信号推导路线在早期阶段迭代更快、可解释性更好适合作为先于神经网络的快速基线。收益、代价与中性影响ADR-037 的 Consequences 部分给出了清醒的权衡评估可归纳为以下三组正向收益阶段 1人数估计单独落地即有实用价值——可直接支撑房间占用计数逐人独立跟踪使「按个体的活动识别」成为可能例如区分两人各自的动作渐进式路线让每个阶段都能独立交付增量价值最大化复用既有基础设施场模型 SVD 特征结构、Kalman 跟踪器、AETHER 重识别、RVF 训练管线。负面代价单 ESP32 节点存在空间分辨率的天花板两人间距 0.5m 时分离将不可靠NMF 分解每帧增加约 5–10ms 延迟人数估计对大型移动物体宠物、风扇存在误报阶段 4 依赖真实的多人训练数据采集成本不低。中性影响多节点多静态网格ADR-029能大幅改善多人分离效果但属于独立工程不在本 ADR 范围内UI 已支持多人渲染persons[]数组输出无需前端改动。结语一份「已部分落地」的递进路线图综合来看ADR-037 的价值在于它把一个高难度的无摄像头多人感知问题拆解成了四个可独立交付、可分别验证的阶段并为每阶段明确了算法选型、精度指标与实时预算。对照当前仓库源码可以得到清晰的落地快照阶段 1人数估计已由 estimate_occupancy() 完整实现并接入传感服务器field_bridge.rs阶段 3 的多骨架输出雏形与 Kalmanre-ID 多目标跟踪底座已存在pose.rs、pose_tracker.rs阶段 2 的分离模块与阶段 4 的多人网络尚未在仓库中出现。对希望在 RuView 上进行多人感知二次开发的读者建议以本文的源码映射为入口从人数估计这条已经跑通的链路起步再沿 ADR-037 的阶段路线逐级推进。【免费下载链接】RuViewπ RuView turns commodity WiFi signals into real-time spatial intelligence, vital sign monitoring, and presence detection — all without a single pixel of video.项目地址: https://gitcode.com/GitHub_Trending/wi/RuView创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考