From f3bb09e6b545ed577031fcae0004c8c5750d22a0 Mon Sep 17 00:00:00 2001 From: qing <1776177662@qq.com> Date: Thu, 20 Aug 2026 23:45:52 +0000 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=B8=85=E7=90=86=E5=B7=B2=E8=90=BD?= =?UTF-8?q?=E5=9C=B0=E7=9A=84=20actpred=20=E5=BC=80=E5=8F=91=E6=96=B9?= =?UTF-8?q?=E6=A1=88=E5=B9=B6=E4=BF=AE=E5=A4=8D=E5=BC=95=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 审查确认三篇方案(固定范围归一化+逐列加权、多头 one-hot、 安全图像增强)均已落地实现,删除对应文档;同步修复 4 篇 实验报告与 bins.py docstring 中的 6 处引用,MODULES.md 文档 计数更新为 64 篇。 --- actpred/bins.py | 2 +- docs/MODULES.md | 2 +- ...red_action_norm_weighting_plan_20260814.md | 101 --------------- ...ixed_range_weighted_experiment_20260814.md | 1 - ...pred_onehot_multihead_dev_plan_20260814.md | 82 ------------- ...ctpred_safe_image_augmentation_20260813.md | 116 ------------------ .../actpred_sample_val_split_20260815.md | 3 +- .../actpred_zscore_baseline_20260815.md | 3 +- ..._actpred_dataset_training_eval_20260814.md | 4 +- 9 files changed, 6 insertions(+), 308 deletions(-) delete mode 100644 docs/reports/actpred_action_norm_weighting_plan_20260814.md delete mode 100644 docs/reports/actpred_onehot_multihead_dev_plan_20260814.md delete mode 100644 docs/reports/actpred_safe_image_augmentation_20260813.md diff --git a/actpred/bins.py b/actpred/bins.py index 3df5abd..123812b 100644 --- a/actpred/bins.py +++ b/actpred/bins.py @@ -1,6 +1,6 @@ """多头 one-hot 分箱 —— 18 维连续动作向量与多组 one-hot 分类目标互转 -分箱设计(actpred_onehot_multihead_dev_plan_20260814.md): +分箱设计: 0-9 舵机角:均匀 1°/箱 → 180 箱(匹配 0.75° 微动作插值数据粒度) 10 spk.F:对数分箱 log10(1+x) ∈ [0, log10(5001)] → 32 箱 11 spk.delay:对数分箱 log10(1+x) ∈ [0, log10(2001)] → 32 箱 diff --git a/docs/MODULES.md b/docs/MODULES.md index 6d90826..beda1b3 100644 --- a/docs/MODULES.md +++ b/docs/MODULES.md @@ -77,7 +77,7 @@ | 模块 | 说明 | |------|------| | tests | 黑盒测试套件(`test_db.py`/`test_gateway.py`/`test_waf.py`/`test_dnfs.py`/`test_captcha.py`/`test_smtp.py`/`test_ai_review.py`/`test_static.py`/`test_core_confs.py`),纯标准库 HTTP/TCP 用户旅程模拟,经 `test_runner.py` 统一调度(详见 [tests/blackbox/README.md](../tests/blackbox/README.md)) | -| docs | 文档聚合(security/ 审计、reviews/ 审查、reports/ 分析),67 篇 md + 1 篇 html | +| docs | 文档聚合(security/ 审计、reviews/ 审查、reports/ 分析),64 篇 md + 1 篇 html | ## 九、根级构建与部署脚本 diff --git a/docs/reports/actpred_action_norm_weighting_plan_20260814.md b/docs/reports/actpred_action_norm_weighting_plan_20260814.md deleted file mode 100644 index c52071c..0000000 --- a/docs/reports/actpred_action_norm_weighting_plan_20260814.md +++ /dev/null @@ -1,101 +0,0 @@ -# actpred 动作归一化与逐列权重开发方案 - -> 文档类型:开发方案 -> 模块:actpred(联动 pybot 数据契约) -> 作者:自动生成 -> 日期:2026-08-14 -> 前置实验:`pybot_actpred_dataset_training_eval_20260814.md` - ---- - -## 1. 问题陈述 - -闭环评估(R4)暴露:z-score 归一化把 18 列方差拉平,隐式实现"全列等权",导致**舵机精度 ↔ spk.F 频率跟踪的权衡**——未归一化模型舵机准但 spk.F 崩(21k MSE),归一化模型 spk.F 改善 3× 但简单动作恶化 1.3-25×。 - -本质:**缩放方式(数值稳定性)与列重要性(优化方向)是两个正交维度**,当前被隐式耦合。方案目标:固定物理范围归一化(数值稳定、免 stats 文件)+ 显式逐列权重(舵机优先),两者解耦。 - -## 2. 方案设计 - -### 2.1 固定物理范围 min-max 归一化(actpred 侧) - -位置决策:**归一化保留在 actpred 侧,pybot 继续记录原始量纲**。理由: - -- **raw at rest**:episode 是数据资产,原始角度/频率可复用于逆运动学、碰撞检测等分析,归一化不可逆 -- **反归一化链条**:若 pybot 侧归一化,`--loop` 执行前需反归一化,min/max 表要同时存在于 recorder 与 loop 两端;现状 `predict()` 返回原始量纲,pybot 无感知,边界更干净 -- **代码库先例**:IMU 即"pybot 记录原始、actpred `imu_norm.py` 按物理量程归一化",动作走同一条路保持一致 -- **pybot 零依赖承诺**:归一化逻辑入 recorder 会加深 pybot 对 numpy 的依赖面 - -固定范围常量表(新增 `actpred/action_norm.py`,类比 `imu_norm.py`): - -| 列 | 物理范围 | 依据 | -|---|---|---| -| 0-9 舵机角 | **[0, 180]** | `pybot/hd/servo.py` `MAX_ANGLE=180.0`(校准后全行程 0-180°) | -| 10 spk.F | [0, 5000] | `@Speaker max_f=5000` | -| 11 spk.delay | [0, 2000] | 实用上限(脚本用 10-500ms) | -| 12-17 保留位 | 恒 0 | 不参与归一化,损失权重 0 | - -min-max 映射:`x_norm = (x - lo) / (hi - lo)` → [0,1](或映射到 [-1,1],与 IMU 归一化输出区间一致,待实现时定)。 - -优点:免 action_stats.npy(消除 stats 路径类 bug 的整类风险)、零状态部署、数值区间有界。风险:min-max 对离群值敏感——若真实数据某列越界,需 clamp 到 [0,1] 并告警(防御口径与 `_action_bounds` 一致)。 - -可选细化(后续):按各舵机 `|max|`(s1=90°、s2=180°…)分列归一化,90° 舵机能用满 [0,1],分辨率更高;需要读取 @Servo 块的 max 列构建表。 - -### 2.2 逐列加权损失 - -```python -COLUMN_WEIGHTS = np.array([ - 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, # 0-9 舵机(安全关键) - 0.2, 0.2, # 10-11 spk.F / spk.delay(声音与节奏,不影响运动) - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, # 12-17 保留位(恒 0,纯噪声) -], dtype=np.float32) -# loss = mean(w * (pred - target)^2) / mean(w) -``` - -实施点: - -- `train.py` / `pretrain_mt.py` 的 `train_one_epoch` / `validate`:MSE 处乘权重向量(权重存 DataConfig,随 checkpoint 序列化,推理端无需感知) -- 权重可经 CLI `--column-weights` 覆盖(默认用上表) -- 训练集/验证集用同一权重;`evaluate.py` 的逐列误差报告不受影响(报告仍按无权重口径,便于对照) - -### 2.3 归一化与权重的组合矩阵 - -| 配置 | 数值稳定性 | 舵机精度 | spk.F 跟踪 | 预期适用 | -|---|---|---|---|---| -| raw + 等权(模型 A) | 差(loss 数百量级) | 好 | 崩 | 仅演示/对照 | -| z-score + 等权(模型 B) | 好 | 差 | 好 | 现状 | -| **固定范围 + 加权(本方案)** | 好 | 好 | 中(w=0.2 保留梯度) | **目标** | - -## 3. 配套改进(同批实施) - -### 3.1 R4 评估器修正(指标失效修复) - -1. **oob_rate 恒值列退化**:span<阈值(如 1e-3)的列不参与越界判定;或改用固定物理界(舵机 [0,180]、spk.F [0,5000])。推荐后者——与 §2.1 常量表共用,且"越物理界"比"越经验界"更符合安全语义 -2. **error_growth 长度混叠**:按 episode 归一化后聚合(每 episode 自身首末段比值取中位数),避免短 episode 尖峰主导曲线 - -### 3.2 R1-B rollout + scheduled sampling - -闭环误差累积源于 teacher forcing 训练与自预测推理的不匹配。已实现的 `--rollout-len K --ss-prob p` 直接对标:建议 `K=4, p=0.5`,与加权损失同批训练对照。 - -### 3.3 数据扩展 - -- **实机录制**(根本瓶颈):dry-run 帧为噪声、IMU 全零,视觉/姿态通路无真实信号。实机 `--record` 后复跑本实验 -- 验证集 1 个 episode 选模噪声大:val_split 0.15→0.3 -- 补充站立/保持类长序列(当前 std 类仅 1-81 步) - -## 4. 实施步骤 - -| 步骤 | 内容 | 产出 | -|---|---|---| -| 1 | 新增 `actpred/action_norm.py`:固定范围常量表 + normalize/denormalize + clamp 防御 | 独立纯 numpy 模块 + 单测 | -| 2 | DataConfig 增 `normalize_mode`(`zscore`/`fixed_range`)与 `column_weights`;dataset/train 接入 | 训练链路支持 + 单测 | -| 3 | `evaluate.py` oob 改物理界、error_growth 按 episode 归一化 | 评估器修正 + 单测 | -| 4 | 训练对照:固定范围+加权 vs z-score+等权(同种子、同数据) | 模型 C/D checkpoint | -| 5 | 复跑 R4 闭环评估,验证权衡解耦 | 对比报告 | - -步骤 1-3 可并行;步骤 4-5 依赖前置完成。预计步骤 1-3 改动集中在 `actpred/`(`action_norm.py` 新增、`config.py`/`dataset.py`/`train.py`/`evaluate.py` 小改),不影响 pybot 与部署链(归一化在推理端内部完成,`predict()` 输出仍为原始量纲)。 - -## 5. 决策记录 - -- **归一化位置**:讨论过"移入 pybot 按列 min/max 归一化"。结论:不采纳(raw at rest、反归一化链条变长、IMU 先例不一致),但采纳其"固定物理范围"内核,落在 actpred 侧常量表实现 -- **舵机范围**:±180° 为误述,实际全行程 0-180°(`servo.py MAX_ANGLE=180.0`),归一化表按 [0,180] -- **spk.F 对数尺度**:备选未定。若加权后 spk.F 跟踪仍不足,再考虑 log 变换(频率感知是对数的,10→1000 跨两个数量级) diff --git a/docs/reports/actpred_fixed_range_weighted_experiment_20260814.md b/docs/reports/actpred_fixed_range_weighted_experiment_20260814.md index 23b91ad..289daf6 100644 --- a/docs/reports/actpred_fixed_range_weighted_experiment_20260814.md +++ b/docs/reports/actpred_fixed_range_weighted_experiment_20260814.md @@ -5,7 +5,6 @@ > 作者:自动生成 > 日期:2026-08-14 > 前置实验:`pybot_actpred_dataset_training_eval_20260814.md`(模型 A/B) -> 开发方案:`actpred_action_norm_weighting_plan_20260814.md`(本实验为其步骤 4) > 后续实验:模型 D(fixed_range + 加权 + R1-B rollout),训练中 --- diff --git a/docs/reports/actpred_onehot_multihead_dev_plan_20260814.md b/docs/reports/actpred_onehot_multihead_dev_plan_20260814.md deleted file mode 100644 index 54b51d7..0000000 --- a/docs/reports/actpred_onehot_multihead_dev_plan_20260814.md +++ /dev/null @@ -1,82 +0,0 @@ -# actpred 多头 one-hot 分类输出开发方案 - -> 文档类型:开发方案 -> 模块:actpred(联动 pybot 数据契约) -> 作者:自动生成 -> 日期:2026-08-14 -> 前置实验:`pybot_actpred_dataset_training_eval_20260814.md`、 -> `actpred_fixed_range_weighted_experiment_20260814.md`(模型 A-E 系列) - ---- - -## 1. 背景与动机 - -模型 A-E 系列实验定位到两个结构性难题: - -1. **尺度放大**:fixed_range 线性 min-max 下 spk.F 的 1 个归一化单位 = 5000Hz 原始量,闭环反馈中误差滚雪球(模型 C/D 发散根因之一) -2. **精度错配**:常用值(10Hz → 0.002)挤在线性尺度的低端,[0,1] 精度预算被浪费(log_range 正在验证的对数尺度解法) - -多头 one-hot 是本问题的**结构性解法**:把 18 维连续回归换成 18 组独立分类头,每组输出一个 one-hot 分布。分类天然消除尺度放大(每箱等距)与物理界问题(箱只覆盖物理范围),且多列 softmax 是 NPU(Hailo)最擅长的计算形态。 - -## 2. 方案设计 - -### 2.1 分箱设计(每组 one-hot 的维度) - -| 列组 | 分箱方式 | 箱数/列 | 依据 | -|---|---|---|---| -| 舵机 0-9(10 列) | 均匀 **1°/箱** | 180 | 匹配数据粒度:微动作插值 0.75°/步,5° 箱会把相邻步量化进同一箱、毁掉插值结构 | -| spk.F(10) | 对数分箱 | 32 | 频率对数感知,低端聚集;log10(1+x) 均匀切 | -| spk.delay(11) | 对数分箱 | 32 | 同左 | -| 保留位 12-17 | 无头 | 0 | 恒 0,不参与 | - -**输出总量**:10×180 + 32 + 32 = **1864 logits**(当前 18)。最后层 128→1864 ≈ 238K 参数,模型 409K → ~650K,仍属轻量。 - -### 2.2 各层改动 - -| 文件 | 改动 | -|---|---| -| `actpred/bins.py`(新增) | 分箱表 + `encode(x)→one-hot` / `decode(p)→连续值`(含对数箱);纯 numpy,供推理/部署复用 | -| `model.py` | PredictionHead 输出 1864 维 → reshape (B, 18, bins) → 逐组 softmax | -| `dataset.py` | target 从 (B,18) 连续值 → 每组 one-hot;**软标签**:真值高斯扩散到 ±1-2 箱 | -| `train.py` | 损失 = Σ 列权重 × CE(组输出, one-hot 真值);列权重沿用 default_column_weights | -| `predict.py` | 输出 decode:**期望值** `Σ pᵢ·箱中心`(推荐)或 argmax 箱中心 → 18 维原始量纲 | -| `evaluate.py` | 无感——predict 返回仍是 18 维原始量纲 | -| `export_deploy` / Hailo | 多组 softmax 为 NPU 友好形态 | - -### 2.3 解码策略(执行时如何取连续值) - -| 方式 | 行为 | 评估 | -|---|---|---| -| **期望值**(推荐) | `Σ pᵢ × 箱中心` | 平滑连续,分辨率超越箱宽(1° 箱可出 46.4°);单峰假设 | -| argmax | 取最大概率箱中心 | 确定性,量化到 1° | -| 按分布采样 | 随机抽箱 | 探索用,后续离线 RL 可复用 | - -## 3. 关键决策点与理由 - -1. **舵机 1°/箱而非 5°/箱**:录制数据的微动作插值粒度为 0.75°,箱宽必须匹配数据粒度;5° 箱会把 45.0°/45.75° 压进同一箱,模型学不到特意录制的插值结构 -2. **软标签**:804 样本对 1864 logits 偏少,多数箱极少被访问。真值 one-hot 高斯扩散到邻近箱,未访问箱也能获得梯度 -3. **期望值解码补序数信息**:one-hot 丢失"45° 和 46° 相邻"先验,期望值解码在推理端部分恢复;训练端靠软标签缓解 -4. **pybot 契约零变化**:predict 输出仍是 18 维原始量纲,闭环与录制数据无感知 -5. **与现有归一化链路的兼容**:one-hot 方案独立于 zscore/fixed_range/log_range——分箱编码替代归一化,不叠加使用 - -## 4. 实施步骤 - -| 步骤 | 内容 | 产出 | -|---|---|---| -| 1 | `bins.py`:分箱表 + encode/decode + 对数箱 + 软标签工具 | 独立纯 numpy 模块 + 单测 | -| 2 | `dataset.py`:目标 one-hot 化(软标签可开关) | 数据链路 + 单测 | -| 3 | `model.py` + `train.py`:多头 softmax + 加权 CE | 模型与训练 + 单测 | -| 4 | `predict.py`:期望值/argmax 解码集成 + 冒烟 | 推理链路 + 单测 | -| 5 | 训练模型 F,与 A-E 闭环五方对比 | 对比报告 | - -## 5. 与其他方案的定位 - -- **模型 E(log_range)正在训练**:若对数尺度已解决精度错配与闭环发散,one-hot 降级为可选优化(分类头天然有界、免归一化常量表的优势仍在) -- 若 E 仍失败:one-hot 是下一个强候选(结构性消除尺度放大) -- **互补关系**:one-hot 方案与逐列权重、R1-B rollout 正交,可叠加(rollout 治 exposure bias 的结论不变,任何损失形式都需要它) - -## 6. 决策记录 - -- **箱宽**:初拟 5°/箱(保守,顾虑数据量),讨论后定为 1°/箱——数据插值粒度 0.75° 决定箱宽下限;spk 两列对数 32 箱 -- **单头多选 vs 多头单选**:softmax 单头在数学上是单选择分布;"多组 one-hot" = 18 个独立 softmax 头并行,每列一个选择 -- **多峰分布**:当前数据单峰为主,期望值解码够用;若未来出现双峰(如跨脚本姿态冲突),升级为逐箱 sigmoid 或 MDN diff --git a/docs/reports/actpred_safe_image_augmentation_20260813.md b/docs/reports/actpred_safe_image_augmentation_20260813.md deleted file mode 100644 index 7f0b5cd..0000000 --- a/docs/reports/actpred_safe_image_augmentation_20260813.md +++ /dev/null @@ -1,116 +0,0 @@ -# actpred 训练时安全图像增强 - -> 文档类型:特性报告 -> 模块:actpred -> 日期:2026-08-13 - ---- - -## 1. 背景 - -pybot dry-run 录制的 episode 数据样本量有限(11 个脚本 → 12 个 episode → ~728 样本),训练容易过拟合。直接增大数据集需要更多 `.mt` 脚本或更多轮次录制,成本较高。 - -图像增强(data augmentation)是低成本扩充样本的标准手段,但机器人动作预测场景有特殊约束:**空间变换(翻转/旋转/裁剪)会改变图像的语义坐标,而动作标签未随之变换,导致训练对错误**。例如水平翻转后,左右舵机角度应互换,但标签不变,形成错误训练信号。 - -## 2. 方案 - -### 2.1 增强范围 - -仅启用**颜色空间变换**(ColorJitter),不涉及任何空间变换: - -| 变换 | 参数 | 说明 | -|------|------|------| -| 亮度 | `±20%`(factor ∈ [0.8, 1.2]) | 模拟不同光照条件 | -| 对比度 | `±20%`(factor ∈ [0.8, 1.2]) | 模拟不同摄像头增益 | -| 饱和度 | `±20%`(factor ∈ [0.8, 1.2]) | 模拟不同色温环境 | -| 色调 | `±5%`(factor ∈ [-0.05, 0.05]) | 轻微色偏,避免模型过依赖颜色 | - -**不使用的变换**(因需同步变换动作标签): - -| 变换 | 原因 | -|------|------| -| 水平/垂直翻转 | 左右舵机角度需互换,否则标签错误 | -| 旋转 | 重力方向变化,姿态语义改变 | -| 裁剪/平移 | 视野变化导致动作-画面对应关系改变 | -| 透视变换 | 改变空间关系 | - -### 2.2 同一样本内帧间参数一致性 - -一个训练样本包含 `frame_len` 帧连续图像(默认 3 帧,间隔 10ms)。真实场景中连续帧的光照条件不变,因此**同一样本内所有帧共享同一组增强参数**,而非每帧独立随机: - -```python -if self.augment: - bf = random.uniform(0.8, 1.2) # 亮度因子,所有帧共用 - cf = random.uniform(0.8, 1.2) # 对比度因子 - sf = random.uniform(0.8, 1.2) # 饱和度因子 - hf = random.uniform(-0.05, 0.05) # 色调因子 -for p in image_paths: - image = Image.open(p).convert("RGB") - if self.augment: - image = TF.adjust_brightness(image, bf) - image = TF.adjust_contrast(image, cf) - image = TF.adjust_saturation(image, sf) - image = TF.adjust_hue(image, hf) - frames.append(self.transform(image)) -``` - -不同样本(不同 `__getitem__` 调用)使用独立随机参数,保证整个数据集的增强多样性。 - -### 2.3 自适应 frame_len - -增强逻辑在 `for p in image_paths` 循环前生成参数、循环内逐帧施加。`image_paths` 的长度由 `frame_len` 决定(`image_files[t - frame_len + 1 : t + 1]`),循环自动适配。**`frame_len` 为 1、2、3、5、10 等任意值时均无需修改代码**。 - -### 2.4 训练/验证隔离 - -| 数据集 | 增强 | 说明 | -|--------|------|------| -| 训练集 | `augment=cfg.train.augment` | CLI `--augment` 控制 | -| 验证集 | `augment=False`(默认) | 验证 loss 反映真实分布表现 | - -推理端(`predict.py` / `onnx_infer.py` / `hailo_infer.py`)不涉及增强,使用原始图像。 - -## 3. CLI 接口 - -```bash -# 训练时启用图像增强 -bash _run.sh train --data-dir ./data --epochs 100 --augment - -# 显式关闭(默认关闭) -bash _run.sh train --data-dir ./data --epochs 100 --no-augment -``` - -`--augment` 使用 `BooleanOptionalAction`,支持 `--augment` / `--no-augment` 双向开关。 - -## 4. 验证 - -### 4.1 功能验证 - -``` -dataset size: 728 samples -augment diff (should be >0): 0.3767 # 增强前后图像有差异 -two augment calls diff (should be >0): 0.2626 # 两次增强参数不同(随机性) -action_history diff (should be 0): 0.0 # 动作标签不受影响 -target diff (should be 0): 0.0 -``` - -### 4.2 端到端训练 - -`--augment --epochs 3`(64×64,batch=8)训练正常完成,loss 正常下降。 - -### 4.3 回归测试 - -全量单测 90/90 通过,无回归。 - -## 5. 改动文件 - -| 文件 | 改动 | -|------|------| -| `actpred/dataset.py` | `ActionDataset` 新增 `augment` 参数;`__getitem__` 在 Resize 前施加 ColorJitter(`torchvision.transforms.functional`) | -| `actpred/config.py` | `TrainConfig` 新增 `augment: bool = False`;`build_argparser` 新增 `--augment`;`apply_overrides` 新增映射 | -| `actpred/train.py` | 训练集构造传 `augment=cfg.train.augment`,验证集默认不增强 | - -## 6. 后续方向 - -- **空间增强(需同步标签变换)**:水平翻转时自动交换左右舵机角度(s1↔s2, s3↔s4, s5↔s6, s7↔s8),可将训练数据量翻倍。需要了解舵机配对关系后实现。 -- **动作噪声增强**:`pretrain_mt.py` 已支持 `--noise-std`,`train.py` 可同样引入,对 action_history 和 target 施加高斯扰动。 -- **更多 `.mt` 脚本**:从根本上扩大动作多样性,是提升模型泛化能力的最有效手段。 diff --git a/docs/reports/actpred_sample_val_split_20260815.md b/docs/reports/actpred_sample_val_split_20260815.md index ef2125d..0da71ae 100644 --- a/docs/reports/actpred_sample_val_split_20260815.md +++ b/docs/reports/actpred_sample_val_split_20260815.md @@ -4,8 +4,7 @@ > 模块:actpred > 作者:自动生成 > 日期:2026-08-15 -> 前置:`actpred_zscore_baseline_20260815.md`(模型 B 基线)、 -> `actpred_onehot_multihead_dev_plan_20260814.md`(one-hot 方案) +> 前置:`actpred_zscore_baseline_20260815.md`(模型 B 基线) --- diff --git a/docs/reports/actpred_zscore_baseline_20260815.md b/docs/reports/actpred_zscore_baseline_20260815.md index f195932..7a0e758 100644 --- a/docs/reports/actpred_zscore_baseline_20260815.md +++ b/docs/reports/actpred_zscore_baseline_20260815.md @@ -5,8 +5,7 @@ > 作者:自动生成 > 日期:2026-08-15 > 相关实验:`pybot_actpred_dataset_training_eval_20260814.md`(A/B 对照)、 -> `actpred_fixed_range_weighted_experiment_20260814.md`(C/D/E 失败系列)、 -> `actpred_onehot_multihead_dev_plan_20260814.md`(F 系列结构性方案) +> `actpred_fixed_range_weighted_experiment_20260814.md`(C/D/E 失败系列) --- diff --git a/docs/reports/pybot_actpred_dataset_training_eval_20260814.md b/docs/reports/pybot_actpred_dataset_training_eval_20260814.md index e4a8fd5..fc32d35 100644 --- a/docs/reports/pybot_actpred_dataset_training_eval_20260814.md +++ b/docs/reports/pybot_actpred_dataset_training_eval_20260814.md @@ -11,7 +11,7 @@ ### 1.1 背景 -在微动作分解与自监督录制特性(见 `pybot_micro_action_and_recording_20260813.md`)基础上,本实验走通完整链路:dry-run 批量录制全部 `.mt` 动作脚本 → actpred 训练(未归一化 vs z-score 归一化两个版本)→ R4 离线闭环评估,并基于评估结果给出下一步开发方案(见 `actpred_action_norm_weighting_plan_20260814.md`)。 +在微动作分解与自监督录制特性(见 `pybot_micro_action_and_recording_20260813.md`)基础上,本实验走通完整链路:dry-run 批量录制全部 `.mt` 动作脚本 → actpred 训练(未归一化 vs z-score 归一化两个版本)→ R4 离线闭环评估,并基于评估结果定位下一步开发方向(固定范围归一化 + 逐列加权,后续已落地为 `actpred/action_norm.py`)。 ### 1.2 实验目标 @@ -133,7 +133,7 @@ dry-run 下帧为合成随机噪声、IMU 全零(Mock I2C 读零)。共 13 ### 4.5 核心结论 -归一化把各列方差拉平,隐式实现了"全列等权",带来 spk.F 跟踪改善(hand 类 3× 提升),代价是舵机角跟踪精度下降(简单动作 1.3-25× 恶化)。缩放方式与列重要性是**正交**的两个维度,需要显式逐列权重解耦——详见开发方案 `actpred_action_norm_weighting_plan_20260814.md`。 +归一化把各列方差拉平,隐式实现了"全列等权",带来 spk.F 跟踪改善(hand 类 3× 提升),代价是舵机角跟踪精度下降(简单动作 1.3-25× 恶化)。缩放方式与列重要性是**正交**的两个维度,需要显式逐列权重解耦——后续以固定范围归一化 + 逐列加权落地(`actpred/action_norm.py`)。 ---