RuView 在 MM-Fi 上的 WiFi-CSI 姿态与动作感知完整实证:超越姿态 SOTA、零样本泛化失败与"少样本室内校准"的部署正解
【免费下载链接】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 仓库中的开源基准研究报告 docs/benchmarks/mmfi-wifi-sensing-study.md,并结合 ADR-150(RF Foundation Encoder 决策记录与实测链条)、效率前沿报告 以及已落地的 校准服务参考实现 展开。全文所有性能数字均为研究文档记录的实测结果,适用前提(数据集、协议、硬件)在文中逐条标注。
导读:RuView 团队在公开的 MM-Fi 数据集(40 名被试 × 4 种环境,27 类动作,[3 天线, 114 子载波, 10 帧]CSI 幅度张量)上,对"WiFi 信道状态信息(CSI)→ 二维人体姿态与动作识别"做了完整、诚实的评测:姿态估计在域内协议下超越了已发表 SOTA,并把模型压缩到约 20 KB 的边缘可部署形态;但更深刻的结论是WiFi 感知无法对新人/新房间做零样本泛化,而一段约 30 秒的室内少样本校准就能同时把姿态与动作两项任务近乎完全拉回可用水平。读完本文,你将掌握:如何复现与解读该基准的每一张表格、为什么零样本跨被试/跨环境会崩塌、为什么随机冻结编码器 + 训练读出头能逼近全量训练、以及项目当前已随仓库交付的Python + Rust 双实现校准服务的完整用法与参数语义。
1. 研究范围与数据协议
本文所有数字在RTX 5080上测得,评测对象是公开的MM-Fi数据集:40 名被试 × 4 种环境、27 类动作、CSI 幅度为[3 antennas, 114 subcarriers, 10 frames]。
关键协议术语(下文表格反复出现,务必先厘清):
| 协议 | 含义 | 是否"诚实的泛化指标" |
|---|---|---|
random_split(数据集默认) | 按随机比例切分(如 0.8/seed 0) | 否——存在时序/被试相邻导致的泄漏(见 §3) |
| cross-subject(官方) | 被试完全隔离,零样本 | 是 |
| cross-environment(零样本) | 房间与被试均未见过 | 是 |
与random_split同协议的数字仅用于和既有论文对齐(例如 MultiFormer 报告 72.25% 所用即为同一协议);跨被试 / 跨环境数字才是诚实的部署侧指标。
数据集边界提示:MM-Fi 许可证为 CC BY-NC 4.0,仅限 v0 版本使用(详见 ADR-149 的许可决策记录);不意味着可任意再分发。跨数据集验证使用了同为
3×114布局但硬件/实验室不同的 NTU-Fi,结论见 §5。
2. 姿态估计:域内精度与效率前沿
2.1 域内精度(超越 SOTA)
度量口径:torso-normalized PCK@20(即 MultiFormer 的 PCK 定义:‖pred−gt‖ ≤ 0.2·‖右肩−左髋‖),协议为 MM-Firandom_split(数据集默认)。
| 模型 | torso-PCK@20 |
|---|---|
| CSI2Pose(此前工作) | 68.41% |
| MultiFormer(此前 SOTA,2025) | 72.25% |
| RuView(单模型) | 82.69% |
| RuView(graph + 3-ensemble + TTA) | 83.59% |
架构主线:线性投影 →4 层 / 8 头 Transformer(作用于 10 个时序 token)→时序注意力池化(研究文档明确标注这是"最大的单点杠杆")→ MLP 头 →骨架图细化(skeleton-graph refinement,COCO-17 骨架拓扑)。
诚实性细节值得单独说明:论文发表前,头部数字曾因"宽松的 bbox 归一化"被抬高到 91.86%;在统一到 torso 度量后,自我修正下调为 82.69%才对外发布。这正是该研究"拒绝自嗨数字"的姿态——对应 ADR-150 §1 所强调的"metric- and protocol-matched"原则。
2.2 效率前沿:更小且更准(Pareto 支配)
从micro(75 K 参数)往上,每个模型都同时比此前 SOTA 更小、更准(Pareto-dominant):一个75,237 参数的模型即可超过 MultiFormer。完整效率曲线见 docs/benchmarks/wifi-pose-efficiency-frontier.md(同仓库,2026-05-31 实测,MM-Firandom_splitratio 0.8 seed 0,RTX 5080):
| 模型 | Params | Latency (batch=1) | torso-PCK@20 | vs SOTA (72.25%) |
|---|---|---|---|---|
| nano | 39,971 | 0.126 ms | 71.76% | −0.49(比旗舰小 58×) |
| micro | 75,237 | 0.224 ms | 74.30% | ✅ +2.05(比 SOTA 少 31× 参数即超越) |
| tiny | 210,949 | 0.299 ms | 76.82% | ✅ +4.57 |
| small | 348,005 | 0.287 ms | 77.87% | ✅ +5.62 |
| base | 726,437 | 0.344 ms | 79.38% | ✅ +7.13(3.2× 更小) |
| flagship | 2,320,869 | — | 83.59% | +11.34 |
已部署精度(而非仅参数数)才是关键,权重量化实测(weight-only、per-tensor symmetric):
| 精度 | 大小 | torso-PCK@20 | vs SOTA 72.25 |
|---|---|---|---|
| fp32 | 294 KB | 74.73% | ✅ +2.5 |
| int8 (PTQ) | 73.5 KB | 74.70% | ✅ +2.5(近似无损) |
| int4(朴素 PTQ) | 36.7 KB | 70.21% | ❌ −2.0(跌破 SOTA) |
| int4 (QAT) | 36.7 KB | 74.46% | ✅ +2.2(恢复且仍超 SOTA) |
诚实的边缘侧结论:micro在int8(73.5 KB,74.70%)近似无损;int4 若用朴素后训练量化(PTQ)会跌破 SOTA(70.21%),但量化感知训练(QAT)能完全恢复至 74.46%。已发布的部署产物为 int4-QATmicro模型(仓库研究文档记载其 int4 权重载荷约20 KB、实测部署 int4 精度 74.08%,x86 单线程推理0.135 ms,sha256c03eeb…,配套load_int4.py)。研究文档同时给出硬件兼容性边界:这些测量是数据集级与 x86/GPU 级,MM-Fi 张量[3,114,10]本身不等价于可直接跑在 ESP32 捕获节点上——ESP32 推理延迟或"实时 ESP32→MM-Fi 适配"没有任何声称。
架构超参扫描族(宽度d、层数L、头数H)与训练配方(mixup Beta(0.2,0.2)、4-view 测试时增强、EMA、cosine LR)详见效率前沿文档;其中还记录了一个反直觉负结果:flagship→tiny 知识蒸馏无效,学生模型从 ground truth 直接训练即可达到同等或更高精度,回归式 KD 只是给关键点加了教师噪声。
3. 动作识别(27 类):补上论文没做的基准
MM-Fi 论文自身并未对 WiFi-CSI 动作识别做基准测试(其 HAR 为基于骨架的 RGB/LiDAR/mmWave 方案)。WiFi-CSI-on-MM-Fi 此前唯一的已发表数字是 WiDistill(2024)的 34.0%(ResNet-18,split 未说明)。RuView 的实测建立了两个协议点:
| 协议 | top-1 |
|---|---|
| random_split(域内) | 88.08% |
| cross-subject(官方),零样本 | 10.0%(接近随机) |
88% 是泄漏虚高的数字(见 §4),诚实的跨被试零样本只有约 10%。
4. 泛化故事(真正的核心结果)
随机切分的数字被时序/被试相邻性抬高。换成无泄漏协议后,WiFi 感知崩塌:
| 任务 | 域内 | cross-subject(零样本) | cross-environment(零样本) |
|---|---|---|---|
| 姿态 | 83.6% | 64% | ~10% |
| 动作 | 88.1% | 10% | — |
4.1 什么不能弥合差距(全部实测、全部为负)
研究把"试图做泛化的常规武器"逐一实测并如实报告为负结果:
- CORAL(深度特征协方差对齐):跨被试无增益;跨环境仅有边际 ~17%。
- DANN(被试对抗):约 0 增益,且损失失衡脆弱。
- 逐天线 instance-norm + SpecAugment:−4.6(摧毁跨天线姿态结构)。
- 姿态对比基础预训练(pose-contrastive foundation pretraining):−2.3;且 SupCon 损失从未离开
ln(B)随机地板——即"同姿态的 CSI 在跨被试间无法对比对齐":目标所要求的那个不变性在数据里根本不存在。 - 知识蒸馏(旗舰→tiny):无增益,直接训练胜出。
- 增加训练被试:饱和——4→8 名被试 = +21 分,但 24→32 只 = +0.45 分(渐近线约 64%)。
唯一对跨被试有微弱帮助的是mixup + TTA + ensemble,且不足 1 分。该差距是根本性的分布偏移,不是可调的算法性差距。
这正是 ADR-150 §3.2 里把原先"近端 +5~12 分"的预训练估计实测证伪的同一组实验:姿态对比预训练损失在 K∈{48,256} 聚类粒度、batch∈{768,1024}、3 个 seed 下全部贴住 uniform-similarity 地板
ln(B);同一编码器却能把时序相邻帧对齐到 82%(说明优化器正常工作),它只是无法把不同被试的同姿态 CSI 拉到一起。ADR-150 由此把被试缩放研究重新导向"追求房间/设备/天线几何的多样性,而非人头数"(详见 ADR §3.3 的被试饱和曲线)。
4.2 什么能弥合:少样本室内校准
来自真实部署房间的少量带标注帧能恢复大部分差距——而且零样本差距越大、少样本收益越大(未见过的房间是一个连贯的整体域偏移,少量帧即可钉住它):
| 校准样本/被试 | 姿态 cross-subj | 姿态 cross-env | 动作 cross-subj |
|---|---|---|---|
| 0(零样本) | 64% | ~10% | 10% |
| 5 | — | 60% | 13% |
| 50 | 70% | 70% | 36% |
| 200 | 76% | 73% | 59% |
| 1000 | 78% | 75% | 76% |
确认跨任务通用:同样的模式在姿态回归与 27 类动作分类上完全一致(动作比姿态需要更多校准样本——分类对校准量更饥渴)。少样本室内校准是 WiFi 感知部署的通用机制,而非姿态任务的独有结论。
4.3 可部署为约 11 KB 的适配器
全量微调意味着每房间一份 2.3 MB 模型拷贝。一个rank-8 的 LoRA 适配器(约 11 KB)能以 0.5% 的体积恢复大部分增益。实测校准数据预算:约 100–200 个带标签样本(拐点在约 50 → 70%;低于约 20 个可能反而有害)。
| 校准方法 @200 样本 | PCK@20 | adapter |
|---|---|---|
| LoRA rank-8 | 72.5% | ~11 KB |
| head + graph only | 72.7% | 119 KB |
| frozen-trunk | 73.5% | 207 KB |
| full finetune | 76.2% | 2.3 MB |
(注:上表来自 ADR-150 §3.5 的 K=200 对照;LoRA rank-8 训练参数 11,200,对应约 11 KB int8 / 22 KB fp16。)
5. 校准服务:已随仓库交付的双实现
该机制已端到端落地,仓库内可直接查看与运行(aether-arena/calibration/):
- Python 参考实现:
calibrate.py从一段带标注片段拟合适配器,并记录了在未见过的 MM-Fi 房间 E04 上从零样本 3.09% → 200 样本校准后 74.29%(+71 分)的验证演示; - Rust 产品引擎(
cog-pose-estimation):InferenceEngine::with_adapter()、run --adapter <room.safetensors>,对姿态头做架构无关的 LoRA,且已测试。
5.1 工作原理
冻结一份共享base(Transformer + 时序注意力池化 + 骨架图头,即已发布模型ruvnet/wifi-densepose-mmfi-pose),再为每个房间拟合一份极小的LoRA 适配器(rank 8,挂在输入投影与姿态头上,11,200 参数 ≈ 11 KB int8 / 22 KB fp16)。数以千计的房间适配器挂在同一份 base 上,每个房间只需一次约 30 秒的带标签采集。
5.2 使用方式(可直接运行)
# 1) 在部署房间采集一小段带标注片段 -> calib.npz {X:[N,3,114,10], Y:[N,17,2]} # (推荐 ~100–200 样本;低于 ~20 时适配器可能劣于零样本) # 2) 拟合房间适配器(~11 KB): python calibrate.py --base pose_mmfi_best.pt --data calib.npz --out room.adapter.npz # 3) 运行校准后的推理(base + 房间适配器): python infer.py --base pose_mmfi_best.pt --adapter room.adapter.npz --data frames.npz --out kp.npy # 省略 --adapter 即运行未校准(零样本)base张量契约:X为 CSI 幅度[N, 3 antennas, 114 subcarriers, 10 frames](内部会做 per-sample 标准化);Y为[N,17,2]的 COCO 关键点,取值在[0,1]。输出[N,17,2]关键点。
5.3 CLI 参数语义(对照源码)
calibrate.py的可调参数(aether-arena/calibration/calibrate.py)如下,理解其语义比盲跑更有价值:
| 参数 | 默认 | 作用 |
|---|---|---|
--base | 必填 | 共享 base 检查点(如pose_mmfi_best.pt) |
--data | 必填 | 带标注校准.npz(含X、Y) |
--out | 必填 | 输出的适配器.npz |
--rank | 8 | LoRA 秩(秩越高越准、体积越大) |
--iters | 600 | 拟合迭代数 |
--lr | 8e-4 | AdamW 学习率 |
--device | 自动(cuda/cpu) | 计算设备 |
源码细节补充三点(与可复现性直接相关):
- 安全加载:base 以
weights_only=True经load_state_dict(strict=False)载入,"checkpoint 是张量状态字典,绝不触发 pickle 对象加载"——这是注释中明确的安全边界; - LoRA 冻结规则:
requires_grad只对*.A/*.B参数打开,其余全冻结;损失为SmoothL1Loss(beta=0.1),训练中带轻量增强(子载波 dropout 0.15 + 噪声),与训练期正则一致;样本数< 20会打 Warning(低于约 20 个样本时适配器可能劣于零样本); - 保存格式:只导出 LoRA 的 A/B 张量(
lora_state()),以 fp16 落盘(约 22 KB;注释说明量化为 int8 后为约 11 KB 的 on-device 形态),并写入_meta(rank / 样本数 / 可训练参数数)元数据。
模型定义见 aether-arena/calibration/model.py:LoRA包装冻结的 Linear,前向为y = base(x) + (x·A·B)·(alpha/r),其中A初始化为零、B以 std=0.02 正态初始化、scale = alpha/r = 16/8;GR(骨架图细化)对 17 个关节点做两次图传播后以kp0 + 0.3·tanh(...)输出解剖一致性的修正;standardize()即训练/推理共用的 per-sample 标准化。
5.4 两个模型、两个生产者(不可互换)
适配器是模型专属的。仓库同时提供了两个校准生产者,张量形状与适配器文件格式都不同:
| 生产者 | 目标模型 | 输入 | 适配器格式 | 消费者 |
|---|---|---|---|---|
calibrate.py | MM-Fitransformer(pose_mmfi_best.pt,3×114×10) | [N,3,114,10] | .npz(proj/head的 LoRA) | Pythoninfer.py |
cog_calibrate.py | cogconv+MLP(pose_v1.safetensors,56×20) | [N,56,20] | .safetensors(fc1.a/fc1.b/fc2.a/fc2.b) | Rustcog-pose-estimation run --adapter |
# 产出 cog 格式的房间适配器(X:[N,56,20],Y:[N,17,2]): python cog_calibrate.py --base pose_v1.safetensors --data cog-calib.npz --out room.safetensors # 然后在 cog 运行时中加载: cog-pose-estimation run --config <cfg> --adapter room.safetensorsLoRA机制相同(ADR-150 §3.5),但架构与关键点布局不同——一个生产者产出的适配器无法载入另一个模型。cog_calibrate.py 的 conv+MLP 结构(3 层膨胀卷积 56→64→128→128 + 平均池化 + fc1/fc2,输出经 sigmoid)镜像了 Rust/Candle 侧的PoseNet与 safetensors key 命名,并把scale = alpha/rank烘焙进b张量。
5.5 校准预算与使用边界
实测校准预算(rank-8 LoRA、3 seeds,ADR-150 §3.5):
| 校准样本/房间 | cross-subject | cross-environment |
|---|---|---|
| 0(零样本) | 64% | ~10% |
| 5 | — | 60% |
| 20 | 66% | 66% |
| 50 | 70% | 70% |
| 200 | 72% | 73% |
拐点约在 50 样本(~70%);低于约 20 个样本适配器可能反而有害(拟合不稳)。两条关键边界(源自 校准 README 的 Notes):
- 只有当 base 没在部署房间上训练过时,校准才有意义。已发布的旗舰模型是用 MM-Fi
random_split训练的,拿它对 MM-Fi 被试校准近乎无效(它已经见过这些人);要复现"未见房间 E04:3.09% → 74.29%"的演示,须先训练一份 source-only base(排除目标环境,见 ADR-150 §3.6); - 校准服务(两个生产者)都要求CSI 与关键点标签配对,且张量形状、适配器文件均为模型专属;ADR-027 的"自动、无标签、10 秒 MERIDIAN 校准"仍处于Proposed状态,没有以端到端部署命令的形式实现——校准 README 明确区分了这两者。
5.6 端到端回归测试佐证
仓库随附了自包含的回归测试 aether-arena/calibration/test_calibration.py:纯 CPU、合成数据、无需真实 checkpoint,跑通calibrate.py→ 适配器落盘(断言体积 < 200 KB、含 LoRA A/B 张量)→infer.py(断言输出(16,17,2)、有限值、取值[0,1])→ 断言适配器确实改变了输出(与零样本 base 的绝对差 > 1e-4)。另有用例覆盖 cog 校准,可python test_calibration.py直接运行。这个测试的价值在于把"适配器是模型专属且真实生效"变成可自动验证的契约。
6. 诚实的局限(避免读者误用)
- 大多数泛化数字都在 MM-Fi 内部(一个数据集、一套硬件配置)。跨数据集迁移用NTU-Fi HAR(同样的 3×114 布局、不同实验室/硬件/房间)测过:MM-Fi 训练的表征不能带来正向迁移——冻结的 MM-Fi trunk 探到 NTU-Fi 为 91.5%,并不优于随机特征(93%);全量微调(75%)甚至不如线性探针。CSI 表征是分布锁定的(与被试/环境崩塌同根同源);实用答案是"就地训练/少样本",而非"可迁移的零样本特征"。补充说明:NTU-Fi 的 6 类粗粒度活动是易目标(随机特征即达 93%,对表征质量的压力弱);但在更难的NTU-Fi-HumanID(14 类步态人 ID、随机基线 7.1%)上重跑,结论相同(MM-Fi 预训练 91.7% ≈ 随机 92.8%)。统一根因:CSI 的域内分类本质活在"目标训练过的读出头"里(3,420 维 CSI 的随机 256 维投影就已线性可分),而学习到的表征无论跨被试、跨房间还是跨数据集都无法迁移。WiFi-CSI 感知是分布锁定的;答案是在目标域做少样本校准,而不是追求可迁移特征。一个更难的跨数据集姿态基准(相对分类而言)仍是唯一未做的开放变体。
- random_split 数字仅用于与既往工作的同协议对齐;它们属域内且部分泄漏。cross-subject / cross-environment 才是诚实的数字。
- 动作识别精度是window 级(MM-Fi 自己的 HAR 实验是 clip 级),不能直接与序列级报告比较。
- 端侧(ARM/Hailo)延迟待硬件就绪;当前代理指标是 x86 单线程 CPU 延迟(0.135 ms)。
7. 复现入口
研究文档(mmfi-wifi-sensing-study.md §6)所列复现脚本包括:姿态侧train_save.py(旗舰)、train_efficiency_pareto.py、quant_micro.py、train_fewshot_adapt.py、train_adapter_calib.py;动作侧train_action.py、train_action_fewshot.py;校准服务为aether-arena/calibration/。完整实证链条与决策记录见 ADR-150 §3.2–3.6;效率前沿复现(模型族超参与量化对照)见 wifi-pose-efficiency-frontier.md。排行榜与见证账本由 AetherArena(ADR-149)承载:其打分底层复用 ADR-145 的消融评估(pose/存在率/边缘延迟/确定性)与 ADR-011 的确定性 SHA-256 见证机制,使任何提交可复现、防篡改。仓库当前可直接运行、无需额外训练数据的复现路径是 §5 的校准服务(含自带回归测试)。
训练侧脚本(staging 等)属研究文档所指向的独立训练流程,本文不展开为仓库内可点击路径;当前仓库内开箱可复现的实证资产是
aether-arena/calibration/的 Python/Rust 校准服务与其测试。
8. 最尖锐的结论:编码器几乎不重要
用随机冻结的 Transformer 编码器 + 训练过的姿态头,可以追平全量训练编码器到 2–4 分以内(跨被试甚至 <2 分):
| 姿态协议 | 全量训练编码器 | 随机冻结编码器 + 头 |
|---|---|---|
| 域内 | 78.2% | 73.8% |
| cross-subject | 63.9% | 62.1% |
(同为公平对照配置;绝对值低于 83.6% 旗舰——差值才是要点。)几乎全部任务信号都在读出头里(姿态头 + 基于随机高维 CSI 投影的骨架图细化),而不是在学到的编码器里。这一条统一解释了整份研究:几乎没有"可迁移的学习表征"(所以跨被试/环境/数据集全部崩塌、基础编码器失败),而逐房间校准之所以有效,正是因为它重新拟合了信号真正所在的读出头。
实用启示:对 WiFi-CSI 感知而言,把算力花在读出头 + 逐房间校准上,而不是昂贵的编码器预训练上。这与效率前沿"还能再压一个数量级"(见 wifi-pose-efficiency-frontier.md)叠加后,勾勒出 RuView 的完整部署哲学:一份共享 base + 每房间约 11 KB 的 LoRA 适配器 + 约 30 秒现场采集,任何新房间/新人即可达到 SOTA 级精度——零样本不变性不是部署答案,少样本校准才是。
9. 延伸阅读(仓库内)
- 泛化研究与校准机制的完整决策记录与实测链条:docs/adr/ADR-150-rf-foundation-encoder.md
- 姿态模型的精度-体积前沿与 int4/int8 量化实测:docs/benchmarks/wifi-pose-efficiency-frontier.md
- 校准服务 README(双生产者、预算表、边界条件):aether-arena/calibration/README.md
- 校准服务实现与测试:aether-arena/calibration/calibrate.py、aether-arena/calibration/model.py、aether-arena/calibration/infer.py、aether-arena/calibration/cog_calibrate.py、aether-arena/calibration/test_calibration.py
- 排行榜/见证账本设计:docs/adr/ADR-149-public-community-leaderboard-huggingface.md
【免费下载链接】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),仅供参考