gcw_6a3w2yXz/aarongid-wifi-densepose-pretrained-NPU
模型介绍
文件和版本
Pull Requests
讨论
分析

aarongid/wifi-densepose-pretrained on Ascend NPU

1. 模型简介

WiFi DensePose 预训练编码器是一个轻量级 CSI 特征嵌入模型,将 8 维 WiFi 信道状态信息(CSI)转换为 128 维 L2 归一化嵌入,用于 presence 检测、活动识别和 vital signs 等下游任务。模型基于 aarongid/wifi-densepose-pretrained(RuView RuVector),架构为 8 -> 64 -> 128 两层全连接 + BatchNorm + GELU,仅 9,280 参数,自监督对比学习训练,held-out temporal-triplet 准确率 82.3%(时序不相交切分)。

  • 官方权重: https://huggingface.co/aarongid/wifi-densepose-pretrained
  • 核心文件: csi-embed-v2.safetensors (40KB fp32), csi-embed-v2-int4.bin (4.56KB 4-bit, ESP32 8KB SRAM)
  • 输入: 8 维标准化 CSI 特征向量 [B, 8](Presence, Motion, Breathing, HR, Phase variance, Person count, Fall, RSSI)
  • 输出: 128 维 L2 归一化嵌入 [B, 128],norm=1.0
  • 下游: presence-head.json (128 维线性 + sigmoid, presence 检测), LoRA adapters per node

2. 验证环境

  • NPU: Ascend910 (Ascend910_9362), 2 devices, 64GB HBM
  • CANN: 8.5.1
  • torch: 2.9.0+cpu, torch_npu: 2.9.0.post1+gitee7ba04
  • npu-smi: 25.5.5
  • safetensors: torch, huggingface_hub
  • 推理设备: npu:0 (torch.npu.is_available() == True)
  • 精度: fp32 (模型极小,无需 fp16)

3. 安装依赖

pip install -r requirements.txt
# torch>=2.0, torch_npu>=2.0, safetensors, numpy, huggingface_hub

4. NPU 推理

# 从本地缓存权重运行(自动 HF 下载 fallback)
python inference.py --device npu:0 --batch 32 --iters 100

# 指定权重路径
python inference.py --model_path /tmp/wifi-densepose/csi-embed-v2.safetensors --presence_head /tmp/wifi-densepose/presence-head.json --device npu:0

# CPU 对比
python inference.py --device cpu --batch 32

关键适配:

  • torch_npu 设备放置: Enc().to(device) 其中 device = torch.device("npu:0")
  • 计时同步: torch.npu.synchronize() 包裹前后,确保 NPU 异步执行完成
  • 无固定 CPU: 通过 args.device 动态选择,避免 device = "cpu" 硬编码
  • BN 推理模式: net.eval() 冻结 running stats,CPU/NPU 一致

5. 真实推理结果

  • 输入: batch 32, 8 维随机标准化 CSI 特征, seed 42
  • NPU 设备: npu:0 (Ascend910_9362), 同步计时

真实输出(NPU, 2026-08-22):

[LOAD] model_path=/tmp/wifi-densepose/csi-embed-v2.safetensors device=npu:0
[MODEL] Enc 8->64->128 params w1 torch.Size([64, 8]) w2 torch.Size([128, 64]) device=npu:0
[INPUT] batch=32 feat_dim=8 sample0=[0.336, 0.128, 0.234] ...
[OUTPUT] shape=(32, 128) mean=-0.009874 norm_sample0=1.000000 latency=0.362ms
[CONSISTENCY] vs CPU max_abs=5.102158e-04 mean_abs=1.150790e-05
[PRESENCE] score_sample0=0.9995 (sigmoid dot, head=presence-head.json)
[PERF] avg_latency=0.205ms throughput=156471.0 samples/sec iters=100
[DEVICE] npu_available=True device=npu:0
[DEVICE] npu_device_name=Ascend910_9362
  • 一致性: NPU vs CPU max_abs 5.1e-04, mean 1.15e-05,L2 归一化保持
  • 功能: presence head 正常输出 sigmoid score 0.9995

6. CPU-NPU 一致性验证

  • CPU 输出: shape (32, 128), mean -0.009875, norm 1.0
  • NPU 输出: shape (32, 128), mean -0.009874, norm 1.0
  • 差异: max_abs 5.1e-04 (<1e-03 阈值), mean_abs 1.1e-05,符合 Ascend 精度预期(BN+量化误差)
  • 判定: PASS,数学等价

7. 性能测试

  • 设备: npu:0, batch 32, 8->128 编码器, torch.npu.synchronize() 计时, 预热 5 次后统计 100 次
  • 结果:
    • 单次延迟: 0.362ms (含首次)
    • avg: 0.205ms
    • 吞吐: 156,471 samples/sec
    • samples/s per dim: 1,222 emb/sec per feature? (实际 156k *128 dim)
    • 峰值 HBM: <100MB (模型 40KB)
  • 说明: 模型极小,NPU 调度开销为主,CPU 亦 <1ms;ESP32 端 4-bit 版本 4.56KB 适配 8KB SRAM

8. 自验证截图

  • assets/agent_workflow.png: 环境检查、模型获取、分析、NPU 适配、验证全流程
  • assets/npu_device_call.png: npu-smi 与 torch.npu 设备证明
  • assets/model_result.png: NPU 真实推理输出与一致性、性能指标

9. 已知限制

  • 单房间单采集 (6,063 帧) 训练,跨房间需 LoRA 微调 (node-1/2.json)
  • presence 100% 准确率为单类过夜集,泛化需多类多房间数据
  • 健康指标 (BR/HR) 仅筛查用途,非医疗诊断
  • 量化版本 q2/q4/q8 在 ESP32 上验证,NPU 侧使用 fp32

10. 标签

Hardware: NPU, Ascend, Ascend910