diff --git a/docs/Transformer轨迹拟合训练方案.html b/docs/Transformer轨迹拟合训练方案.html index 997cb23..6d97b0f 100644 --- a/docs/Transformer轨迹拟合训练方案.html +++ b/docs/Transformer轨迹拟合训练方案.html @@ -256,9 +256,9 @@
+
- v1(2026-10-17 20:06,
40af3b4):模型一次生成整条 32 @@ -456,12 +458,14 @@ ms)读当前关节角和目标,重新推理一段短动作块,只执行最收益目标 -冷启动(新目标到第一个动作)< 10 ms;每周期推理 + 安全检查 < -10 ms;拖拽重规划 P99(现状约 321 ms)不再存在 +冷启动(新目标到第一个动作)< 10 ms;每次推理 + 安全检查 < 20 +ms(每 60 ms 一次,留 3 倍余量;须 M4 后在浏览器实测,v2.3 +更正);拖拽重规划 P99(现状约 321 ms)不再存在 @@ -868,6 +872,55 @@ A/B,不能凭论文或玩具定结论。 底线 -实时拖拽碰撞帧 = 0(安全层保证);到达率、行程在 §9 + 实时拖拽碰撞帧 = 0(由安全层的距离下界认证保证,见 +§8.3;离散采样检查不能单独作此保证);到达率、行程在 §9 的指标上不低于现有规划器 - 早期 300 步训练的 MSE 在同一难例上 100% 穿柱、加安全层后 0% 到达(卡死),说明"欠拟合时平均模态"的风险真实存在。
0A.5 修复状态(v2.3.1)
+《方案逐项核查报告》是修复前的审查记录:它列的是问题和证据,不是修复结果。修复结果都落在本文正文里,状态如下:
++ +
+ + + +类别 +条目 +状态 ++ +硬伤 +H1 安全层距离认证、H2 时间律、H3 删交叉淡入、H4 推理节奏统一 +✅ 正文已改(§4.5、§8.1、§8.3) ++ +方案替换 +生成时引导→事后投影、RTC→训练时前缀、噪声粘滞→一致性打分、B +样条→可选、否决 CP/OneDP/朴素 1 步 FM、后缀≠DAgger +✅ 正文已改(§2.4、§4.5、§6.1A、§8.2) ++ +内部不一致 +I1 epoch、I2 样本数、I3 APG 展开长度、I4 时间集成、I5 候选数、I6 +k_prev、I7 输入表、I8 流头损失、I9 延迟预算、I10 安全层耗时、I11 +检查口径、I12 加速度上限(已列为待定参数)、I13 D 类分母、I14 +门禁/验收分离、I15 用时口径、I16 碰撞保证表述、I17 重训耗时、I18 +预热表述、I19 执行步数、I21 非马尔可夫、I22 子目标触发、I23 +精修过安全层、I24 模型体积 +✅ 正文已改 ++ +内部不一致 +I20 route 基准口径不符 +已重跑:仓库 40 例基准为到达 40/40、有效 39/40,§9.2 +现状列已按实测改写;说明老师本身在 1 例上路径不合格,M1 +数据过滤(§4.4)必须把这类样本丢掉 ++ + +只能靠实测消除 +浏览器推理延迟;一步头 vs WTA +谁更好;老师一致性;距离认证后的拒绝率是否影响 30/30;APG +是否压缩多模态;真机加速度上限 +⏳ 已设门禁与回退(§0A.2),在 M1/M4/M5/M7 +里按顺序测,论文和推理消除不了 +0A.4 仍需用户确认 / 实测才能消除的风险
@@ -1032,8 +1085,8 @@ APG)。
1 一次生成整条 32 点路径,开环执行 闭环 + 短动作块滚动执行 -改为动作块策略:每周期输出未来 16 步(320 -ms),只执行前 2–4 步 +改为动作块策略:每周期输出未来 16 步(320 ms),每 +60 ms 推理一次,提交并执行前 3 步(v2.3 统一) 用户要求每周期重算;可纠错、可应对拖拽目标变化 @@ -1417,9 +1470,25 @@ type="checkbox" />测试集与训练集、基准案例无重叠 上一周期选的模式 k_prev K+1 -one-hot(含"无"),用于模式粘滞 +one-hot(含"无"),仅 WTA 基线头使用 + +当前关节速度 q_t − q_{t−1} +6 +按每轴速度上限归一化(v2.3 新增,使时间律可观测) ++ +已提交未执行前缀 +3×6 +前缀 Δq + 有效长度掩码(v2.3 新增,训练时随机遮盖 0–3 步) ++ +当前子目标 +6 +子目标头输出的关节途经点(sin/cos +前的弧度,归一化);无子目标时填当前 q(v2.3 新增) +关键胶囊对最小距离 8 当前位形下臂各段到立柱的胶囊距离(cheap,现成函数),给模型"离柱子多近"的直接信号 @@ -1454,7 +1523,7 @@ K×16 个可学习动作 token ──▶ 4 层 Transformer decoder(非自回 ├─ 动作头:每 token 输出 6 维 Δq ├─ 模式分类头:K=4 ├─ 价值头(剩余时间/代价):1 ← v2.1,§8.5 - └─ 子目标头:2 个关节空间途经点 + 是否需要(仅冷启动用)← v2.1,§8.5 + └─ 子目标头:2 个关节空间途经点 + 是否需要(触发:新目标或目标跳变 > 50 mm;到达子目标 < 5° 后切下一个;v2.3 定义)← v2.1,§8.5
@@ -1546,7 +1615,12 @@ A/B;若一步流匹配不优于 WTA,回退 WTA(风险可控)。 + CE(模式分类) 权重 0.5 + FK 损失:预测与标签位形下各连杆胶囊端点的位置差 权重 0.5 ← 借鉴 ELMP + 平滑:二阶差分 权重 0.05 - + L1(剩余时间) 权重 0.1 + + L1(剩余时间) 权重 0.1 (与价值头共用一个输出,不重复) + 一步流匹配头(v2.3 补):
+L = MeanFlow 损失(或 Shortcut 自一致 + FM 锚定损失) 权重 1.0 + + FK 损失:一步生成输出(固定噪声)的胶囊端点位置差 权重 0.5 + + 平滑:二阶差分(作用于一步输出) 权重 0.05 + + 子目标头 L1 + 价值头 L1 权重 0.1 / 0.16.3 训练配置
@@ -1562,7 +1636,8 @@ A/B;若一步流匹配不优于 WTA,回退 WTA(风险可控)。
学习率 -1e-3,预热 1000 步,余弦退火(同 DRP 量级) +1e-3,预热 1000 步,余弦退火(DRP 预热 100 步;我们 batch 更大,取 +1000,v2.3 更正表述) batch @@ -1593,8 +1668,9 @@ epoch),验证集闭环成功率不再上升即停collideFree对拍 10 万个位形,判定 0 误差。- 验证用闭环仿真而不是单步误差:从 1000 个验证任务的 q0 出发,每 20 ms 推理一次、提交前 3 步,直到到达或超时(超时 = -老师同任务路径动画时长 × 2,最少 3 -s),统计到达率、碰撞步数(安全层关闭时)、行程比。
+老师同任务路径动画时长 × 2,最少 3 s),统计到达率、用时 ≤ 老师 +× 1.3 的达标率(与 §9.2 +口径一致,v2.3)、碰撞步数(安全层关闭时)、行程比。
7. 第四步:后训练(无老师为主)
@@ -1603,7 +1679,7 @@ ELMP)不再请老师标注,直接让模型在可微仿真里闭环展开,用代价反传:
+ 接近目标(< 5 mm)时可选做 1–3 次局部牛顿精修(solveTo 单步,不是全量 IK);精修段同样必须通过安全层认证(v2.3)for 每个 batch(随机采样 q0 和目标,82 ms 级别的便宜采样,不需要老师): q = q0 - for t in 0..H-1 (H = 60 个周期 ≈ 1.2 s,长任务分段展开): + for t in 0..H-1 (H = 60 次推理 × 3 步 = 180 步 ≈ 3.6 s,与部署节奏一致;长任务分段截断反传,v2.3 更正): chunk, logits = π(obs(q, 目标)) Δq = chunk[选中模式][0:3] # 执行前 3 步,与部署一致 q = clamp(q + Δq) # 限位 @@ -1643,7 +1719,8 @@ E3 绕远(> 1.2× 参考)/ E4 末端精度差 / E5 模式来回切换 ≥- 只有 E2(卡在局部极小——可微代价本身解决不了的"需要绕远路"问题)才可选地请老师离线给一条路径做行为克隆补充。这是唯一残留的老师用途,量很小,可以在沙箱慢慢跑。
-- 门禁:留出集闭环到达率上升、三个基准不退化、上一轮修好的错题 +
- 门禁(v2.3:门禁集与 §9 +验收集分开造,验收集只在最后用一次):门禁集闭环到达率上升、三个基准不退化、上一轮修好的错题 95% 仍对;否则回滚。
- 停止:连续 2 轮提升 < 0.5 个百分点,或满 6 轮,或达到 §9 全部标准。
@@ -1665,7 +1742,7 @@ Hz) 下一周期的新结果会覆盖它们;若下一周期推理超时或全部不安全,就沿缓冲 + 刹停段安全停下) 5. 全部不通过 → 进入刹停:按已验证的刹停轨迹减速停下,保持;下一周期继续推理 6. 到达判据:TCP 误差 < 1 mm(pose 另需 < 0.5°)且速度≈0 → 结束; - 接近目标(< 5 mm)时可选做 1–3 次局部牛顿精修(solveTo 单步,不是全量 IK)v2.3:删除插补器交叉淡入/时间集成(见 H3)。执行的必须就是安全层认证过的那一块;块间连续性由前缀条件和一致性打分保证。"每 20 ms 重推理只执行 1 步"仅作 A/B 对照。
@@ -1688,9 +1765,11 @@ mm/°)即判整段安全,否则二分到通过或判不安全;自碰撞对- 可刹停不变式:执行前还要检查"从第 3 步末状态按最大减速度(v2.3 新增每轴加速度上限,待真机参数)停下"的刹停段也无干涉。于是任何时候系统都处在"有一条已验证的停车路线"的状态,下一周期就算模型完全失效,也只会停下、不会撞。
-- 耗时:3 步 × 4 候选,最坏约 4 × 10 个采样位形 × 约 1.8 ms ≈ 70 -ms(太慢)→ 实际做法: +
- 耗时(v2.3 重估):每步主导轴 4–13°,3 步 + 刹停段按离散采样需 13–39 +个位形;8 候选最坏 8 × 39 × 1.25 ms ≈ 390 ms(不可接受)→ 实际做法:
+
- 距离认证:每段一次距离查询覆盖整段,不通过才二分,通常 2–6 +次查询;
- 先用现有包围球预筛(大多数位形直接判安全,见 2026-10-15 记录 collideFree 2.9→1.8 ms);
- 按排序逐个检查,第一个通过就停(多数周期只检查 1 @@ -1711,7 +1790,7 @@ Worker 与推理流水线并行)。
- @@ -1770,8 +1849,8 @@ A*)。去掉老师后,全局"想清楚往哪绕"这件事必须由模型自traj_v2.onnx(fp16,约 7 MB)+ +traj_v2.onnx(fp16,约 8.3 MB:4.13M 参数 × 2 B)+norm.jsonPRM 路网( collide.json.roadmap)、IK 候选大表- 价值头(剩余代价估计):模型额外预测"从这个状态到目标还要多少时间"。APG 展开时有真实值可监督,不需要老师。部署时用它给 K 个模式打分,并作为"有没有进展"的判据。
-- 短前瞻选模式:每周期对 K=4 -个模式各自再往前推一块(共 2 次批量前向 ≈ 2 × 2–5 ms),用 胶囊碰撞 + +
- 短前瞻选模式:每次推理对候选(WTA 4 条 / 一步头 8 +条)各自再往前推一块(共 2 次批量前向,延迟待实测),用 胶囊碰撞 + 价值头 给 32 步后的终态打分,选最好的。比只看第一块的概率更能避开"走两步就撞墙"的分支。
- 卡死检测 + 强制换向:0.3 s 内价值头没有下降、或连续 @@ -1779,8 +1858,8 @@ A*)。去掉老师后,全局"想清楚往哪绕"这件事必须由模型自 判定卡死,强制切到另一个绕行方向(另一个子目标/模式)并锁定 1 s(防止又切回来)。规则很简单、确定性、可测试。
- 训练侧针对性加强:贴柱类任务在 APG 采样里占 -40%;APG 展开长度覆盖整段绕行(约 3 s = 150 -个周期,分段截断反传);对贴柱任务做拒绝采样自蒸馏(§7.3),模型自己成功的路线成为新标签。
+40%;APG 展开长度覆盖整段绕行(约 3 s = 150 步 = 50 +次推理,分段截断反传);对贴柱任务做拒绝采样自蒸馏(§7.3),模型自己成功的路线成为新标签。验收相应改为(§9.2):near pos / near rt 都必须 30/30,且到达用时 ≤ 老师路径动画时长 × 1.3。
@@ -1893,9 +1972,10 @@ ms(Normal)对本方案的评估:
- 策略层 50 Hz(20 ms)合适:与 π0、ACT 同档,高于 -ELMP 的 30 Hz 和 MπNets 的 9 Hz;我们模型小(3–4 M)、无点云,单次前向 + -安全检查预计 < 10 ms,留有一倍余量。浏览器里 -
+ELMP 的 30 Hz 和 MπNets 的 9 Hz;我们模型小(3–4 +M)、无点云,v2.3:推理每 60 ms 一次(执行仍 50 Hz),推理 + 安全 < +20 ms 为目标,须实测。浏览器 rAF 为 60 Hz、与 20 ms +不整除且后台标签页会节流,执行时钟放 Web Worker、按实际 dt 插值。requestAnimationFrame是 60 Hz,50 Hz 也能稳定跑。- "提交 3 步(60 ms)"合适,且应按刹停距离定:它的作用是给推理抖动和通信滞后留缓冲。ABB EGM 自身就有 10–20 ms 滞后;60 ms 足以覆盖一次推理超时 + @@ -1967,7 +2047,10 @@ rt) rt 30/30,另造 ≥1000 例 near_column 一次性验收集 0 失败;held-out(分母只算可达任务)≥ 98%,D 类另考停靠距离 ≤ 老师 + 5 mm -
60/60、30/30、30/30 +60 例随机基准(沙箱 bench.cjs)有效 60/60;仓库 + tests/route_bench.cjs(40 例)在3c7c814+上重跑:到达 40/40、细验有效 39/40(1 +例到达但路径细验不过,2026-10-17 21:28 实测);near 30/30、30/30到达用时 @@ -1985,8 +2068,8 @@ rt 30/30,另造 ≥1000 例 near_column首次全量 IK 最差约 2 s - 每周期耗时(推理+安全层)P99 -< 15 ms +每次推理(每 60 ms)耗时(推理+安全层)P99 +< 20 ms 拖拽重规划 P99 约 321 ms @@ -2016,8 +2099,8 @@ rt 30/30,另造 ≥1000 例 near_column 类数据加权、模式头学左右绕、E2 错题少量老师补数据(§7.2)。这是无老师方案最大的风险。 - 碰撞模型/立柱变动 = -重训:指纹不一致即拒绝运行。重训流程:§4(约 5 h)→ §6(约 4 -h)→ §7(约 2–4 h)。
+重训:指纹不一致即拒绝运行。重训流程:§4(约 5 h)→ §6(约 +1.5–5.6 h,以 2000 步吞吐实测为准)→ §7(约 2–4 h)。- 安全层耗时:最坏周期可能超 5 ms,见 §8.3 的流水线方案。
- 老师缺陷:
ci27diff --git a/docs/Transformer轨迹拟合训练方案.md b/docs/Transformer轨迹拟合训练方案.md index 050f417..b58cf81 100644 --- a/docs/Transformer轨迹拟合训练方案.md +++ b/docs/Transformer轨迹拟合训练方案.md @@ -1,4 +1,4 @@ -# Transformer 避障运动策略:无老师闭环部署方案(审查稿 v2.3) +# Transformer 避障运动策略:无老师闭环部署方案(审查稿 v2.3.1) > - v1(2026-10-17 20:06,`40af3b4`):模型一次生成整条 32 点路径,失败回落到原规划器("有老师部署")。 > - v1.1(20:25,`c51f8f9`):加入后训练挖错循环。 @@ -21,8 +21,8 @@ | 碰撞安全层 | **保留**。它不是老师:不做搜索,只对模型给出的下一小段做胶囊碰撞检查(已有 `collideFree` + 包围球预筛),不安全就换候选或刹停 | | 老师的角色 | 只在**离线训练**时出现:生成预训练数据。后训练阶段用可微碰撞代价(§7),基本不再需要老师 | | 不做的事 | 不学动力学(速度/加速度上限由插补器保证);不用相机/点云(环境固定:台架 + P01 立柱,几何已知) | -| 收益目标 | 冷启动(新目标到第一个动作)< 10 ms;每周期推理 + 安全检查 < 10 ms;拖拽重规划 P99(现状约 321 ms)不再存在 | -| 底线 | 实时拖拽**碰撞帧 = 0**(安全层保证);到达率、行程在 §9 的指标上不低于现有规划器 | +| 收益目标 | 冷启动(新目标到第一个动作)< 10 ms;每次推理 + 安全检查 < 20 ms(每 60 ms 一次,留 3 倍余量;须 M4 后在浏览器实测,v2.3 更正);拖拽重规划 P99(现状约 321 ms)不再存在 | +| 底线 | 实时拖拽**碰撞帧 = 0**(由安全层的距离下界认证保证,见 §8.3;离散采样检查不能单独作此保证);到达率、行程在 §9 的指标上不低于现有规划器 | 为什么安全层必须保留:调研里最好的神经运动策略在静态场景里仍有约 10% 的轨迹发生碰撞(§1 DRP 附录表 6、ELMP 表 I)。 我们的环境几何完全已知、检查只要几毫秒,保留它代价极小,却把"偶尔撞一下"变成"偶尔停一下"。 @@ -94,6 +94,18 @@ - **没能区分**:闭环里状态一偏离中轴,MSE/WTA 也能自然打破对称,所以这个玩具任务太容易,**分不出一步头和 WTA 谁更好**。真实 6 轴、位姿目标下的多峰更复杂,必须在 M5 用真实数据 A/B,不能凭论文或玩具定结论。 - 早期 300 步训练的 MSE 在同一难例上 100% 穿柱、加安全层后 0% 到达(卡死),说明"欠拟合时平均模态"的风险真实存在。 +### 0A.5 修复状态(v2.3.1) + +《方案逐项核查报告》是**修复前**的审查记录:它列的是问题和证据,不是修复结果。修复结果都落在本文正文里,状态如下: + +| 类别 | 条目 | 状态 | +|---|---|---| +| 硬伤 | H1 安全层距离认证、H2 时间律、H3 删交叉淡入、H4 推理节奏统一 | ✅ 正文已改(§4.5、§8.1、§8.3) | +| 方案替换 | 生成时引导→事后投影、RTC→训练时前缀、噪声粘滞→一致性打分、B 样条→可选、否决 CP/OneDP/朴素 1 步 FM、后缀≠DAgger | ✅ 正文已改(§2.4、§4.5、§6.1A、§8.2) | +| 内部不一致 | I1 epoch、I2 样本数、I3 APG 展开长度、I4 时间集成、I5 候选数、I6 k_prev、I7 输入表、I8 流头损失、I9 延迟预算、I10 安全层耗时、I11 检查口径、I12 加速度上限(已列为待定参数)、I13 D 类分母、I14 门禁/验收分离、I15 用时口径、I16 碰撞保证表述、I17 重训耗时、I18 预热表述、I19 执行步数、I21 非马尔可夫、I22 子目标触发、I23 精修过安全层、I24 模型体积 | ✅ 正文已改 | +| 内部不一致 | I20 route 基准口径不符 | 已重跑:仓库 40 例基准为到达 40/40、有效 39/40,§9.2 现状列已按实测改写;**说明老师本身在 1 例上路径不合格,M1 数据过滤(§4.4)必须把这类样本丢掉** | +| **只能靠实测消除** | 浏览器推理延迟;一步头 vs WTA 谁更好;老师一致性;距离认证后的拒绝率是否影响 30/30;APG 是否压缩多模态;真机加速度上限 | ⏳ 已设门禁与回退(§0A.2),在 M1/M4/M5/M7 里按顺序测,**论文和推理消除不了** | + ### 0A.4 仍需用户确认 / 实测才能消除的风险 1. 浏览器端推理延迟(最大不确定项,M4 后第一时间测)。 @@ -146,7 +158,7 @@ | # | v1 做法 | 主流做法 | v2 调整 | 理由 | |---|---|---|---|---| -| 1 | 一次生成整条 32 点路径,开环执行 | 闭环 + 短动作块滚动执行 | **改为动作块策略**:每周期输出未来 16 步(320 ms),只执行前 2–4 步 | 用户要求每周期重算;可纠错、可应对拖拽目标变化 | +| 1 | 一次生成整条 32 点路径,开环执行 | 闭环 + 短动作块滚动执行 | **改为动作块策略**:每周期输出未来 16 步(320 ms),每 60 ms 推理一次,提交并执行前 3 步(v2.3 统一) | 用户要求每周期重算;可纠错、可应对拖拽目标变化 | | 2 | 失败回落原规划器 | 无回落;靠后训练提升 + 局部反应/检查 | **删除回落**,改为安全层:换候选 → 刹停保持 → 下周期重算 | 用户决定无老师部署 | | 3 | 512 桶离散化 + 自回归 186 token | DRP 用 MSE 回归动作块;Neural MP 用 GMM | **K 个模式的动作块头(K=4)+ 模式分类**,非自回归一次前向 | 闭环下多峰主要出现在"刚出发选左绕还是右绕",K 模式足够;一次前向比 186 步自回归快一个数量级 | | 4 | 以目标位姿为条件 | DRP 用目标关节角(IK 另算);ELMP 用目标位姿 | **用目标位姿**(位置 + 6D 旋转 + 模式标志),末段可选局部牛顿精修 | 无老师就没有全量 IK;位姿条件让模型连 IK 一起学。局部牛顿精修只是梯度下降几步,不属于搜索 | @@ -284,7 +296,10 @@ pip install numpy pyarrow tqdm tensorboard onnx onnxruntime | 目标姿态 R | 6 | 6D 表示;pos 模式填 0 | | 目标 − 当前 TCP | 3 | 位置差,/600 mm | | 模式 | 2 | one-hot [pos, pose] | -| 上一周期选的模式 k_prev | K+1 | one-hot(含"无"),用于模式粘滞 | +| 上一周期选的模式 k_prev | K+1 | one-hot(含"无"),**仅 WTA 基线头使用** | +| 当前关节速度 q_t − q_{t−1} | 6 | 按每轴速度上限归一化(v2.3 新增,使时间律可观测) | +| 已提交未执行前缀 | 3×6 | 前缀 Δq + 有效长度掩码(v2.3 新增,训练时随机遮盖 0–3 步) | +| 当前子目标 | 6 | 子目标头输出的关节途经点(sin/cos 前的弧度,归一化);无子目标时填当前 q(v2.3 新增) | | 关键胶囊对最小距离 | 8 | 当前位形下臂各段到立柱的胶囊距离(cheap,现成函数),给模型"离柱子多近"的直接信号 | ### 5.2 输出(动作块) @@ -314,7 +329,7 @@ K×16 个可学习动作 token ──▶ 4 层 Transformer decoder(非自回 ├─ 动作头:每 token 输出 6 维 Δq ├─ 模式分类头:K=4 ├─ 价值头(剩余时间/代价):1 ← v2.1,§8.5 - └─ 子目标头:2 个关节空间途经点 + 是否需要(仅冷启动用)← v2.1,§8.5 + └─ 子目标头:2 个关节空间途经点 + 是否需要(触发:新目标或目标跳变 > 50 mm;到达子目标 < 5° 后切下一个;v2.3 定义)← v2.1,§8.5 ``` | 超参 | 值 | @@ -348,7 +363,16 @@ L = WTA-L1(动作块, 最近模式) 权重 1.0 + CE(模式分类) 权重 0.5 + FK 损失:预测与标签位形下各连杆胶囊端点的位置差 权重 0.5 ← 借鉴 ELMP + 平滑:二阶差分 权重 0.05 - + L1(剩余时间) 权重 0.1 + + L1(剩余时间) 权重 0.1 (与价值头共用一个输出,不重复) +``` + +一步流匹配头(v2.3 补): + +``` +L = MeanFlow 损失(或 Shortcut 自一致 + FM 锚定损失) 权重 1.0 + + FK 损失:一步生成输出(固定噪声)的胶囊端点位置差 权重 0.5 + + 平滑:二阶差分(作用于一步输出) 权重 0.05 + + 子目标头 L1 + 价值头 L1 权重 0.1 / 0.1 ``` ### 6.3 训练配置 @@ -356,7 +380,7 @@ L = WTA-L1(动作块, 最近模式) 权重 1.0 | 项 | 值 | |---|---| | 优化器 | AdamW,β=(0.9, 0.95),wd 0.01 | -| 学习率 | 1e-3,预热 1000 步,余弦退火(同 DRP 量级) | +| 学习率 | 1e-3,预热 1000 步,余弦退火(DRP 预热 100 步;我们 batch 更大,取 1000,v2.3 更正表述) | | batch | 1024(3090 24 GB) | | 精度 | bf16 混合精度 | | 步数 | 先跑 2000 步测吞吐再定;参考:200 万样本 × 30 epoch ÷ bs 1024 ≈ 6 万步(v2.3 更正:原"20 万步≈30 epoch"实为约 68 epoch),验证集闭环成功率不再上升即停 | @@ -365,7 +389,7 @@ L = WTA-L1(动作块, 最近模式) 权重 1.0 ### 6.4 对拍与验证(每 epoch) - `ml/eval/collide_torch.py`:胶囊距离的 PyTorch 批量版(**可微**,§7 要用),先与 JS `collideFree` 对拍 10 万个位形,判定 0 误差。 -- 验证用**闭环仿真**而不是单步误差:从 1000 个验证任务的 q0 出发,每 20 ms 推理一次、提交前 3 步,直到到达或超时(超时 = 老师同任务路径动画时长 × 2,最少 3 s),统计到达率、碰撞步数(安全层关闭时)、行程比。 +- 验证用**闭环仿真**而不是单步误差:从 1000 个验证任务的 q0 出发,每 20 ms 推理一次、提交前 3 步,直到到达或超时(超时 = 老师同任务路径动画时长 × 2,最少 3 s),统计到达率、**用时 ≤ 老师 × 1.3 的达标率**(与 §9.2 口径一致,v2.3)、碰撞步数(安全层关闭时)、行程比。 --- @@ -378,7 +402,7 @@ L = WTA-L1(动作块, 最近模式) 权重 1.0 ``` for 每个 batch(随机采样 q0 和目标,82 ms 级别的便宜采样,不需要老师): q = q0 - for t in 0..H-1 (H = 60 个周期 ≈ 1.2 s,长任务分段展开): + for t in 0..H-1 (H = 60 次推理 × 3 步 = 180 步 ≈ 3.6 s,与部署节奏一致;长任务分段截断反传,v2.3 更正): chunk, logits = π(obs(q, 目标)) Δq = chunk[选中模式][0:3] # 执行前 3 步,与部署一致 q = clamp(q + Δq) # 限位 @@ -404,7 +428,7 @@ for 每个 batch(随机采样 q0 和目标,82 ms 级别的便宜采样,不 4. **错题分类**:E1 撞了 / E2 没到(超时或卡在局部极小)/ E3 绕远(> 1.2× 参考)/ E4 末端精度差 / E5 模式来回切换 ≥ 3 次 / E6 拖拽失稳。 5. **针对性训练**:错题的起点和目标(以及 ±5 mm / ±3° 的 10 个邻居)加入 APG 的采样池,按类别加权(E1、E6 ×2)。 - 只有 E2(卡在局部极小——可微代价本身解决不了的"需要绕远路"问题)才可选地请老师离线给一条路径做行为克隆补充。这是唯一残留的老师用途,量很小,可以在沙箱慢慢跑。 -6. **门禁**:留出集闭环到达率上升、三个基准不退化、上一轮修好的错题 95% 仍对;否则回滚。 +6. **门禁**(v2.3:门禁集与 §9 验收集分开造,验收集只在最后用一次):门禁集闭环到达率上升、三个基准不退化、上一轮修好的错题 95% 仍对;否则回滚。 7. **停止**:连续 2 轮提升 < 0.5 个百分点,或满 6 轮,或达到 §9 全部标准。 ### 7.3 可选:拒绝采样自蒸馏 @@ -428,7 +452,7 @@ for 每个 batch(随机采样 q0 和目标,82 ms 级别的便宜采样,不 下一周期的新结果会覆盖它们;若下一周期推理超时或全部不安全,就沿缓冲 + 刹停段安全停下) 5. 全部不通过 → 进入刹停:按已验证的刹停轨迹减速停下,保持;下一周期继续推理 6. 到达判据:TCP 误差 < 1 mm(pose 另需 < 0.5°)且速度≈0 → 结束; - 接近目标(< 5 mm)时可选做 1–3 次局部牛顿精修(solveTo 单步,不是全量 IK) + 接近目标(< 5 mm)时可选做 1–3 次局部牛顿精修(solveTo 单步,不是全量 IK);精修段同样必须通过安全层认证(v2.3) ``` v2.3:**删除插补器交叉淡入/时间集成**(见 H3)。执行的必须就是安全层认证过的那一块;块间连续性由前缀条件和一致性打分保证。"每 20 ms 重推理只执行 1 步"仅作 A/B 对照。 @@ -442,7 +466,8 @@ v2.3:**删除插补器交叉淡入/时间集成**(见 H3)。执行的必 - 检查内容(v2.3 修正,见 H1):臂×立柱/台架用**距离下界认证**——段两端最小距离之和 > Σ_j r_j·|Δθ_j|(r_j 为每轴实测杠杆上界,J1 约 9.0 mm/°)即判整段安全,否则二分到通过或判不安全;自碰撞对复用 pair2d 杠杆界;外加关节限位。离散 1°+半格检查只作快速预筛,不再作为保证。现有代码口径实为 1.5°+半格,文档原写法有误。 - **可刹停不变式**:执行前还要检查"从第 3 步末状态按最大减速度(v2.3 新增每轴加速度上限,待真机参数)停下"的刹停段也无干涉。于是任何时候系统都处在"有一条已验证的停车路线"的状态,下一周期就算模型完全失效,也只会停下、不会撞。 -- 耗时:3 步 × 4 候选,最坏约 4 × 10 个采样位形 × 约 1.8 ms ≈ 70 ms(太慢)→ 实际做法: +- 耗时(v2.3 重估):每步主导轴 4–13°,3 步 + 刹停段按离散采样需 13–39 个位形;8 候选最坏 8 × 39 × 1.25 ms ≈ 390 ms(不可接受)→ 实际做法: + - 距离认证:每段一次距离查询覆盖整段,不通过才二分,通常 2–6 次查询; - 先用现有包围球预筛(大多数位形直接判安全,见 2026-10-15 记录 collideFree 2.9→1.8 ms); - 按排序**逐个**检查,第一个通过就停(多数周期只检查 1 条); - 目标:每周期安全检查 < 5 ms(需在 M6 实测;不达标则把检查放到 Web Worker 与推理流水线并行)。 @@ -452,7 +477,7 @@ v2.3:**删除插补器交叉淡入/时间集成**(见 H3)。执行的必 | 有 | 没有 | |---|---| -| `traj_v2.onnx`(fp16,约 7 MB)+ `norm.json` | PRM 路网(`collide.json.roadmap`)、IK 候选大表 | +| `traj_v2.onnx`(fp16,约 8.3 MB:4.13M 参数 × 2 B)+ `norm.json` | PRM 路网(`collide.json.roadmap`)、IK 候选大表 | | 胶囊碰撞检查(现有 `collideFree`、包围球预筛、`pair2d` 表) | `solveDyn` / `routeRT` / RRT / A* | | 正运动学 `fk` / `orient`、局部牛顿精修 `solveTo` 单步 | 全量 IK 枚举 | @@ -472,9 +497,9 @@ v2.3:**删除插补器交叉淡入/时间集成**(见 H3)。执行的必 1. **全局子目标头(分层)**:模型在冷启动(新目标到达的第一个周期)额外输出 1–2 个途经点(关节空间),作为"绕柱方向"的锚点;之后每周期的动作块以"当前子目标"为条件,到达子目标后切到下一个。训练标签直接取自老师路径的拐点(离线已有)。这相当于把老师的全局搜索结果蒸馏成一次前向。 2. **价值头(剩余代价估计)**:模型额外预测"从这个状态到目标还要多少时间"。APG 展开时有真实值可监督,不需要老师。部署时用它给 K 个模式打分,并作为"有没有进展"的判据。 -3. **短前瞻选模式**:每周期对 K=4 个模式各自再往前推一块(共 2 次批量前向 ≈ 2 × 2–5 ms),用 胶囊碰撞 + 价值头 给 32 步后的终态打分,选最好的。比只看第一块的概率更能避开"走两步就撞墙"的分支。 +3. **短前瞻选模式**:每次推理对候选(WTA 4 条 / 一步头 8 条)各自再往前推一块(共 2 次批量前向,延迟待实测),用 胶囊碰撞 + 价值头 给 32 步后的终态打分,选最好的。比只看第一块的概率更能避开"走两步就撞墙"的分支。 4. **卡死检测 + 强制换向**:0.3 s 内价值头没有下降、或连续 2 个周期刹停 → 判定卡死,强制切到另一个绕行方向(另一个子目标/模式)并锁定 1 s(防止又切回来)。规则很简单、确定性、可测试。 -5. **训练侧针对性加强**:贴柱类任务在 APG 采样里占 40%;APG 展开长度覆盖整段绕行(约 3 s = 150 个周期,分段截断反传);对贴柱任务做拒绝采样自蒸馏(§7.3),模型自己成功的路线成为新标签。 +5. **训练侧针对性加强**:贴柱类任务在 APG 采样里占 40%;APG 展开长度覆盖整段绕行(约 3 s = 150 步 = 50 次推理,分段截断反传);对贴柱任务做拒绝采样自蒸馏(§7.3),模型自己成功的路线成为新标签。 验收相应改为(§9.2):near pos / near rt 都必须 **30/30**,且到达用时 ≤ 老师路径动画时长 × 1.3。 @@ -508,7 +533,7 @@ v2.3:**删除插补器交叉淡入/时间集成**(见 H3)。执行的必 **对本方案的评估:** -1. **策略层 50 Hz(20 ms)合适**:与 π0、ACT 同档,高于 ELMP 的 30 Hz 和 MπNets 的 9 Hz;我们模型小(3–4 M)、无点云,单次前向 + 安全检查预计 < 10 ms,留有一倍余量。浏览器里 `requestAnimationFrame` 是 60 Hz,50 Hz 也能稳定跑。 +1. **策略层 50 Hz(20 ms)合适**:与 π0、ACT 同档,高于 ELMP 的 30 Hz 和 MπNets 的 9 Hz;我们模型小(3–4 M)、无点云,v2.3:推理每 60 ms 一次(执行仍 50 Hz),推理 + 安全 < 20 ms 为目标,须实测。浏览器 rAF 为 60 Hz、与 20 ms 不整除且后台标签页会节流,执行时钟放 Web Worker、按实际 dt 插值。 2. **"提交 3 步(60 ms)"合适,且应按刹停距离定**:它的作用是给推理抖动和通信滞后留缓冲。ABB EGM 自身就有 10–20 ms 滞后;60 ms 足以覆盖一次推理超时 + 一次滞后。真机上应改成规则:提交步数 n ≥ ⌈(通信滞后 + 1 次推理最坏耗时) / 20 ms⌉ + 1,且刹停段另行验证。 3. **伺服层不归本方案管,但要匹配**:策略输出 50 Hz 关节目标,由插补器升采样到电机控制器的频率(舵机 50 Hz 直接用;总线舵机/步进/FOC 驱动通常 ≥ 250 Hz–1 kHz,做三次样条插值)。 4. **做成可配置**:`dt`(默认 20 ms)、提交步数 n(默认 3)、动作块长度 S(默认 16 = 320 ms)。训练数据按 dt = 20 ms 生成;若真机必须改到 10 ms(100 Hz),只需把动作块重采样,或用 dt = 10 ms 重造数据(约 5 小时)。 @@ -534,11 +559,11 @@ v2.3:**删除插补器交叉淡入/时间集成**(见 H3)。执行的必 | 指标 | 要求 | 现状参考 | |---|---|---| | 实际执行的碰撞帧 | **= 0**(以距离认证或 0.01° 审计测量,不用离散 1° 检查) | rt_drag_bench 0 | -| 到达率 | route **60/60**,near pos **30/30**,near rt **30/30**,**另造 ≥1000 例 near_column 一次性验收集 0 失败**;held-out(分母只算可达任务)≥ 98%,D 类另考停靠距离 ≤ 老师 + 5 mm | 60/60、30/30、30/30 | +| 到达率 | route **60/60**,near pos **30/30**,near rt **30/30**,**另造 ≥1000 例 near_column 一次性验收集 0 失败**;held-out(分母只算可达任务)≥ 98%,D 类另考停靠距离 ≤ 老师 + 5 mm | 60 例随机基准(沙箱 bench.cjs)有效 60/60;**仓库 `tests/route_bench.cjs`(40 例)在 `3c7c814` 上重跑:到达 40/40、细验有效 39/40**(1 例到达但路径细验不过,2026-10-17 21:28 实测);near 30/30、30/30 | | 到达用时 | ≤ 老师同任务路径动画时长 × 1.3 | — | | 关节行程 | ≤ 现有规划器 × 1.10 | route 平均 467° | | 冷启动(新目标→第一个动作) | < 10 ms | 首次全量 IK 最差约 2 s | -| 每周期耗时(推理+安全层)P99 | < 15 ms | 拖拽重规划 P99 约 321 ms | +| 每次推理(每 60 ms)耗时(推理+安全层)P99 | < 20 ms | 拖拽重规划 P99 约 321 ms | | 刹停发生率 | < 2% 的周期 | — | | 模式摇摆(≥3 次切换)| < 1% 的任务 | — | | 策略单独(关安全层)碰撞率 | < 3%(参考:ELMP-APG 8.9%,DRP 10.16%) | — | @@ -550,7 +575,7 @@ v2.3:**删除插补器交叉淡入/时间集成**(见 H3)。执行的必 ## 10. 风险与维护 1. **局部极小**:可微代价和闭环策略都可能卡在立柱前"想直穿过去又被安全层挡住"。对策:B/C 类数据加权、模式头学左右绕、E2 错题少量老师补数据(§7.2)。这是无老师方案最大的风险。 -2. **碰撞模型/立柱变动 = 重训**:指纹不一致即拒绝运行。重训流程:§4(约 5 h)→ §6(约 4 h)→ §7(约 2–4 h)。 +2. **碰撞模型/立柱变动 = 重训**:指纹不一致即拒绝运行。重训流程:§4(约 5 h)→ §6(约 1.5–5.6 h,以 2000 步吞吐实测为准)→ §7(约 2–4 h)。 3. **安全层耗时**:最坏周期可能超 5 ms,见 §8.3 的流水线方案。 4. **老师缺陷**:`ci27` 姿态根枚举漏分支(姿态偏差约 97.5°)会进入预训练数据;APG 的姿态到达项可以部分纠正,必要时先修老师。 5. **真机迁移**:浏览器的"执行"是理想插补;真机需加速度/力矩限制(TOPP 类时间参数化)和跟踪误差余量(把 margin 再加大)。 diff --git a/docs/方案逐项核查报告.html b/docs/方案逐项核查报告.html index 475a132..0a7259f 100644 --- a/docs/方案逐项核查报告.html +++ b/docs/方案逐项核查报告.html @@ -279,8 +279,9 @@ id="toc-后训练fine-tune方案与遗漏范式评估">后训练(fine-tune)方案逐项核查报告(v2.3 证据附录)
-2026-10-17。四路全文精读 + -沙箱实验。各节原样收录,正文结论见《Transformer轨迹拟合训练方案》§0A。
+2026-10-17。这是修复前的审查记录(问题 + 证据 + +建议),不是修复结果。修复已落在《Transformer轨迹拟合训练方案》v2.3.1 +正文,状态表见其 §0A.5。
一、§4–§9 逐项核查与内部不一致
diff --git a/docs/方案逐项核查报告.md b/docs/方案逐项核查报告.md index 0a2db68..0443481 100644 --- a/docs/方案逐项核查报告.md +++ b/docs/方案逐项核查报告.md @@ -1,6 +1,6 @@ # 方案逐项核查报告(v2.3 证据附录) -> 2026-10-17。四路全文精读 + 沙箱实验。各节原样收录,正文结论见《Transformer轨迹拟合训练方案》§0A。 +> 2026-10-17。**这是修复前的审查记录**(问题 + 证据 + 建议),不是修复结果。修复已落在《Transformer轨迹拟合训练方案》v2.3.1 正文,状态表见其 §0A.5。 ---