RuView RVF 模型训练流水线:从 CSI 录制、监督训练到 LoRA 环境适配的端到端设计(ADR-036)
发布时间:2026/9/8 15:46:30 锦皓数字建站
`)
RuView RVF 模型训练流水线从 CSI 录制、监督训练到 LoRA 环境适配的端到端设计ADR-036【免费下载链接】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-036: RVF Model Training Pipeline UI Integration 展开系统讲解 WiFi-DensePose 系统从“信号推导signal-derived”走向“模型推理model-inference”的完整训练流水线设计CSI 数据录制、无监督对比预训练、监督训练 API、.rvf模型容器导出、LoRA 环境适配、UI 集成与推理链路接线。读完本文你将理解该流水线的五个阶段、全部 REST/WebSocket 接口契约、关键超参默认值并能在仓库源码中逐一找到对应的实现证据。背景信号推导与模型推理两条割裂的技术路线RuViewwifi-densepose系统当前的默认工作模式是信号推导derive_pose_from_sensing()将聚合 CSI 特征运动能量、呼吸频率、方差通过确定性数学映射为关键点位置。这能给出全身存在性与粗略运动但无法跟踪四肢细节。ADR-036 指出模型推理的基础设施其实已经存在但彼此割裂RVF 容器格式rvf_container.rs约 1,100 行实现了 64 字节对齐的二进制容器支持模型权重、元数据、量化、LoRA、对比嵌入与审计见证等多种段类型Builder 与 Reader 均已实现并带 CRC32 完整性校验。训练 cratewifi-densepose-train 提供 AdamW 优化器、PCK0.2/OKS 指标、带 warmup 的学习率调度、早停、CSV 日志与 checkpoint 导出并以CsiDatasettrait 统一数据加载接口。NN 推理 cratewifi-densepose-nn 提供 ONNX Runtime 后端CPU/GPU、动态张量形状、线程安全的OnnxBackend封装onnx.rs#L229、模型信息检视与预热。感知服务器 CLI--model path、--train、--pretrain、--embed等标志已存在但从原始 CSI → 训练出.rvf→ 在线推理的端到端链路尚未打通。UI 缺口没有模型管理、训练进度可视化、LoRA 切换或嵌入检视Live Demo 无法加载训练模型或与信号推导结果并排对比。ADR 明确的用户诉求可归纳为五点能在自己环境中采集带标签的 CSI 数据不离开 UI 就能训练出.rvf模型能在 Live Demo 中加载/切换模型并直观看到质量提升能实时查看训练进度loss 曲线、验证 PCK、早停能通过 LoRA 配置文件office → home → warehouse快速适配新环境而无需全量重训。RVF 容器格式单文件打包一切RVFRuView Format是整个流水线的产物载体。从 rvf_container.rs 的文件头注释可以看到线格式约定每个段 64 字节定长头 N 字节载荷 零填充至下一个 64 字节边界。段头SegmentHeaderrvf_container.rs#L89-L190字段布局全部小端编码偏移字段类型0x00magicRVFS0x52564653u320x04version当前为 1u80x05seg_typeu80x06flagsu160x08segment_idu640x10payload_lengthu640x18timestamp_nsu640x20checksum_algo0 CRC32u80x21compressionu80x28content_hash16 字节前 4 字节为 CRC32[u8;16]0x38uncompressed_lenu320x3Calignment_padu32与 DensePose 模型相关的段类型判别符定义在 rvf_container.rs#L26-L43段类型值用途SEG_VEC0x01模型权重/向量载荷SEG_MANIFEST0x05段目录/清单JSON 元数据SEG_QUANT0x06量化字典与码本INT8SEG_META0x07任意键值元数据SEG_WITNESS0x0A计算见证/审计链训练哈希、最终指标SEG_PROFILE0x0B域配置文件SEG_EMBED0x0C对比嵌入模型权重与配置ADR-024SEG_LORA0x0D命名 LoRA 权重集用于环境适配完整性校验采用纯 Rust 实现的 CRC32IEEE 802.3 多项式 0xEDB88320查表法编译期生成见 rvf_container.rs#L49-L87不依赖rvf-wirecrate。写入侧是RvfBuilderrvf_container.rs#L246build()位于 L352读取侧是RvfReaderrvf_container.rs#L434后者暴露manifest()、witness()、lora_profiles()、segment_count()、segments()等接口——后文的模型管理与 LoRA 切换 API 正是建立在这些读取能力之上。训练 crate 的能力边界wifi-densepose-train/src/trainer.rs 的训练循环提供了 ADR 所需的完整机制AdamW 优化器L133-134、线性 warmupwarmup_lr lr × epoch / warmup_epochsL190-194、基于验证集val_pck的早停状态跟踪L164-165、CSV 日志表头epoch,train_loss,train_kp_loss,val_pck,val_oks,lr,duration_secsL155。数据侧统一由CsiDatasettrait 抽象dataset.rs#L124-L143要求Send Sync以便跨数据加载线程共享。阶段一CSI 数据录制与自监督预训练1.1 CSI 录制 APIADR 规划为感知服务器新增五个 REST 端点POST /api/v1/recording/start { duration_secs, label?, session_name } POST /api/v1/recording/stop GET /api/v1/recording/list GET /api/v1/recording/download/:id DELETE /api/v1/recording/:id仓库中这些端点已经全部落地实现见 recording.rs注意实现采用 axum 的{id}路径参数风格。关键实现细节录制文件统一存放在data/recordings/目录常量RECORDINGS_DIRrecording.rs#L31每个会话一个.csi.jsonl文件。每帧记录为 JSONL 一行RecordedFrame结构recording.rs#L56-L64包含timestamp、subcarriers子载波数组、rssi、noise_floor与提取出的features。录制不是独立的轮询线程而是挂在主 CSI 处理循环上maybe_record_frame()recording.rs#L115在每帧 CSI 到达时被调用未激活时直接返回duration_secs到期的会话会在下一帧到来时自动停止L136-140。每个录制会话带环境元数据房间尺寸、节点位置、AP 数量等并可选地通过客户端教师模型Detectron2/MediaPipe叠加摄像头姿态标签——这一项是可选的与项目的隐私优先定位保持一致。1.2 对比预训练承接 ADR-024自监督 NT-Xent 损失在无需姿态标签的情况下学习 128 维 CSI 嵌入正样本对取自同一人的相邻帧负样本取自不同会话/房间VICReg 正则项防止嵌入坍塌。产物是同时包含SEG_EMBEDSEG_VEC段的.rvf容器。训练入口为POST /api/v1/train/pretrain请求体{ dataset_ids, epochs, lr }。该端点已在 training_api.rs 注册PretrainRequesttraining_api.rs#L174-L182中epochs默认 50lr复用监督训练的默认学习率。阶段二监督训练流水线2.1 数据集集成与 CsiSample 张量契约ADR 规划三类数据源全部实现CsiDatasettraitMM-Fi loader从源码文档注释看dataset.rs#L13-L26MmFiDataset按S01/A01/wifi_csi.npy、wifi_csi_phase.npy、gt_keypoints.npy的目录布局读取 NPY 文件幅度[T, n_tx, n_rx, n_sc]并经由interpolate_subcarrierssubcarrier.rs完成 ADR 所述的 114→56 子载波插值Wi-Pose loader30→56 零填充 Hann 窗平滑自采数据阶段一的.csi.jsonl录制 摄像头生成的标签此外仓库还提供一个SyntheticCsiDatasetdataset.rs#L6-L8由物理模型生成完全确定的 CSI用于单元测试与 dry-run 检查——“绝不用随机数据”。样本张量契约由CsiSampledataset.rs#L60-L97固化amplitude: Array4f32形状[window_frames, n_tx, n_rx, n_subcarriers]phase: Array4f32同形状弧度已解缠keypoints: Array2f32形状[17, 2]COCO 17 关键点坐标归一化到[0,1]、原点在左上角keypoint_visibility: Array1f32形状[17]遵循 COCO 约定0未标注1标注但不可见2可见另附subject_id、action_id、frame_id便于数据溯源。CsiSample还预留了signal_features()钩子L104-113按需从幅度/相位推导紧凑的信号处理特征向量作为将 SOTA 信号处理 crate 的 PSD/特征接入损失的入口。2.2 训练 API 与超参默认值ADR 规划的端点集合POST /api/v1/train/start POST /api/v1/train/stop GET /api/v1/train/status // { epoch, train_loss, val_pck, val_oks, lr, eta_secs } WS /ws/train/progress // 训练指标实时流training_api.rs#L1949-L1954 中这些路由连同pretrain与lora已全部注册。TrainingConfigtraining_api.rs#L112-L165的字段与默认值如下——注意部分默认值与 ADR 提案不同以源码为准参数ADR 提案值当前代码默认值说明epochs100100训练轮数batch_size328批大小代码侧max(1)兜底learning_rate3e-40.001基础学习率weight_decay1e-41e-4AdamW 权重衰减early_stopping_patience1520验证 PCK 不再提升的容忍轮数warmup_epochs55线性 warmup 轮数pretrained_rvf—None微调用的基座.rvf路径lora_profile—None环境 LoRA 配置文件名一个值得注意的工程诚实性细节training_api.rs#L207-L215 的注释ADR-155 §2.1明确声明——TrainingStatus中的val_pck/best_pck承载的是躯干高度 PCK 代理像素空间鼻尖→髋中点与规范精度指标 hip↔hip 的pck_canonical刻意区分val_oks也只是0.88 × pck的粗略代理而非 COCO OKS。字段名保留是为了 API/UI 向后兼容使用时不应将其当作正式报告精度。2.3 RVF 导出与模型管理 API训练完成后的产物约定最优 checkpoint 导出为.rvf包含SEG_VEC权重、SEG_MANIFEST元数据、SEG_WITNESS训练哈希 最终指标与可选SEG_QUANTINT8 量化存入data/models/目录并按模型 ID 索引。对应的模型管理端点已在 model_manager.rs 全部实现GET /api/v1/models — 列出 data/models/ 下的 .rvf 及元数据 GET /api/v1/models/active — 当前加载模型状态 POST /api/v1/models/load — { model_id } 热加载 POST /api/v1/models/unload — 卸载 GET /api/v1/models/{id} — 单个模型详情从源码结构看load_model会先用RvfReader解出version、description、pck_score、has_quant、lora_profiles、段数与创建时间model_manager.rs#L159-L207并把pose_source置为model_inferencemodel_manager.rs#L367此外还带一个内建的内存回退模型便于在无真实.rvf时联调 UI。阶段三LoRA 环境适配ADR 的环境适配策略给定一个基座.rvf只微调 LoRA 适配器权重rank 4-16新环境 5-10 分钟标注数据即可新 profile 通过SEG_LORA段追加进同一个.rvf。LoRA 微调POST /api/v1/train/lora。LoraTrainRequesttraining_api.rs#L188-L205字段为{ base_model_id, dataset_ids, profile_name, rank, epochs }其中rank默认8落在 ADR 的 4-16 区间内、epochs默认30。Profile 热切换POST /api/v1/models/lora/activate { model_id, profile_name }——不重新加载基座模型即可切换 LoRA 权重。实现见 model_manager.rs#L380-L426先校验profile_name确实存在于该模型的lora_profiles列表中不存在则返回 400 并附上可用列表成功后更新active_lora_profile。GET /api/v1/models/lora/profiles则返回当前模型的{ profiles, active }供 UI 下拉框渲染。ADR 同时提醒LoRA rank 需按环境调优——过低失去表达力过高则过拟合。阶段四UI 集成ADR 规划了四个 UI 面板/扩展点其中两个新组件在当前仓库中已经存在模型管理面板ui/components/ModelPanel.js模型库列出已加载/可用的.rvf及其版本、数据集、PCK 分、大小、创建日期、RVF 段检视器权重计数、量化类型、LoRA profiles、嵌入配置、见证哈希、一键加载/卸载带进度条、信号推导 vs 模型推理对比开关。训练仪表盘ui/components/TrainingPanel.js录制控制开始/停止 CSI 录制、会话列表含时长与帧数、通过 WebSocket 实时流的 loss 曲线train/val loss与指标图PCK0.2、OKS、逐 epoch 指标表高亮最佳 epoch、早停 patience 倒计时指示、浏览器端下载训练好的.rvf。ui/index.html 中已注册 “Training” 导航页签。Live Demo 增强工具栏模型选择器在 signal-derived 与已加载.rvf间切换、LoRA profile 子下拉框、逐关键点置信度热力图叠加、姿态轨迹最近 N 帧关键点“残影”、左右 A/B 分屏对比。Settings 面板扩展ui/components/SettingsPanel.js模型段默认模型路径、启动自动加载、GPU/CPU 切换、推理线程数、训练段默认超参、checkpoint 目录、完成自动导出、录制段默认目录、最大时长、摄像头自动标注。暗色模式所有新面板遵循 ADR-035 确立的暗色主题#0d1117背景、#e0e0e0文本、半透明暗面板 彩色强调。阶段五推理链路接线5.1 模型推理姿态路径.rvf模型加载后每帧 CSI 的处理链路为CSI 帧到达UDP 或模拟源从子载波数据抽取幅度 相位张量送入 ONNX 会话input[1, T*links, 56]→output[1, 17, 4]x, y, z, conf经 pose_tracker.rs 的卡尔曼平滑通过 WebSocket 广播携带pose_source: model_inferenceUI 的 Estimation Mode 徽章从绿色 “SIGNAL-DERIVED” 切换为蓝色 “MODEL INFERENCE”。pose_source字段在 model_manager.rs 的响应结构中已是一等公民与徽章状态机直接对应。5.2 渐进式加载承接 ADR-031 的 A/B/C 分层Layer A即时信号推导姿态立即启动UI 永远不是“加载中”状态Layer B5-10 秒对比嵌入加载完成、HNSW 索引预热Layer C30-60 秒完整姿态模型加载、推理生效。三层之间无缝过渡UI 徽章自动更新。后果评估与实施排期ADR 对方案的权衡分析如下。正面用户可在自有环境中训练模型无需外部工具或 Python 依赖LoRA profile 让单个基座模型几分钟内适配多个房间训练进度实时可见、非黑盒等待A/B 对比让用户直观看到质量跃升RVF 容器把权重、元数据、LoRA、见证打成一个便携文件自监督预训练不需要标签ESP32 跑着就行渐进式加载保证 UI 永不“loading...”。负面监督训练算力开销大建议 GPUCPU 可用但慢 10-50 倍MM-Fi 与 Wi-Pose 数据集需单独下载各 10-50 GB无法随仓库打包LoRA rank 需按环境调优启用 GPU 支持后 ONNX Runtime 使二进制增大约 50 MBCPU 上实时 10 FPS 推理要求每帧约 10 ms预算很紧教师-学生标注需要摄像头权限可能与隐私优先定位冲突。缓解措施提供在 MM-Fi Wi-Pose 上预训练的基座.rvf可从发布页下载INT8 量化SEG_QUANT可将模型体积缩小约 4 倍、CPU 推理提速约 2 倍摄像头标注保持可选自监督预训练无需摄像头训练 API 在启动 GPU 训练前校验显存不足则降级 CPU 并给出警告。实施顺序与工作量ADR 原表总计 4-6 周12 阶段可与 4 并行阶段工作量依赖优先级1.1 CSI 录制 API2-3 天sensing server高1.2 对比预训练3-5 天ADR-024、录制 API高2.1 数据集集成3-5 天ADR-015、CsiDataset trait高2.2 训练 API2-3 天训练 crate、数据集 loader高2.3 RVF 导出1-2 天RvfBuilder中3.1 LoRA 微调3-5 天已训练的基座模型中3.2 Profile 切换1 天RVF 内 LoRA中4.1 模型面板 UI2-3 天models API高4.2 训练仪表盘 UI3-4 天训练 API WS高4.3 Live Demo 增强2-3 天模型加载中4.4 Settings 扩展1 天模型/训练 API低4.5 暗色模式0.5 天新面板低5.1 推理接线3-5 天ONNX 后端、pose tracker高5.2 渐进式加载2-3 天ADR-031中从仓库现状看ADR-036 列出的“新建文件”中服务端三件套recording.rs、training_api.rs、model_manager.rs与 UI 两件套ModelPanel.js、TrainingPanel.js均已存在且路由/组件注册完整可以推断该流水线的服务端与 UI 骨架已按本 ADR 落地实际行为与 ADR 提案的差异如 batch_size8、lr0.001、patience20、val_pck为躯干高度代理等均以当前源码为准。关键源码索引组件路径RVF 容器Builder/Reader、CRC32、段定义rvf_container.rsCSI 录制 APIrecording.rs训练 API WS 进度流training_api.rs模型管理 LoRA 激活model_manager.rs数据集抽象CsiDataset/CsiSampledataset.rs训练循环AdamW/warmup/早停/CSVtrainer.rsONNX 推理后端onnx.rsUI 模型面板 / 训练面板ModelPanel.js、TrainingPanel.js相关 ADRADR-015MM-Fi Wi-Pose 数据集、ADR-024对比 CSI 嵌入、ADR-029多静态感知、ADR-031渐进式加载、ADR-035UI 数据源透明化与暗色主题。【免费下载链接】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),仅供参考
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。